08
Апр
2016

PHP. Вывести массив после авторизации и редиректа

Делаю авторизацию на сайте. Когда пользователь вводит данные, они отправляются на сервер, обрабатываются и возвращают сообщение. Но проблема состоит в том, что, после того как пользователь нажимает кнопку "Авторизация", у меня происходит двойной редирект(кажется так он называется), то есть, первый раз редирект происходить после того как пользователь отправляет данные, а второй раз, это делает написана мною функция. Сейчас покажу как у меня это все дело работает:

Функция в файле model.php

function authorization(){
    $link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
            or die(mysqli_error($link));``

    $responseArray =[];
    $access = true;
    $login = clear($_POST['login']);
    $password = clear($_POST['password']);
    $login_hash = md5(md5(time()+time()*rand(2,10)));

    if(empty($login)) 
        $responseArray['error']['login']='Логін не може бути пустим';

    if(empty($password)) 
        $responseArray['error']['password']='Пароль не може бути пустим';


    if($responseArray['error']) $access = false;

    if($access) {
        $select_query = "SELECT id, user, password, login_hash, user_ip 
                         FROM user_credentials 
                         WHERE user='$login'  
                         AND activated=1";

        $select_result = mysqli_query($link, $select_query) 
                         or die(mysqli_error($link));

        if (mysqli_num_rows($select_result) > 0) {
            $select_arr = mysqli_fetch_assoc($select_result);
            $password_correct = $select_arr['password'];

            if (!password_verify($password, $password_correct)) {
                $responseArray['error']['denied']='Хибний логін або пароль';
                $_SESSION['auth']['login']=$login;

            } else {

                $query_insert="UPDATE user_credentials 
                               SET login_hash='$login_hash' 
                               WHERE user_credentials.user='$login'";

                mysqli_query($link, $query_insert) or die(mysqli_error($link));

                setcookie('auth',$login_hash, time()+3600*2, '/admin/');
                setcookie('login', md5($login), time()+3600*2, '/admin/');

                $responseArray['success']['auth']='Вітаємо у системі';
            }

        } else {
            $responseArray['error']['denied'] = 'Такого користувача неіснує';
            $_SESSION['auth']['login']=$login;
        }
    }
return $responseArray;
}

После этого данные отправляются на сервер, и должен возвратится $responseArray с нужным сообщением.

Но в файле controller.php, там где я вызываю ф-цию в нужный момент, я написал следующее :

if($_SERVER['REQUEST_METHOD']=='POST'  && isset($_POST['authorization'])){
       $responseArray = authorization();
       redirect();
    }

redirect(); - это у меня отдельная ф-ция, которая перегружает страницу. Это я делаю для того чтобы предотвратить повторную отправку формы в случае если пользователь перегрузит страницу. Вот сама ф-ция:

function redirect(){
    $redirect=isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : VIEW;
    header("Location: $redirect");
    exit;
}

Вывод сообщений у меня происходит в файле authorization.php

Что мне нужно? После того, как пользователь нажмет кнопку авторизации, чтобы выводились сообщения из массива responseArray после вот этого redirect();. Без него, все работает отлично, выводится. Но как только я делаю редирект, массив пропадает. Посоветуйте как мне решить этот вопрос. Спасибо.

Источник: https://ru.stackoverflow.com/questions/511100/php-%D0%92%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82%D0%B0

Share

Тебе может это понравится...