我在使用header方法重定向页面时遇到问题。我想我知道问题是什么。但我对PHP场景很新,所以我不知道还有什么可以尝试。根据我所读到的,如果页面已经在标头之前发送了数据,则不会触发header()方法。我觉得这可能是我问题的一部分,因为我在头函数之前有几个echo语句。它可能是别的吗?我该如何解决这个问题?
echo语句证明找到了正确的用户名和密码。我把一个测试echo语句放在标题所在的位置,它运行得很好。所以,我知道数据库正在找到正确的信息。插入信息时页面会刷新。谢谢你的期待。
<div id= "sidebar" >
<div id="login-box">
<form name="client-login" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<label id="user-lbl">Username:</label><br /><input type="text"
name="username" id="username" /><br /> <label id="pass-lbl">Password:</label><br /><input
type="password" name="password" id="password" /><br /> <label> </label><input
type="submit" value="Login" class="submit" id="login" />
</form>
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if((!isset($username)) || (!isset($password))){
echo "<p>Username is $username. Password is $password.</p>";
}else{
$mysql = mysql_connect("myhost", "username", "password");
if(!$mysql){
echo "<p>Cannot connect to database!</p>";}
$selected = mysql_select_db("mydb", $mysql);
if(!$selected){
echo "<p>Cannot find database!</p>";}
$query = sprintf("SELECT count(*) FROM users WHERE username = '%s' AND password = '%s'", mysql_real_escape_string($username),mysql_real_escape_string($password));
$result = mysql_query($query, $mysql );
if(!$result){
echo "<p>Cannot run query.</p>";}
$row = mysql_fetch_row($result);
$count = $row[0];
if ($count > 0){
header("Location: account.php"); die();} else {echo "<p>Invalid username or password!</p>";}
}
?>
</div><!-- #login-box -->
答案 0 :(得分:4)
如果你打电话给header()
,那么它应该被称为 BEFORE 将输出输出到HTML流的任何其他函数,或者在该文件中的任何HTML语句之前。在header()
来电之前,您甚至无法发送换行符。
在您的情况下,首先您将<div id= "sidebar" >
和其他7行发送到客户端,然后只调用header()
函数。这就是你错误发生的原因。
原因:
header()
调用旨在将HTTP标头信息传递给客户端浏览器。标头信息应该是要发送到客户端的第一个信息。如果您没有在PHP脚本中调用header()
,PHP将在发送PHP文件的第一行之前自动发送标题信息。
发送标头后,您无法在同一PHP文件中发送另一个标头。因此,如果您想要专门发送标头,请在任何其他正文内容开始之前发送。
答案 1 :(得分:2)
是的,那是你的问题。
最好的解决方案是在向浏览器输出任何内容之前执行代码。除此之外,将ob_start();
添加到脚本顶部将缓冲输出,即使在您打印/回显文本后也允许header();
调用。
答案 2 :(得分:1)
使用php代码:
header('page url');
使用标题可能会在上传到服务器时出现问题。
使用javascript:
window.location='page url';