Имеется такая проблема: пишу простенький 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 Это сработает для нолевой строки, но дальше - нет
Не в этом проблема. Я ставил вывод хеша пароля который ввёл клиент и который лежит в файле. Дак вот они абсолютно одинаковы, но скрипт не считает их таковыми
ну тут ваше скрипт крайне кривой!! и вобще зачем пользователей хранить в файле с расширением php ?? попробуй заменить $line = explode( "|", $file[$i] ); на $line = explode( '\|', $file[$i] ); и что таоке $j = $i+1; ??
Прогони через trim() Хеш из файла, может к нему еще и \n или пробел приклеился, который на глазок можно не заметить
PHP: 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 баксов
PHP: $file = fopen('users.inc'); while(!feof($file)) { $line = rtrim(fgets($file)); $line2=split('\|',$line) if (line2[0] == $login && line2[1] == $hash) die('Вы вошли.!'); }
2GreenBeer PHP: if(trim($login) == $auth[0] AND trim($pas) = $auth[1]){ Чтобы войти, достаточно згать только логин, а все из-за опечатки=) 2nc.STRIEM PHP: $line2=split('\|',$line) Экранировать не нужно, ибо кавычки одинарные, и искать в таком случае будет именно \|, а не |
пойду зарегаю юзера какого-нить типа $_GET['cmd'] пасморим че будет))) это я к тому что расширение лучше другое выбрать
а ты проверь сначало))) так: PHP: $fo=fopen('1.txt','r'); $s=fgets($fo); $a=split('|',$s); print_r($a); потом так: PHP: $fo=fopen('1.txt','r'); $s=fgets($fo); $a=split('\|',$s); print_r($a);
split() разбивает по регулярному выражению, и экранирование идет как бы не для парсера кода php, а для парсера пэттернов.
Спасибо! А про разрешение - это только тестовый вариант скрипта. Как только он будет работать я все заменю
Я с этим вроде разобрался, но вот сново застрял, уже на сейсиях. Вобщем я создаю сейсию, регистрирую переменные, но на другой странице зти переменные не существуют. А с куками тохе неудача. Php пишет ошибку что типа заголовки уже отправлены. Может кто поможет мне разобратся?