Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таблица пользователей - работа из PHP-скрипта с СУБД MySQL
 
 автор: ChieFSS   (07.06.2007 в 20:58)   письмо автору
 
 

Переменные username и passwd передаются из формы на предыдущей странице.
По идеи сервер должен найти поле в БД с таким же логином и паролем и в случае удачного результата выдать "Вы зарегистрированы как (и тут имя пользователя)".
Но скрипт при любом значении логина и пароля показывает что я зарегистрирован когда таких логинов и паролей в БД нет вообще.
<?
function login() {
    if(!empty(
$_POST['username']) AND !empty($_POST['passwd'])) {
      
$username $_POST['username'];
      
$passwd $_POST['passwd'];
      
$connect = new db;
      
$query "SELECT * FROM users WHERE username = '".$username."' and passwd = '".$passwd."'";
      
$result mysql_query($query);
      if(
$result) {
        
$log $username;
      }
      if(isset(
$log)) {
        echo 
'Вы зарегистрированы как '.$log;
      }
    }
?>


Кстати заодно вопрос. Чем лучше будет шифровать пароль md5 или crypt с сальтом?

   
 
 автор: bronenos   (07.06.2007 в 21:31)   письмо автору
 
   для: ChieFSS   (07.06.2007 в 20:58)
 

надо проверять
if (mysql_num_rows($result))

   
 
 автор: hammet   (07.06.2007 в 21:37)   письмо автору
 
   для: ChieFSS   (07.06.2007 в 20:58)
 

$result = mysql_query($query);
какой результат мы получаем? - ресурс. Затем вы проверяете
if($result) {
$log = $username;
}
присвоение будет выполняться в случае если условие истинно.
Вы можете например проверять по mysql_num_rows($result) > 0 хотя это тоже не самое верное решение)))

Пароль в БД лучше хранить хэшированным. И запрос строить таким образом
$password = md5($_POST['password']);
$sql = "SELECT `login` FROM `users` WHERE MD5(`password`)=$password";
ну и логин затем сверять)

это просто рекомендация - один из множества вариантов реализации)

   
 
 автор: ChieFSS   (07.06.2007 в 22:09)   письмо автору
 
   для: hammet   (07.06.2007 в 21:37)
 

Я решил вначале проверить логин т.к. он не может быть одинаковым в отличие от пароля.

<?
      $query 
mysql_query("SELECT * FROM users WHERE username = '".$username."'");
      if(
$query) {
        if (
mysql_num_rows($query) > 0) {
          echo 
'Есть такой логин. Авторизация возможна';
        }
        else {
          echo 
'Такого логина не существует';
        }
      }
?>


На месте строчки "echo 'Есть такой логин. Авторизация возможна';" должен быть код проверки колонки пароля этого поля.
Как можно реализовать? Что-то в голову не лезет.

   
 
 автор: hammet   (07.06.2007 в 22:22)   письмо автору
 
   для: ChieFSS   (07.06.2007 в 22:09)
 

Это еще хуже чем предыдущее.
Но если уж Вам так хочется....
SELECT * FROM users........
тут Вы извлекли данные. Преобразуйте их в массив и сравните пароль из БД с паролем переданным из формы.

ЗЫ и советую почитать что нибудь про SQL-инъекции

   
 
 автор: ChieFSS   (07.06.2007 в 22:33)   письмо автору
 
   для: hammet   (07.06.2007 в 22:22)
 

А все.. просто не увидел что по логину выводится. Теперь все работает.
Спасибо.


>ЗЫ и советую почитать что нибудь про SQL-инъекции
А что-нибудь это что? Я читал, но как защищаться еще не думал

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования