2014-09-12 83 views
1

我可以看到这个话题已经被讨论了很多次,我对这里的理论有基本的理解,但是我只是无法看到问题出现在我的代码中。无法在登录时修改标题信息点击

我正在处理一些需要用户登录(由站点管理员)进程的项目,因此我正在使用登录功能。我的页面粗略构建的方式是用户导航到我所称的父页面:
http://phzfitness.com/Site_Admin.php(用户名:CraigB密码:密码)。

此页面包含许多包含php文件(子页面),其中一个是管理控制台(../inc/adminConsole.inc.php),其中包含if语句,该语句应显示管理控制台链接,如添加新的管理员用户,上传照片和创建博客条目),如果用户登录,则包含另一个包含登录表单的php文件(孙子页面)。

所以,当我的土地我的网页,我带有登录表单,就当我登录我已经把它使用到相同的页面,并重定向这就是当我得到以下信息:

警告:无法修改标头信息 - 已在/home2/titch77/public_html/phzfitness.com/Site_Admin.php:13中输出的标头(已在/home2/titch77/public_html/phzfitness.com/inc/login_new中发送) .php on line 14


第13行代表第一个包含导航菜单的包含(子页面)的开始标记,表示无关代码<?php

下面是父页面代码:

<?php 
    require_once 'core/init.php'; 
?> 
<HTML> 
<head> 
<link href="CSS/dark.css" rel="stylesheet" type="text/css"> 
<title>Admin Console</title> 
</head> 
<body> 
<div id="wrapper"> 
<!--### Navigation ###--> 
<div id="navigation"> 
<?php 
include_once('inc/nav.inc.php'); 
include_once('inc/social.inc.php'); 
?> 
    </div> 
<!--### Header ###--> 
    <div id="header"> 
<?php 
     include_once('inc/head.inc.php'); 
     include_once('inc/promo.inc.php'); 
?> 
    </div> 
    <div id="main"> 
<?php 
     include_once('inc/adminConsole.inc.php'); 
?> 
    </div> 
<!--Right Menu--> 
    <div id="Right" style="min-height:600"> 
<?php 
     include_once('inc/twit.inc.php'); 
?> 
    </div> 
    <div id="footer"> 
<?php 
     include_once('inc/footer.inc.php'); 
?> 
    </div> 
</div> 
</body> 
</HTML> 

代码进入adminConsole.inc.php

<?php 
$user = new user(); 
if($user->isLoggedIn()) { 
?> 
     "<p>Admin Console</p>"; 
     Welcome <?php escape($user->data()->user_username); ?> You are logged in!<br> 

     <ul> 
     <li><a href="../blogpost.inc.php" target="_blank">Crete a new blog entry</a></li> 
     <li><a href="../add_user.php" target="_blank">Register new user</a></li> 
     </ul> 
     echo ''; 
<?php 
} else { 
    //include_once('inc/loginform.inc.php'); 
    include_once('inc/login_new.php'); 
    } 

最后是进入login_new.php码(这是它开始出错的地方)

<?php 
if(input::exists()) { 
    if(Token::check(input::get('token'))){ 
     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'username' => array('required' => true), 
      'password' => array('required' => true) 
     )); 
     if($validation->passed()) { 
      // log user in 
      $user = new user(); 
      $login = $user->login(input::get('username'), input::get('password')); 
      if($login) { 
       header('Location: '.$_SERVER['PHP_SELF']); 
       //redirect::to('Site_Admin.php');  
      } else { 
       echo 'failed to log in!'; 
      } 
     } else { 
      foreach($validation->errors() as $error) { 
       echo $error, '<br>'; 
      } 
     } 
    } 
} 
?> 
<link href="../CSS/Forms.css" rel="stylesheet" type="text/css"> 
<form class="dark-matter" action="" method="post"> 
     <h1>Admin Log in 
     <span>You need to log in to use these features!</span> 
     </h1> 
     <div class="field"> 
     <label for="username"><span>Username :</span> 
     <input type="text" name="username" id="username" placeholder="Username" autocomplete="off"> 
     </label> 
     </div> 

     <div class="field"> 
     <label for="password"><span>Password :</span> 
     <input type="password" name="password" id="password" placeholder="Password" autocomplete="off"> 
     </label> 
     </div> 
     <input type="hidden" name="token" value="<?php echo Token::generate(); ?>" 
     <label> <span>&nbsp;</span><input type="submit" name="button" value="Login" class="button button-primary"></label> 
</form> 

其他php文件中包含多个类,但在此阶段不确定是否需要。预先感谢您的帮助。

+1

通过这个尚未=> http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php去了 - 问站在被关闭。 – 2014-09-12 15:27:04

+0

我正在寻找比这更多的帮助(是的,我已经通过了它)。我很欣赏这个问题已经以多种方式提出并得到解答。然而,这些答案都不属于我的具体情况。 也许这是我嵌套我的网页的方式。也许我错过了我的代码中的东西。它可能像我不知道的错字一样简单。也许这不是在这里做的,但我正在寻找一个人来运行我的代码,并指出到底什么是错误的,以及在哪里。如果我要求太多,我会优雅地低头寻求其他地方的帮助。谢谢 – 2014-09-13 00:48:37

+0

三重检查“一切”,包括/需要整个9码。任何超出标题的东西,如回声,HTML,空格,cookie,错误,JS等都被视为输出。按照指令制定的每一步,浏览你的结构和故事板。 – 2014-09-13 00:51:14

回答

1

您在输出东西后不能使用标题。

改为使用javascript。

<script type="text/javascript"> 
    <!-- 
    window.location = "http://www.google.com/" 
    //--> 
</script> 
0

如果您想在输出内容后强制重定向,则可以清除缓冲区并发送标题。

ob_clean(); 
if(!headers_sent()) { 
    header('Location: http://www.google.com'); 
} 
+0

谢谢,这种工作作为一种工作,除了我的页面重新加载与可见的登录表单,我必须做一个物理刷新,让页面加载输出内容在我的真实部分如果声明。 – 2014-09-13 01:42:46

相关问题