Функция PHP strcmp, выдающая странные результаты?

У меня есть файл с именем users.txtгде у меня много строк сочетаний имени пользователя и пароля. Вот пример этого файла:

kyle:pass1
steve:pass2
john:pass3
ralph:pass4

Таким образом, имя пользователя будет steve и пароль будет pass1, Они передаются в мой файл, login.php, через POST. Итак, вот что я написал до сих пор:

$username = $_POST["name"];
$password = $_POST["password"];

$lines = file("users.txt");
foreach($lines as $line) {
$inputUserInfo = explode(":", $line);
$inputUsername = $inputUserInfo[0];
$inputPassword = $inputUserInfo[1];
if (strcmp($username, $inputUsername) == 0) {
echo 'username matched!';
}
if (strcmp($password, $inputPassword) == 0) {
echo 'password matched!';
}
}

Я не уверен, что происходит, но имя пользователя подходит как метод strcmp возвращает 0. Затем, когда я пытаюсь сопоставить пароль для steve а также pass2или любая другая теоретически обоснованная комбинация, метод strcmp возвращает -2, -1 или что-либо кроме нуля.

Я действительно не могу сказать, почему это происходит, я перепробовал все, что мог придумать. Кто-нибудь может сказать, что здесь происходит?

2

Решение

Не забудьте добавить флаги внутри file():

$lines = file("users.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

Это в основном добавляет, что newline в поле вашего пароля. Если вы внимательно изучите это, в вашем пароле будет добавлена ​​новая строка:

var_dump($inputPassword);

string(7) "pass2
"

Таким образом, несоответствие.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]