Многомерный ассоциативный массив, session () и isset () для входа в систему, что я делаю не так? - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь создать простую страницу входа,

, если я беру следующий вариант массива, он работает:
$users = [['hello@domain.de' => 'Asd23'], ['hello2@domain.de' => 'hell5123']];
if (isset($logins[$userKey][$email]) && $logins[$userKey][$email] == $password)

, но с следующий вариант многомерного ассоциативного массива. Я не могу этого сделать.
Что я делаю или я неправильно понял?

// Multidimensional Associative Array
$users = [
  ////////////
  [
    'email' => 'sandra@domain.com',
    'password' => 'San1',
    'name' => 'Sandra',
    'lastname' => 'Meier',
    'status' => 'Admin',
    'content' => ''
  ],
  [
    'email' => 'franz@domain.com',
    'password' => 'Fra1',
    'name' => 'Franz',
    'lastname' => 'Eder',
    'status' => 'Standard',
    'content' => 'leer'
  ],
]

// check and assign submitted email and password to new variable
$email = isset($_POST['email']) ? $_POST['email'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';

if(isset($_POST['Submit'])) {

  // find the key from the given email
  // Multidimensional Array Searching (Find key by specific value)
  $userKey = array_search($email, array_column($users, 'email'));

  // check if the given email address and password exist and match
  if (isset($users[$userKey][$email]) && $users[$userKey][$password] == $password) {
    // success: email address and password exist and the email address matches the password

    // set session variables and redirect to protected page
    $_SESSION['UserData']['email'] = $users[$userKey][$email];
    header("location:{$protocol_domain}{$actualURl}");
    exit;
  } else {
    // unsuccessful attempt: email address and password do not exist or the emails do not match

    // Set error message
    $msg = '<span style="color:red">Invalid Login Details</span>';
  }

}

1 Ответ

1 голос
/ 12 января 2020

Поиск с помощью $userKey = array_search($email, array_column($users, 'email')); даст вам index , например - 0.

Далее вы проверите, установлен ли $users[0][$email]. Но он установлен , а не , потому что у вас нет ключа $email, у вас есть ключ 'email' (простая строка), то же самое для $password / 'password', поэтому проверка должна быть:

// you check that 
// - 'email' key is set and 
// - value in 'password' key is same as value from $_POST
if (isset($users[$userKey]['email']) && $users[$userKey]['password'] == $password) {

Также обновите свой сеанс, установив его как:

$_SESSION['UserData']['email'] = $users[$userKey]['email'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...