Мне нужна помощь в выяснении этой проблемы PHP с использованием файлов и, если Statemtents - PullRequest
0 голосов
/ 02 декабря 2018

Я и мой Учитель оба просмотрели это, и я не могу найти ошибку, которая заставляет его печатать wrong, когда электронное письмо в файле совпадает с введенным

<?php
    class Account
    {
        public $EMail;
        public $PassWord;
        public $UserName;
    }

    $user = array();
    $Username = $_GET['username'];
    $FileName = "USERS//".$Username.".txt";
    if(file_exists($FileName))
    {
        $File = file($FileName);
        foreach($File as $Line)
        {
            array_push($user, $Line);
        }

        $user[0] = (string)$user[0];
        $UserDet = new Account();
        $UserDet->EMail = $user[0];

        echo $UserDet->EMail;
        $Email = $_GET['email']; $Email = (string)$Email;

        if($Email == $UserDet->EMail)
        {
            echo "correct";
        }
        else
        {
            echo "wrong";
        }
    }
    else
    {
        echo "No Account found";
    }
?>

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Функция file() считывает каждую строку файла в элементы массива.Я имею в виду, что он читает всю строку, , включая перевод строки в конце .Если вы хотите пропустить эти новые строки, используйте второй аргумент, чтобы сказать так:

$File = file($FileName, FILE_IGNORE_NEW_LINES);

Кроме того, почему вы используете цикл для помещения содержимого файла в пустой массив?Разве вы не можете просто присвоить возврат из file() непосредственно в массив $user?И нет необходимости печатать вещи как string.Все, что читается из файла или в $_GET, уже будет строкой, поэтому при его преобразовании не будет никакого преимущества.

0 голосов
/ 02 декабря 2018

сравнение строк с оператором if () обычно не рекомендуется.Вы можете сделать это, но в итоге вы будете выдергивать свои волосы вот так.Я бы посоветовал полностью санировать как входные данные, так и записи базы данных, что-то вроде нижнего регистра (strtolower ()) каждой строки и удалить все пробелы (preg_replace ('/ \ s /', '', $ string). Затем использовать strcmp () http://php.net/manual/en/function.strcmp.php для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...