У меня есть файл с именем 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 или что-либо кроме нуля.
Я действительно не могу сказать, почему это происходит, я перепробовал все, что мог придумать. Кто-нибудь может сказать, что здесь происходит?
Не забудьте добавить флаги внутри file()
:
$lines = file("users.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
Это в основном добавляет, что newline
в поле вашего пароля. Если вы внимательно изучите это, в вашем пароле будет добавлена новая строка:
var_dump($inputPassword);
string(7) "pass2
"
Таким образом, несоответствие.
Других решений пока нет …