Проверка на соответствие имени и пароля

225
08 июля 2017, 10:42

Есть проверка соответствия имени и пароля на php.Принцип такой: если имя есть в файле(хранение имён и паролей в json файле) то проверить соответствует ли введенный пароль тому, что записан.

$file = "../data/users.json";
$json_array = json_decode(file_get_contents($file), true);
$users = array();
if(is_array($json_array)) {
    $users = $json_array;
}
if(isset($users[$name])) {
    if($users[$name]["pass"] !== $password ){
        http_response_code(400);
    }
} 
else {
    $users[] = array("name" => $name, "pass" => $password, "id" => $i);
    $i = 0;
    foreach ($users as $key => $value) {
        $users[$key]["id"] = $i;
        $i++;
    }
    file_put_contents($file, json_encode($users, JSON_PRETTY_PRINT));
}

А вот так записано в файле

[
    {
        "name": "qwe",
        "pass": "qwe",
        "id": 0
    }
]

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

[
    {
        "name": "qwe",
        "pass": "qwe",
        "id": 0
    },
    {
        "name": "qwe",
        "pass": "qweqwe",
        "id": 1
    }
]
Answer 1

У вас после того, как вы выполняете json_decode() и записи его в переменную $users типа массив, создается ключ типа инт и его значение - это объект!

Когда вы делаете проверку:

$users[$name]

Вы ничего не можете проверить, т.к. нужно обращаться так:

$users[0]->name

Где [0] - это номер элемента массива $users

Посмотрите как нужно обращаться к вашему массиву:

$json_array = json_decode(file_get_contents('test.json'));
$password = 'qwe';
$users = array();
if(is_array($json_array)) {
    $users = $json_array;
}
if(isset($users[0]->name)) {
    if($users[0]->pass !== $password ){
        http_response_code(400);
    }
}

Ну а вообще, это нужно будет делать в цикле, перебирать массив в поиске конкретного значения, например, имени. И вообще, дело конечно ваше, но нужно рационально использовать то, что было придуманно для тех или иных целей, например в json файле не хранят пароли, по крайней мере, в моем мире!)

READ ALSO
Работа с клавиатурой в Win Api

Работа с клавиатурой в Win Api

Как через Win Api проверить состояние клавиши: зажата, нажата, отпущена? События использовать для этой цели не могуТолько функции

297