PDA

Просмотр полной версии : Проблема с php скриптом


SJet
25.03.2007, 19:36
Имеется такая проблема: пишу простенький 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;

}
}

Может кто поможет разобратся?

Helios
25.03.2007, 19:54
Если у тебя в файле данные в виде login|hash, тогда измени:
if (($line[0] == $login)and($line[1] == $hash)

А так как ты написал, скрипт ищет в твоей строке столбцы с индексом <номер строки>, <номер строки>+1

Это сработает для нолевой строки, но дальше - нет

SJet
25.03.2007, 19:58
Не в этом проблема. Я ставил вывод хеша пароля который ввёл клиент и который лежит в файле. Дак вот они абсолютно одинаковы, но скрипт не считает их таковыми

nc.STRIEM
25.03.2007, 20:08
ну тут ваше скрипт крайне кривой!!
и вобще зачем пользователей хранить в файле с расширением php ??

попробуй заменить
$line = explode( "|", $file[$i] );
на
$line = explode( '\|', $file[$i] );

и что таоке $j = $i+1; ??

Helios
25.03.2007, 20:08
Прогони через 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('Вы вошли.!');
}

Helios
25.03.2007, 20:39
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);

SMiX
25.03.2007, 22:42
Экранировать не нужно, ибо кавычки одинарные, и искать в таком случае будет именно \|, а не |
split() разбивает по регулярному выражению, и экранирование идет как бы не для парсера кода php, а для парсера пэттернов.

SJet
26.03.2007, 06:18
Спасибо! А про разрешение - это только тестовый вариант скрипта. Как только он будет работать я все заменю

SJet
26.03.2007, 19:40
Я с этим вроде разобрался, но вот сново застрял, уже на сейсиях.
Вобщем я создаю сейсию, регистрирую переменные, но на другой странице зти переменные не существуют. А с куками тохе неудача. Php пишет ошибку что типа заголовки уже отправлены. Может кто поможет мне разобратся?

GreenBear
26.03.2007, 19:49
на другой странице тоже должна быть функция session_start() прописана

SJet
26.03.2007, 19:54
ок, сейчас попробую

nc.STRIEM
26.03.2007, 20:59
Php пишет ошибку что типа заголовки уже отправлены. Может кто поможет мне разобратся?
Устанавливать куки можно только до того как ты отправил какую либо инфу браузеру