2015-12-01 44 views
0

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

当前,当登录尝试失败时(错误密码,空白字段等),错误消息存储在$errors变量中,并且在脚本结尾处,函数将包括一个带有$errors的file.php作为一个参数,所以错误信息可以被回显。

我不成功尝试做的是用header()+ $ errors替换这个include +参数($ 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 ::显示功能,将包括文件和它的参数,功能GG ::显示器如下:

/* 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;?> 

我怎样才能让我的变量$错误与头(而不是放在require_once目前在脚本中使用?

我发现了很多线程处理这个,但没有为我工作,也请注意,我不是很有经验的PHP呢。

无论如何,我很感谢您的帮助,并且欢迎您提出任何建议。

-apatik

+0

'头( '位置:' .gg()。'?errors ='。$ errors)'?你正在重定向到另一个页面。要么将错误存储在会话中的服务器上,要么通过URL中的查询参数将错误传递给您要重定向到的URL。 –

+0

谢谢你的回答,我尝试了会话和和url参数,但不能使它工作。我想我可能做错了什么。在你的例子中,gg()是什么?标题的网址?在我的代码中,它只是php类 – apatik

+0

gg只是我懒惰,没有输入ggconfetc ... –

回答

1

如果要重定向到另一个页面,你应该存储通过PHP会议

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;?> 
+0

感谢您的回答,这是非常有用的。我其实今天早些时候尝试过这样的事情,但它不起作用。在第一次尝试时,你的两个都没有工作,所以我将标题的位置更改为另一个文件,其中包含视图并且工作正常。所以它看起来像在我试图显示错误的页面上发生了奇怪的事情。我会做一些研究和更新。非常感谢 – apatik

+0

好的,我找出问题出在哪里。在我的文章中,您可以看到脚本中存在session_destroy(),并且由于该脚本与登录页面同时加载,因此会在显示错误之前破坏会话和参数。我会解决这个问题。谢谢! – apatik

+0

还有一个问题,如何在错误显示一次后删除参数?因此,每当用户返回登录页面 – apatik