Считывается только последняя строка
Сделала систему проверки пароля, но,почему то,в if заходит только последняя пара логин-пароль, почему?(
<?php
function db_search($login,$pass)
{
$db_name="db.txt";
$a=file($db_name);
foreach($a as $kk=>$vv)
{
echo $kk." ".$a[$kk]."<br>";
$c=explode(";",$vv);
echo $c[0]." ".$c[1]."<br>";
if(($login==$c[0])&&($pass==$c[1]))
{
$z=1;
}
}
return $z;
}
?>
Ответы (1 шт):
Автор решения: Meow
→ Ссылка
Я правильно понял, что функция просто должна проверять наличие логина/пароля в базе? Если да - тогда предлагаю такое решение:
function doesAuthDataExists(string $login, string $password): bool
{
// Для примера используем обычный массив (вместо db.txt)
$array = [
'login1;password1',
'login2;password2',
'login3;password3',
'login4;password4'
];
foreach ($array as $key => $value) {
[$existingLogin, $existingPassword] = explode(";", $value);
if ($login === $existingLogin && $password === $existingPassword) {
return true;
}
}
return false;
}
doesAuthDataExists('login1', 'password1'); // Вернёт true
Затем дополним функцию, чтобы она могла работать с вашим текстовым файликом:
function doesAuthDataExists(string $dbFileName, string $login, string $password): bool
{
$fileHandle = fopen($dbFileName, 'r');
$contents = fread($fileHandle, filesize($dbFileName));
fclose($fileHandle);
$array = explode(PHP_EOL, $contents);
foreach ($array as $key => $value) {
[$existingLogin, $existingPassword] = explode(";", $value);
if ($login === $existingLogin && $password === $existingPassword) {
return true;
}
}
return false;
}
if (doesAuthDataExists(__DIR__ . '/database.txt', 'user123', 'password123')) {
// Выполняем какие-то действия...
}