<?php
$login=@$_GET['login'];
$pass=@$_GET['pass'];
$file = file($login.".dat");
$log = $file[3]; //Читаем третью строчку в файле
if(strcmp($pass, $log)) //Сравниваем полученный пароль с паролем из файла
{echo "Пароль правильный";}
else
{echo "Пароль не правильный";}
?>
Почему-то в любом случае пишет "Пароль правильный". Проверял все не один раз. Искал везде где только можно и так ничего и не получилось. Помогите пожалуйста найти ошибку или посоветуйте какой-нибудь другой способ.
Спустя 31 минута, 42 секунды (23.03.2011 - 23:17) inpost написал(а):
if($pass == $log) не подойдет?
Спустя 9 минут, 30 секунд (23.03.2011 - 23:27) Toland написал(а):
Пробовал. Все-равно тоже самое
Спустя 1 час, 10 минут, 11 секунд (24.03.2011 - 00:37) inpost написал(а):
echo $pass.'<br />'.$log; // смотри и проверяй, скорее всего они не равны просто напросто!
Спустя 4 минуты, 24 секунды (24.03.2011 - 00:41) Toland написал(а):
И так тоже пробовал.
Я уже все облазил и все способы перепробовал.
Мне кажется, что в конце строчки в файле какой-то невидимый символ что-ли. Но скорей всего я щас сказал глупость
Я уже все облазил и все способы перепробовал.
Мне кажется, что в конце строчки в файле какой-то невидимый символ что-ли. Но скорей всего я щас сказал глупость
Спустя 43 минуты, 47 секунд (24.03.2011 - 01:25) inpost написал(а):
Toland
Вывелось 2 одинаковых текста? Ты уверен, что там до и после нет лишних пробелов? Используй mb_strlen, проверь обе переменных по длине. Приведи их к единому типу (string)$pass;
Вывелось 2 одинаковых текста? Ты уверен, что там до и после нет лишних пробелов? Используй mb_strlen, проверь обе переменных по длине. Приведи их к единому типу (string)$pass;
Спустя 5 минут, 3 секунды (24.03.2011 - 01:30) Trianon написал(а):
strcmp() возвращает значение, которое if() принимает за истину, возвращает именно в том случае, когда строки отличаются.
Точно также, как if(n1-n2) окажется истиннным, когда n1 отличается от n2 .
Следует изменить на if(!strcmp(...))
Далее. В элементе массива, полученного от функции file() будет не просто строка, а строка, завершенная символами конца строки "\r\n" (или "\n"). Поэтому совпадение строк не будет зафиксировано никогда.
Тут можно посоветовать воспользоваться функцией rtrim()
либо применить опции при вызове file, отсекающие хвосты строк.
Это если зарыть глаза на то, что хранить пароли не следует, а уж передавать их методом GET - вобще дикость.
Точно также, как if(n1-n2) окажется истиннным, когда n1 отличается от n2 .
Следует изменить на if(!strcmp(...))
Далее. В элементе массива, полученного от функции file() будет не просто строка, а строка, завершенная символами конца строки "\r\n" (или "\n"). Поэтому совпадение строк не будет зафиксировано никогда.
Тут можно посоветовать воспользоваться функцией rtrim()
$log = rtrim($file[3]);
либо применить опции при вызове file, отсекающие хвосты строк.
Это если зарыть глаза на то, что хранить пароли не следует, а уж передавать их методом GET - вобще дикость.
Спустя 8 часов, 39 минут, 36 секунд (24.03.2011 - 10:10) Toland написал(а):
Спасибо всем большое все советы оказались очень полезными.
Может я и правда делаю много глупостей и ошибок, но я ведь только недавно начал изучать php еще раз спасибо:)
Может я и правда делаю много глупостей и ошибок, но я ведь только недавно начал изучать php еще раз спасибо:)