Считывается только последняя строка

Сделала систему проверки пароля, но,почему то,в 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')) {
    // Выполняем какие-то действия...
}
→ Ссылка