无法在标头中传递$变量()

时间:2015-12-01 16:57:59

标签: php

我试图从我目前在我网站上使用的文件管理器修改登录脚本。

目前,当登录尝试失败时(错误的密码,空白字段等),错误消息存储在$errors变量中,并且在脚本的末尾,一个函数将包含一个file.php以$errors作为参数,因此错误消息可以是回声' d。

我尝试做的失败是用header()+ $ errors替换这个include +参数($ errors)。

我一直在处理这个问题,但到目前为止我还没有发现任何对我有用的东西,我需要一些帮助:/

以下是将错误消息存储在$ errors中并包含file.php的登录脚本的一部分:

if(!isset($_SESSION['simple_auth']['username']) || isset($_GET["login"])) {

            session_destroy();
            session_start();

            if(isset($_POST["submit"])) {

                $user = gg::getUser($_POST['username']);

                if (isset($user['permissions']) && !strstr($user['permissions'], 'r')
                        || ($user['username'] == 'guest' && ggconf::get('allow_guests') == false)){
                    $errors = "Access Forbidden";
                    gg::writeLog('auth bad - not activated');
                }

                if (!isset($_POST['username']) || !isset($_POST['password']) || $_POST['username'] == '' || $_POST['password'] == ''){
                    $errors = "Enter username and password.";
                    gg::writeLog('auth bad - blank fields');
                }

                if (isset($user['akey']) && $user['akey'] != '' && strpos($user['akey'], 'otp-') === false){
                    $errors = "Please open your email and click on the link to proceed.";
                    gg::writeLog('auth bad - not activated');
                }

                if(!$errors && $user['username'] == $_POST['username'] && gg::checkPassword($_POST['password'], $user['password'])){
                    $this->loginUser($user);
                }

                if(!$errors){
                    $errors = "Wrong username or password.";
                    gg::writeLog('auth bad - wrong username or password');
                    sleep(1);
                }

            }


            if (!isset($_GET["login"]) && ggconf::get('allow_guests') == true){

                $user = gg::getUser('guest');

                if($user){
                    $this->loginUser($user);
                }
                // reload
                header('Location: '.ggconf::get('base_url'));
                die;


            }


            gg::display("login.php", array('errors' => $errors));
            exit;
        }

正如您在此代码末尾看到的那样,gg :: display函数将包含文件及其参数,函数gg :: display如下:

/* DISPLAY VIEWS CONTROLLER */

    public static function display($view, $params = null){

        require_once ggconf::get('base_path').$view;
    }

最后,这里是file.php中的代码,它将显示错误:

<?php if (isset($params['errors'])):?>
<div class=>
<?php echo $params['errors'];?>
</div>
<?php endif;?>

如何使用header()而不是脚本中当前使用的require_once来获取变量$ errors?

我发现有很多线程处理这个问题,但没有什么对我有用,同时请注意我在php方面还不是很有经验。

无论如何,我感谢你的帮助,欢迎任何建议。

-apatik

1 个答案:

答案 0 :(得分:1)

如果您要重定向到另一个页面,则应通过php session存储参数

session_start(); // this should be on top
$_SESSION['errors'] = $errors; // Add this after writing an error

这是视图

<?php if (isset($_SESSION['errors'])):?>
<div class=>
<?php echo $_SESSION['errors'];?>
</div>
<?php endif;?>