[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с проверкой пароля
djar
Делаю электронную библиотеку на PHP+MSSQL.

На главной странице будет форма входа - для читателей и для сотрудников библиотеки.

Делаю две формы:

<br>
Для читателя:<br>
<form
action="" method="post">
<input
name="login" type="text" value="<?php if ($_POST['who']=="member") {echo $login;} ?>">
<input
name="password" type="password" value="">
<input
name="who" type="hidden" value="member">
<input
type="submit" value="Войти">
</form>

Для сотрудника:<br>
<form
action="" method="post">
<input
name="login" type="text" value="<?php if ($_POST['who']=="lib") {echo $login;} ?>">
<input
name="password" type="password" value="">
<input
name="who" type="hidden" value="lib">
<input
type="submit" value="Войти">
</form>


И php-код в этом же файле перед html-формами:

<?php

$login = $_POST['login'];
$password = $_POST['password'];

if ($_POST['who']) { //проверяем, была ли нажата кнопка Войти в форме
if ($login!='' and $password!='') { //проверяем, чтобы логин и пароль не были пустыми
include("sys/sql_connect.php"); //подключаемся к БД
if ($_POST['who']=="member") { //если входит читатель, то
$q = "SELECT member_fio,ticket FROM _members WHERE member_fio=\"".$login."\"";
$res = mssql_query($q);
$number = mssql_num_rows($res);
if ($number == 1) { //если есть запись с таким логином, то
$row = mssql_fetch_array($res);
if ($password==$row['ticket']) {//проверяем пароль
echo "Добро пожаловать, ".$row['member_fio'].". Вы - читатель. Номер вашего читательского билета - ".$row['ticket'].".";
}
else {echo "Пароль неверный";}
}

else {echo "Такого юзера не существует";}
}

else if ($_POST['who']=="lib") { //если входит сотрудник, то
$q = "SELECT login_lib,password_lib FROM _users WHERE login_lib=\"".$login."\"";
$res = mssql_query($q);
$number = mssql_num_rows($res);
if ($number == 1) {
$row = mssql_fetch_array($res);
if ($password==$row['password_lib']) {
echo "Вы - сотрудник. Ваш пароль - ".$row['password_lib']." ваш логин - ".$row['login_lib'];
}
else {echo "Пароль неверный";}
}

else {echo "Такого юзера не существует";}
}
}

else {echo "Вы ввели не все данные";}
}


?>


Сначала проверяем, был ли нажат submit в форме, потом узнаём, кто входит - читатель или сотрудник, и выполняем различные действия для них.

Блоки для сотрудника и читателя полностью идентичны. Но почему-то для читателя - всё работает, а для сотрудника - когда ввожу верные данные - выводится "Пароль неверный".

Пробовал в формах поменять местами значения скрытых полей - и снова та же фигня - для читателей всё работает, для сотрудников - "Пароль неверный".

Если вставить

echo $row['login_lib'].$row['password_lib'];

после заполнения $row, то выводит и логин и пароль для этого логина. То есть из БД берёт, но сверить почему-то не получается.

Где я накосячил?



Спустя 4 минуты, 42 секунды (25.03.2011 - 13:10) inpost написал(а):
у тебя структура такая:
if($password !=)
{
if($_POST['who'] == 'member')
else {echo "Такого юзера не существует";}
}

elseif($_POST['who'] == 'lib')


Наглядно схематически отобразил твою ошибку вложенностей?

Спустя 10 минут, 23 секунды (25.03.2011 - 13:21) djar написал(а):
Да, наглядно, но я не могу найти у себя эту ошибку ph34r.gif
В какой-то строке нужно убрать или добавить }?

Спустя 21 минута, 48 секунд (25.03.2011 - 13:42) inpost написал(а):
djar
Ошибка в логике.
Со скобками всё впорядке, тебе надо изменить
if-else структуру!
Посмотри на проверки $_POST['who'], они должны быть на одном уровне, а у тебя на разных!

Спустя 11 минут, 3 секунды (25.03.2011 - 13:54) djar написал(а):
Смотрю и в упор не вижу ошибку. Вроде на одном уровне. И в php editor строки сворачиваются как надо.

Попытаюсь вставить скриншот

Спустя 33 минуты, 53 секунды (25.03.2011 - 14:27) inpost написал(а):
djar
Пока вручную не перебрал... Ты бы хоть чуть-чуть стиля добавил бы, чтобы хоть понятно было бы всю эту зебру.
Сделай в начале: print_r($_POST); проверь переменные, потом внутри условия сделай проверки, можешь в нужном месте писать: exit('Дошли до этого места!');

Спустя 47 минут, 40 секунд (25.03.2011 - 15:15) djar написал(а):
Разобрался. В БД под пароль отведено 25 символов в таблице, и запрос возвращал все 25. Сделал

$pass_len = strlen($password);
$bd_pass = substr($row['password_lib'],0,$pass_len);

и всё заработало.

Спустя 19 минут, 33 секунды (25.03.2011 - 15:35) T1grOK написал(а):
Это извращение на мой взгляд. Лучше если есть возможность изменить длину поля в БД

Спустя 2 минуты, 48 секунд (25.03.2011 - 15:37) djar написал(а):
Цитата
Это извращение на мой взгляд. Лучше если есть возможность изменить длину поля в БД

Как? Хочу оставить возможность использования 25-значных паролей)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.