перенаправить на URL и привести ошибки в PHP? - PullRequest
0 голосов
/ 21 декабря 2011

Я подозревал, что это не сработает, и это не сработало - но я не могу найти подобный вопрос в любом месте, так что мы идем. У меня был оператор if else, который проверял, не могут ли они войти в систему, чтобы показать причину (ошибки), и если бы они были, они были бы выведены на экран, и в противном случае $ _SESSION был бы назначен идентификатор пользователя (имеющий уже был запущен заранее), который был извлечен из переменной, которая соответствует функции, которая запрашивает базу данных MySQL. и страница будет перенаправлена ​​на страницу учетной записи, например:

if (!empty($errors)) {
    foreach ($errors as $error) {
        echo $error . '<br />'; .
    }
} else {
    $_SESSION['user_id'] = $login;
    header('Location: you/default.php');
    exit();
}

Проблема в том, что эта форма входа в систему находится в раскрывающемся меню на главной странице (а не является самостоятельной страницей), и если они не могут войти (неверный пароль, незаполненное поле и т. Д.), Я хочу чтобы перенаправить на страницу login.php и затем отобразить ошибки, поэтому я попытался добавить header('Location: login.php'); перед оператором foreach, но он просто перенаправил на login.php, как я и ожидал, и не привел к ошибкам.

Я подозреваю, что это может быть работа для AJAX или что-то иное, чем PHP ... идеи?

Ответы [ 3 ]

0 голосов
/ 21 декабря 2011

Вам придется передавать ошибки на новую страницу. Вы можете сделать что-то вроде:

header('Location: login.php?error[]="'.$error1.'"&error[]="'.$error2.'"); 

Конечно, тогда вам придется проверить это в login.php:)

0 голосов
/ 31 декабря 2011

Я на самом деле нашел способ сделать это сам. В моем случае, если были ошибки (if (!empty($errors))), я применил их к $_SESSION superglobal как $_SESSION['errors'].

Затем перенаправляет страницу на login.php, где простое выражение if поддерживает их там:

    if (isset($_SESSION['lqerrors'])) {
    $lqerrors = $_SESSION['lqerrors'];
        foreach ($lqerrors as $lqerror) {
            echo $lqerror, '<br />'; 
        }
    unset($lqerrors,$lqerror,$_SESSION['lqerrors']);
} 

Легко!

0 голосов
/ 21 декабря 2011

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

if (!empty($errors)) {
    foreach ($errors as $error) {
        echo $error . '<br />'; // notice i've replaced the comma in your code with a colon.
    }
} else {
    session_start();
    $_SESSION['user_id'] = $login;
    header('Location: you/default.php');
    exit();
}

http://ca3.php.net/manual/en/session.security.php http://ca3.php.net/manual/en/function.session-start.php

Также , на каждой другой странице, которой требуется доступ к сеансу, вы должны вызывать session_start (); перед выводом чего-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...