Почему мой цикл foreach не соответствует ключам в файле users.json - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь установить скрипт входа в систему, используя PHP и JSON (без базы данных), но у меня сохраняются эти ошибки

Предупреждение: использование неопределенной постоянной электронной почты - предполагается, что 'Email' (это будетвыдает ошибку в будущей версии PHP) в C: \ xampp \ htdocs \ networth-app \ index.php в строке 37

Примечание: преобразование массива в строку в C: \ xampp \ htdocs \ networth-app \ index.php в строке 37

Предупреждение: использование неопределенной константы Email - предполагается, что «Email» (это приведет к ошибке в будущей версии PHP) в C: \ xampp \ htdocs \ networth-app\ index.php в строке 37


    <?php
    session_start();
    $msg = '';

    /* Trigger when the login btn is clicked */
    if (isset($_POST['log'])) {

        /* Fetch users.json file */
        $data = json_decode(file_get_contents("users.json"), true);

        /* Get form data */
        $email = $_POST['email'];
        $pwd = $_POST['password'];

        /* Form validation */
        if (empty($email || $pwd)) {
            $msg = 'Please fill in all fields';
        } elseif (strlen($pwd) < 5) {
            $msg = 'Password must be more than 5 charcter.';
        } else {
            /* loop through the users.json data */
            foreach ($data as $user) {
                /* Login the user */
                if ($email === $user['Email'] && $pwd === $user['Password']) {
                    $_SESSION['Name'] = $user['Name'];
                    header('location: home.php');
                    exit;
                }
            }
        }
    }

    ?>

users.json

{
    "users": [
        {
            "Name": "Frank Spencer",
            "Email": "fraspecx@mail.com",
            "Password": "test"
        },
        {
            "Name": "Guy Daniel",
            "Email": "guyb@gmail.com",
            "Password": "test1"
        }
    ],
    "user": null
}

Я хочу иметь возможность войти в свой home.php и имя сеанса echo

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Его

{
    "users": [
        {
            "Name": "Frank Spencer",

Таким образом, вы получите к нему доступ как:

foreach ($data['users'] as $user) {
1 голос
/ 25 сентября 2019

Прежде всего, вы неправильно использовали данные json.

Просто посмотрите на переменную $ user в цикле foreach.

Вы используете ее неправильнопотому что вы добавляете к нему (с точками (.)) некоторую константу электронной почты, которая логически не существует в вашем файле.

У вас должно быть что-то подобное (конечно, проверьте, правильно ли написаны ключи массива "Email" или "Password"):

if ($email === $user["Email"] && $pwd === $user["Password"]) {
0 голосов
/ 25 сентября 2019

когда вы декодируете user.json, он конвертируется в массив, поэтому, если вы хотите получить прямой доступ к любому ключу массива, просто нужно написать как $ user ['Email'], а не $ user.Email, а также изменить$ user.Password к $ user ['Password'] Так что вам нужно обновить ваш foreach следующим образом

foreach ($data as $users) {
    foreach ($users as $user) {
        if(isset($user['Email'],$user['Password'])) {
            if ($email === $user['Email'] && $pwd === $user['Password']) {
                $_SESSION['Name'] = $user['Name'];
                header('location: home.php');
                exit;
            }
        }
    }
}

, потому что вы пытаетесь получить индекс электронной почты напрямую

...