Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация на php and mysql, Помогите разобраться 
V
    Опции темы
nepster
Дата 26.4.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Всем привет. Я написал скрипт регистрации на php. Скрипт вводит данные в базу. Я очень плохо знаю язык и пишу скрипты и параллельно учусь. Подскажите что тут не правильно, потому что когда в форме вписываешь данные и жмешь отправить этот скрипт выдает постоянно Такой логин с паролем не найдены в базе данных
, хотя данные там есть. То есть я ввожу все правильно (логин пароль)



Код

<?
 
@include ('data/config.php'); // подключение к базе
 
 
if (isset($_POST['nick']) && isset($_POST['pass']))
{
   $login = mysql_real_escape_string($_POST['nick']);
   $pass = md5($_POST['pass']);
 
   // делаем запрос к БД
   // и ищем юзера с таким логином и паролем
 
   $query = "SELECT `id`
           FROM `users`
           WHERE `login`='{$login}' AND `pass`='{$pass}'
           LIMIT 1";
 
   $sql = mysql_query($query) or die(mysql_error());
 
 
   // если такой пользователь нашелся
 
   if (mysql_num_rows($sql) == 1) {
       // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
 
       $row = mysql_fetch_assoc($sql);
 
       $_SESSION['user_id'] = $row['id'];
 
       // не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
   }
   else {
       die('Такой логин с паролем не найдены в базе данных.');
   }
}
 
 
 
?>








Это сообщение отредактировал(а) nepster - 26.4.2009, 15:09
PM MAIL   Вверх
pizzz
Дата 26.4.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 14.12.2008
Где: Омск

Репутация: 6
Всего: 8



Ну во первых. Умейте отлаживать скрипты.

Во время отладки пишите в самом начале скрипта 
Код

error_reporting('E_ALL');
 это поможет видеть php ошибки и придупреждения.

Далее, после mysql_query желательно поставить echo mysql_error(); дабы видеть есть ли ошибка mysql.

Ща код посмотрю

Добавлено через 3 минуты и 19 секунд
хм. Так все верно smile и даже красиво. 

Советую Вам в самом начале поставить echo $_POST['login'] и пасс. И посмотреть а передаються ли вобще данные. ПРивидите пожалуйста код формы.
--------------------
Спасибо много, жмем кнопку репутация.  Извините меня за орфографические ошибки, я стараюсь не ошибаться, а они все равно просачиваются гады.     
PM MAIL ICQ   Вверх
nepster
Дата 26.4.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Форма 

Код


<style>
#enter
{
border-style:solid;
border-width: 1px;
border-color:#D2D2D2;
background-color:#F0F0F0;
padding:30px;
font-family:"Times New Roman", "serif";
font-size:10pt;
color:#676767;
width:200px;
height:200px;
}
#button{
font-family: Verdana, Helvetica, sans-serif;
font-size: 12px;
background-color: #C0C0C0;
color: #ffffff;
border: 3px;
padding: 2px;
font-weight:700;
}
</style>

<!--------------------------------------------------->

<table>

<tr><td id=enter><h3>Авторизация</h3>

<form action="login.php" method="post">
Логин<br>

<input name="nick" type="text" >

<br>

Пароль<br>
<input name="pass" type="text" >

<br><br>

<input type="submit" value="вход" name=go id=button>
</form>
</td></tr></table>







Я еще до сессий не дошел в урока =), так что не очень вас понял.  А этот скрипт я нашел на одном сайте и немного подогнал под себя. 

PM MAIL   Вверх
SneG0K
Дата 26.4.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(nepster @  26.4.2009,  14:06 Найти цитируемый пост)
 WHERE `login`='{$login}' AND `pass`='{$pass}

А зачем фигурные скобки?
Код

WHERE `login` = '$login` AND `pass` = '$pass'

PM WWW Skype   Вверх
nepster
Дата 26.4.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Исправил, но без изменений, пишет что нет такого пользователя, но он есть 100% проверял. 
PM MAIL   Вверх
bars80080
Дата 26.4.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а может количество записей больше одной? у вас же проверка идёт == 1
PM MAIL WWW   Вверх
nepster
Дата 26.4.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



То есть, не понял, можно подробнее плз 
PM MAIL   Вверх
bars80080
Дата 26.4.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну вот:

Код

   if (mysql_num_rows($sql) == 1) {


то есть проверка: есть ли в БД одна такая строка. а если их больше?
попробовали бы лучше так

Код

   if (!empty(mysql_num_rows($sql))) {

PM MAIL WWW   Вверх
gta4kv
Дата 26.4.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



bars80080, а почему бы не оставить:

Код

if( ! mysql_num_rows( $sql ) ) { }


?

Добавлено через 2 минуты и 4 секунды
Цитата

то есть проверка: есть ли в БД одна такая строка. а если их больше?

Тоже странная логика. )) 
Записи с одним логином не должно быть ))

PM MAIL   Вверх
nepster
Дата 26.4.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Код

<?
 
@include ('data/config.php'); // подключение к базе
 
 
if (isset($_POST['nick']) && isset($_POST['pass']))
{
   $login = mysql_real_escape_string($_POST['nick']);
   $pass = md5($_POST['pass']);
 
   // делаем запрос к БД
   // и ищем юзера с таким логином и паролем
 
   $query = "SELECT `id`
           FROM `users`
           WHERE `login`='$login' AND `pass`='$pass'
           LIMIT 1";
 
   $sql = mysql_query($query) or die(mysql_error());
 
 
   // если такой пользователь нашелся
 

if( ! mysql_num_rows( $sql ) ) { 

       // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
 
       $row = mysql_fetch_assoc($sql);
 
       $_SESSION['user_id'] = $row['id'];
 
       // не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
   }
   else {
       die('Такой логин с паролем не найдены в базе данных.');
   }
}
 
 
 
?>



Вот сделал так... 

И выводит голый экран. То есть прописываешь правильные данные или не правильные - голый экран. 
PM MAIL   Вверх
gta4kv
Дата 26.4.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Перед:

Цитата

if( ! mysql_num_rows( $sql ) ) { 


сделай:

Код

var_dump( $sql );
var_dump( mysql_num_rows( $sql ) );

PM MAIL   Вверх
nepster
Дата 26.4.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



начало выдавать 



resource(4) of type (mysql result) int(0) 
PM MAIL   Вверх
DeadMan83
Дата 26.4.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 17.2.2006
Где: Минск

Репутация: нет
Всего: нет



а что лежит в базе данный в поле pass - пароль в чистом виде или его md5-хеш?
PM MAIL WWW ICQ Skype GTalk   Вверх
nepster
Дата 26.4.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



просто пароль в чистом виде


user posted image
PM MAIL   Вверх
ksnk
Дата 26.4.2009, 19:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата

просто пароль в чистом виде

А сравнивается, значит,  md5?  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.