Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2020, 18:40   #1
Pavll
Пользователь
 
Регистрация: 03.11.2017
Сообщений: 24
По умолчанию Авторизация на сайте. Сложность с массивами "логин" и "пароль".

Добрый день!
Создаю форму авторизации на сайте.
Когда создаю в коде запись такого вида:
Код:
$login = 'admin';
$password = '123';
то код работает.
Но, если создаю массив, например такой:
Код:
$login = [
    ['admin'],
    ['moderator'],
    ['user'],
];
$password = [
    ['123'],
    ['456'],
    ['789'],
];
то код не работает.
Конечно, пишу в коде не сразу оба варианта, а один вместо другого.
Скажите. пожалуйста, что я делаю не так?
Думаю, что ошибка, где-то в следующих строках (хотя, возможно, ошибаюсь):
Код:
$login = 'admin';
$password = '123';
 
//или 
 
$login = [
    ['admin'],
    ['moderator'],
    ['user'],
];
$password = [
    ['123'],
    ['456'],
    ['789'],
];
 
$auth = false;
    $iss = isset($_SESSION['login']) && isset($_SESSION['password']);
    if ($iss && $_SESSION['login'] === $login && $_SESSION['password'] === $password) {
        $auth = true;
        $error = false;
    }
Наверное, вместо $login и $password нужно подставить массивы $login и $password там, где if() (то есть переменные заменить массивами). Пробовал подключить in_array(), но неудачно.
Pavll вне форума Ответить с цитированием
Старый 04.06.2020, 19:19   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,213
По умолчанию

Код:
$users = [
    'admin' => '123',
    'moderator' => '456',
    'user' => '789'
];
...
if($iss){
  $login = $_SESSION['login'];
  $pass = $_SESSION['password'];
  if(isset($users[$login]) && $users[$login]===$password){
    ...
  }
}
Arigato вне форума Ответить с цитированием
Старый 04.06.2020, 23:59   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,149
По умолчанию

= $pass
ADSoft на форуме Ответить с цитированием
Старый 05.06.2020, 00:58   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,213
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
= $pass
Да, немного копипасты, потому упустил.
Arigato вне форума Ответить с цитированием
Старый 05.06.2020, 14:14   #5
Pavll
Пользователь
 
Регистрация: 03.11.2017
Сообщений: 24
По умолчанию

Arigato,
С одной стороны есть прогресс - код работает. Но, есть один минус.
Когда вводишь в форму логин, который есть в массиве и пароль, который относится к другому логину, то всё равно происходит вход. То есть, ввожу я, например, логин - 'admin' + пароль - '789' и происходит вход.
Pavll вне форума Ответить с цитированием
Старый 05.06.2020, 14:33   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,213
По умолчанию

Pavll, значит у вас в коде ошибка. Покажите целиком, что получилось.
Arigato вне форума Ответить с цитированием
Старый 05.06.2020, 14:58   #7
Pavll
Пользователь
 
Регистрация: 03.11.2017
Сообщений: 24
По умолчанию

Вот, пожалуйста:
Код:
<?php
    session_start();
    $error = false;
    if (isset($_POST['auth'])) {
        $_SESSION['login'] = $_POST['login'];
        $_SESSION['password'] = md5($_POST['password']);
        $error = true;
    }
    if (isset($_GET['f']) == 'logout') {
       unset($_SESSION['login']);
       unset($_SESSION['password']);
    }

$users = [
    'admin' => '123',
    'moderator' => '456',
    'user' => '789'
];
$auth = false;
$iss = isset($_SESSION['login']) && isset($_SESSION['password']);
if($iss){
    $login = $_SESSION['login'];
    $pass = $_SESSION['password'];
    if(isset($users[$login]) && $users[$login] = $pass){
        $auth = true;
        $error = false;
    }
}


?>
<?php if ($error) { ?><p>Неверные логин и/или пароль!</p><?php } ?>
<?php if ($auth) { ?>
    <p>Здравствуйте, <?=$login?>!</p>
    <a href="index.php?f=logout">Выход</a>
<?php } else { ?>
<form name="auth" method="post" action="index.php">
    <p>
        Логин: <input type="text" name="login" />
    </p>
    <p>
        Пароль: <input type="password" name="password" />
    </p>
    <p>
        <input type="submit" name="auth" value="Войти"/>
    </p>


</form>
<?php } ?>
Pavll вне форума Ответить с цитированием
Старый 05.06.2020, 15:02   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,213
По умолчанию

Цитата:
Сообщение от Pavll Посмотреть сообщение
$users[$login] = $pass
Во-первых, один знак "=" это не сравнение, а присваивание. Во-вторых, вы в сессию заносите md5 от пароля, а сравниваете с исходным паролем.
Arigato вне форума Ответить с цитированием
Старый 05.06.2020, 15:31   #9
Pavll
Пользователь
 
Регистрация: 03.11.2017
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Во-первых, один знак "=" это не сравнение, а присваивание. Во-вторых, вы в сессию заносите md5 от пароля, а сравниваете с исходным паролем.
Большое Вам спасибо.
Сказывается то, что я ещё новичок в этом деле. Думал, что md5 от пароля автоматически преобразуется в коде. Даже не думал, что в этом может быть ошибка.
Pavll вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" link90 Общие вопросы C/C++ 2 27.03.2016 12:34