Просмотр полной версии : Проблема с php скриптом
Имеется такая проблема: пишу простенький php движок для сайта, и вот неожиданно застрял на аутидентификации.
Сделал регистрацию, а вот со входом проблемы... Вобшем логин пароль проверку проходит, а вот пароль нет(в файле хранится его хеш)
Вот сам код:
if ($act == login)
{
$login = $_POST['login'];
$pas = $_POST['pas'];
$testlogin = empty($login);
$testpas = empty($pas);
if (($testlogin == 1)or($testpas == 1))
{
echo 'Ошибка! Не все поля заполнены!';
exit;
}
$file = file("users.inc.php");
$users = count($file);
$hash = md5($pas);
for ($i=0; $i<$users; $i++)
{
$line = explode( "|", $file[$i] );
$j = $i+1;
По идее ошибка где-то здесь, но найти её я не могу...
if (($line[$i] == $login)and($line[$j] == $hash)
{
echo 'Вы вошли.!';
exit;
}
}
Может кто поможет разобратся?
Если у тебя в файле данные в виде login|hash, тогда измени:
if (($line[0] == $login)and($line[1] == $hash)
А так как ты написал, скрипт ищет в твоей строке столбцы с индексом <номер строки>, <номер строки>+1
Это сработает для нолевой строки, но дальше - нет
Не в этом проблема. Я ставил вывод хеша пароля который ввёл клиент и который лежит в файле. Дак вот они абсолютно одинаковы, но скрипт не считает их таковыми
nc.STRIEM
25.03.2007, 20:08
ну тут ваше скрипт крайне кривой!!
и вобще зачем пользователей хранить в файле с расширением php ??
попробуй заменить
$line = explode( "|", $file[$i] );
на
$line = explode( '\|', $file[$i] );
и что таоке $j = $i+1; ??
Прогони через trim() Хеш из файла, может к нему еще и \n или пробел приклеился, который на глазок можно не заметить
GreenBear
25.03.2007, 20:14
if($act == 'login'){
$login = $_POST['login'];
$pas = $_POST['pas'];
if(!$login OR !$pass){
die('Ошибка! Не все поля заполнены!');
}
$users = file('users.inc.php');
$count = sizeof($users);
$pas = md5($pas);
for($i=0;$i<$count;$i++){
$auth = $users[$i];
$auth = explode('|', $auth);
if(trim($login) == $auth[0] AND trim($pas) = $auth[1]){
die('Вы вошли!');
}
}
}
с тебя 10 баксов
nc.STRIEM
25.03.2007, 20:15
$file = fopen('users.inc');
while(!feof($file))
{
$line = rtrim(fgets($file));
$line2=split('\|',$line)
if (line2[0] == $login && line2[1] == $hash)
die('Вы вошли.!');
}
2GreenBeer
if(trim($login) == $auth[0] AND trim($pas) = $auth[1]){
Чтобы войти, достаточно згать только логин, а все из-за опечатки=)
2nc.STRIEM
$line2=split('\|',$line)
Экранировать не нужно, ибо кавычки одинарные, и искать в таком случае будет именно \|, а не |
DRON-ANARCHY
25.03.2007, 21:43
пойду зарегаю юзера какого-нить типа $_GET['cmd']
пасморим че будет)))
это я к тому что расширение лучше другое выбрать
nc.STRIEM
25.03.2007, 22:11
2nc.STRIEM
$line2=split('\|',$line)
Экранировать не нужно, ибо кавычки одинарные, и искать в таком случае будет именно \|, а не |
а ты проверь сначало)))
так:
$fo=fopen('1.txt','r');
$s=fgets($fo);
$a=split('|',$s);
print_r($a);
потом так:
$fo=fopen('1.txt','r');
$s=fgets($fo);
$a=split('\|',$s);
print_r($a);
Экранировать не нужно, ибо кавычки одинарные, и искать в таком случае будет именно \|, а не |
split() разбивает по регулярному выражению, и экранирование идет как бы не для парсера кода php, а для парсера пэттернов.
Спасибо! А про разрешение - это только тестовый вариант скрипта. Как только он будет работать я все заменю
Я с этим вроде разобрался, но вот сново застрял, уже на сейсиях.
Вобщем я создаю сейсию, регистрирую переменные, но на другой странице зти переменные не существуют. А с куками тохе неудача. Php пишет ошибку что типа заголовки уже отправлены. Может кто поможет мне разобратся?
GreenBear
26.03.2007, 19:49
на другой странице тоже должна быть функция session_start() прописана
nc.STRIEM
26.03.2007, 20:59
Php пишет ошибку что типа заголовки уже отправлены. Может кто поможет мне разобратся?
Устанавливать куки можно только до того как ты отправил какую либо инфу браузеру
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot