标头位置不起作用 - 但肯定会被忽略
Posted
技术标签:
【中文标题】标头位置不起作用 - 但肯定会被忽略【英文标题】:header location not working - but definitely being passed over 【发布时间】:2012-04-13 12:45:52 【问题描述】:令人讨厌的是,我的登录检查脚本没有重定向到我告诉它的位置。 我知道它正确地命中了 if 语句,因为我输入了 echos 来检查它。 它公然跳到标题,因为在第一种情况下它会回显“-blanks”,因为它应该也应该“它甚至走到这一步吗?”
因此,在此基础上,我知道它击中了标题 - 它只是简单地忽略它,我终其一生都无法理解为什么。
我确定它很简单,我错过了一些非常明显但我看不到的东西。 有什么建议吗?
// makes sure they filled it in
if($_POST['frmLogin-username'] == "" || $_POST['frmLogin-password'] == "")
echo " - blanks";
header('Location: ?page=landing&action=login&message=1');
echo "Did it even get this far?";
die;
else
// checks it against the database
$query = mysql_query("SELECT * FROM shops WHERE shopUsername = '".$_POST['frmLogin-username']."'");
//Gives error if user dosen't exist
$count = mysql_num_rows($query);
if ($count == "0")
echo " - no user";
header('Location: ?page=landing&action=login&message=2');
die;
else
while($row = mysql_fetch_array( $query ))
//gives error if the password is wrong
if ($_POST['frmLogin-password'] != $row['shopPassword'])
echo " - wrong pass";
header('Location: ?page=landing&action=login&message=3');
die;
else
// if login is ok then we add a cookie
$hour = time() + 3600;
setcookie(shopusername, $_POST['frmLogin-username'], $hour);
setcookie(shopid, $row['shopId'], $hour);
//then redirect them to the shop panel
header("Location: ?page=shop");
die;
编辑:问题与我在 index.php 中加载所有页面的方式有关,方法是调用包含我现在正在调查的内容 我已将此流程页面移动到它自己的 php 文件中,现在可以正常工作了
【问题讨论】:
将文本内容发送到浏览器后,您将无法发送标头 - 任何回声或空格都会阻止页面重定向。 另外,根据 HTTP 规范,您必须提供 Location 的完整 URI,而不是相对路径。 (尽管这可能不是问题,因为任何现代浏览器都会容忍这种情况。) 回声通常不存在 - 它们是为测试而添加的 那么,嗯,你被重定向到哪里了?确切的wget -S http://example.org/yourscript.php
输出是什么?向我们证明标题在那里,以及哪些。否则:
Headers already sent by PHP的可能重复
【参考方案1】:
首先:在使用 echo
输出任何内容后,您不能发送标头,就像 Sam 在他的评论中所说的那样。
其次,要发送重定向,Location:
后面的 URL 必须是绝对的,例如 http://localhost/page/to/redirect/to.php
。
编辑 Corbin 实际上在我的回答中击败了我大约 10 秒 ;-)
【讨论】:
我使用了绝对 URL,但通常不会有回声(添加它们是为了检查我的代码是否正确命中 IF 语句,只是没有在此处发布前删除)即使使用绝对 URL,它仍然是不工作【参考方案2】:问题与我通过调用包含在 index.php 中加载所有页面的方式有关
【讨论】:
【参考方案3】:您可以在 PHP 中使用 window.location
,只需 echo
。
【讨论】:
以上是关于标头位置不起作用 - 但肯定会被忽略的主要内容,如果未能解决你的问题,请参考以下文章