У меня проблемы с использованием PHP для проверки имени пользователя и пароля, которые хранятся в файле - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь проверить, что имя пользователя и пароль, которые вводит пользователь, хранятся в файле, а не в базе данных. Я написал только пару имен пользователей и паролей, поместил их в файл с именем testPass.fil и разделил имя пользователя и пароли вкладками (\ t).

Мой код, кажется, работает, если я проверяю его, чтобы отобразить значение имени пользователя или пароля, которое я получил из файла с помощью функции разнесения. Однако всякий раз, когда я пытаюсь проверить имя пользователя и пароль, введенные пользователем на странице входа, в сравнении с теми, которые хранятся в файле, это вызывает у меня проблемы. Я попытался использовать оператор echo, чтобы проверить его, и он дает мне то, что выглядит точно такими же строками, но он не выполняет оператор «If», который проверяет, равны ли они. Извините, если есть глупый или запутанный вопрос, я работаю над этим некоторое время, и я знаю только немного PHP. Я выложу код ниже, спасибо за любую помощь.

<?php

  $userName=$_POST['userName'];
  $userPass=$_POST['userPass'];
  $correctPass=0;

  $file=fopen("testPass.fil","r");
  $record=fgets($file);

  while(!feof($file))
  {
    $fileData=explode("\t",$record);
    //echo "$fileData[0] <br> $userName <br><br> $fileData[1] <br> $userPass<br><br>";
    //this line was used to make sure that the username entered and my stored username were the same.

    if($userName==$fileData[0])
    {
      if($userPass==$fileData[1])
      {       
        $correctPass=1;
        break;
      }
    }

    $record=fgets($file);
  }

if($correctPass == 1)
{
  echo "UserName and Password are present";  
}
else
{
  echo "The UserName or Password you entered is incorrect.";
}

fclose($file);

?>

Ответы [ 4 ]

4 голосов
/ 13 июля 2011

Вам может понадобиться убрать пробелы из имени пользователя и паролей.

0 голосов
/ 13 июля 2011

fgets возвращает всю строку, включая символ новой строки в конце, вы не удаляете ее, поэтому сравниваете "password" и "password\n", которые не равны.

Вы можете исправить это с помощьюудаляя символ новой строки с rtrim() каждый раз, когда вы вызываете fgets:

$record = rtrim(fgets($file));

Если вы хотите разрешить пробелы в паролях, вы также можете указать, что он удаляет только возврат каретки и новую строку:

$record = rtrim(fgets($file, "\r\n"));
0 голосов
/ 13 июля 2011

Хм, создание базового ini-файла и просто вызов на него parse_ini_file будет намного меньше хлопот.

0 голосов
/ 13 июля 2011

Как говорит Синан, вам может потребоваться убрать пробелы из строк перед их сравнением, например, с помощью функции trim ().Вы также можете найти полезным запускать как исходные строки, так и строки имени пользователя для сравнения через strtolower (), чтобы сделать проверку входа без учета регистра.

...