php标题根本没有重定向

时间:2012-10-12 17:07:46

标签: php header

好的,所以我之前问了这个问题并得到了很多好的答案,但遗憾的是他们都没有改变结果。我正在尝试在我正在处理的网站上的“登录”页面后重定向。我在会话中收集id并尝试重定向。这在我使用的很多站点中工作正常,与此站点的一个区别是它不使用localhost,它有一个服务器名称。起初我在标题之前有一个echpo,每个人都告诉我这是问题,我删除它来修复它但没有改变。这是代码:

<?php 
/*set all the variables*/ 
$email = $_POST['email']; 

$password = sha1($_POST['password']);   /* hash the password*/ 

$conn = mysqli_connect ('servername', 'username', 'password', 'databasename') or die('Error connecting to MySQL server'); 
/*select the id from the users table that match the conditions*/ 
$sql = "SELECT id FROM users WHERE email = '$email' AND password = '$password'"; 

$result = mysqli_query($conn, $sql) or die('Error querying database.'); 

$count = mysqli_num_rows($result); 

if ($count == 1) { 

$row = mysqli_fetch_array($result); 

session_start(); 

$_SESSION['user_id'] = $row['id']; 

/*If true head over to the users table*/ 
header('location: users_table.php'); 


} 
/*If invalid prompt them to adjust the previous entry*/ 
else { 
echo '<h2>Invalid Login</h2><br />'; 
echo '<h2>Click <a href="javascript:history.go(-1)">HERE</a> to go back and adjust your entry.</h2>'; 
                    } 


mysqli_close($conn); 

?> 

页面上唯一的其他代码是HTML HEAD和BODY标记。我甚至要求我的一位大学老师寻求帮助,他说代码看起来不错,他找不到问题。所以我再问一遍。有没有办法可以使用HTML或SCRIPT重定向并留在会话中?

由于

4 个答案:

答案 0 :(得分:1)

检查这些问题

你是否已经发送了标题?如果是,那么这就是让它不运行的原因。检查之前的php错误或空白行

exit;

之后的标题函数

header('Location: users_table.php'); 
exit;

答案 1 :(得分:0)

14.30 Location

  

Location response-header字段用于将收件人重定向到Request-URI以外的位置,以完成请求或标识新资源。对于201(已创建)响应,Location是请求创建的新资源的位置。对于3xx响应,位置应该应该指示服务器自动重定向到资源的首选URI。字段值由单个绝对URI组成。

尝试使用绝对URI

header("Location: http://www.xxx.com/users_table.php");

如果出现错误,您还可以在页面顶部添加以下内容

error_reporting(E_ALL);
ini_set("display_errors","On");

答案 2 :(得分:0)

有几件事可能有误:

首先,你说你在这个页面上有其他的HTML。如果您的重定向遵循html,这将导致错误。例如:

http://php.net/manual/en/function.header.php

<html>
<?php
/* This will give an error. Note the output
 * above, which is before the header() call */
header('Location: http://www.example.com/');
?>

其次,你可能会碰撞会话。将会话开头替换为:

if( !isset( $_SESSION ) ){
  session_start();
}

第三,您需要在重定向中大写位置:

/*If true head over to the users table*/ 
header('location: users_table.php'); 

应该是

/*If true head over to the users table*/ 
header('Location: /users_table.php'); 

最后,但并非最不重要的是,打开错误报告!在任何html之前的脚本的最顶部,将此代码放在:

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

答案 3 :(得分:0)

如果我是你,我会做以下事情:

1)寻找错误:在页面顶部设置error_reporting(E_ALL);以确保您能看到所有内容。你也可以看看php错误日志来调查你是否可以看到任何错误。日志文件的位置取决于您的计算机设置和配置。

2)删除所有内容:删除或评论所有其他不必要的代码,只需使用headerdie功能,看看它们是否正常工作。

<?php 

header("Location: http://www.google.com/"); 
die(); 

?>

如果有效,则继续编号3,否则转到最后一步。

3)检查代码是否正在执行:只需评论header函数,然后在此前写一行echo 'ok';。如果您 DID NOT 在您的呈现页面上看到ok,那么您的代码根本就不会执行。继续编号4,否则,如果您看到ok,则转到最后一步。

4)查看可疑地点:尝试对SQL Query部分发表评论,并将if声明从if ($count == 1) {更改为if (true) {。如果您的页面被重定向,那么从MySQL表中获取数据时会出错。如果header再次无效,请转到最后一步。

5)最后一步:在其他机器上进行测试:我会在其他机器上测试相同的代码,包括其他开发环境和/或不同的托管服务器。如果它在其他机器上工作,配置不同,那么问题就是你的机器!

尝试安装新服务器并重新开始查看是否存在问题。但是,如果您的问题在其他计算机上仍未解决,请尝试将源代码Encoding更改为UTF-8 without BOM。它可以在最后一刻工作!

如果上述任何步骤对您不起作用,只需将其留在那里,去购买一些啤酒,尝试在电视上观看一些烹饪程序,写几条短信并拨打1-2个电话,当你通过至少2个小时,然后回到这里,从第1步开始。当然你终于解决了!永不放弃! :)

更新:经典错误! ...在PHP开放日期new line之前,检查您没有任何white space<?php。在做任何其他事情之前,请检查一下! :)

(顺便说一句,我在问题解决后添加了更新,我从接受的答案中取出了这个)