登录后重定向到另一页

登录后重定向到另一页

问题描述:

我正在处理如何通过起诉header()函数来重定向到另一个页面,但它不工作,并给我一个错误消息说帽子:无法修改标题信息 - 标题已发送......任何人都可以帮助,非常感谢。 这里是我的PHP代码登录后重定向到另一页

if(isset($_POST['email'])){ 
    $email = $_POST['email']; 
    $pass = $_POST['pass']; 
    $query = "select email, password from member where email = '$email' and password='$pass'"; 
    if(mysql_num_rows(queryMysql($query)) == 0) 
{ 
    echo "Email/Password invalid<br/>"; 
} 
else 
{ 
    $query1 ="select uniid from member where email = '$email' and password ='$pass'"; 
    $result1 = queryMysql($query1); 
     $row1 = mysql_fetch_object($result1); 
     $uniid = $row1->uniid; 
     $_SESSION['uniid'] = $uniid; 

     header("Location:View.php?view=$uniid"); 
    } 
    } 
+0

有可能就像这个问题遍布在网上的100万例... – animuson

+0

@tony:哇!等一下。我当然希望这不是真正的代码......你有一个重大的安全缺陷。在查询数据库之前始终清理用户输入! 'mysql_real_escape_string()','mysqli_real_escape_string()'或甚至更好地使用'PDO'和准备好的语句。或'queryMysql()'处理? – PeeHaa

+0

Robert'); DROP TABLE STUDENTS http://xkcd.com/327/虽然这不是有效的MySQL漏洞利用:P – IslandCow

考虑用ob_start()开始您的代码。这会关闭输出缓冲,简而言之,您可以在任何地方使用header()setcookie()

+0

Cookie问题始终是一个难题。很容易忘记它是为http数据包输出的。 – IslandCow

标题必须发送你写什么都之前。将标题重定向到代码的顶部,它应该可以工作。

在调用header()之前,您不能有任何输出(甚至没有空白)。

您可以搜索输出的任何机会,也可以在脚本的第一行开始输出缓冲。这会导致输出被缓冲,直到脚本结束,或者显式调用ob_flush()(或类似的函数)。请参阅ob_start()

标头必须位于程序的任何输出之前。所以,如果你在标题修改之前回应什么,你将会得到那个错误。如果您不想重新排列代码,则可以使用输出缓冲来延迟其他输出,直到发送标题。

参见:
http://us2.php.net/manual/en/function.header.php
http://us2.php.net/manual/en/function.ob-start.php
http://us2.php.net/manual/en/function.ob-end-flush.php

此问题的最常见的原因是,一些地方正在打印东西,你把你的头前到标准输出。你可以像Kolink说的那样使用ob_start,或者你可以在php.ini中打开全局输出缓冲区,这将允许PHP自动发送头部输出。

确保PHP文件中没有任何空格,特别是在打开PHP标记之前。这被视为文本输出,并且在发送标题之前不会发生。