好的,所以我之前问了这个问题并得到了很多好的答案,但遗憾的是他们都没有改变结果。我正在尝试在我正在处理的网站上的“登录”页面后重定向。我在会话中收集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重定向并留在会话中?
由于
答案 0 :(得分:1)
检查这些问题
你是否已经发送了标题?如果是,那么这就是让它不运行的原因。检查之前的php错误或空白行
exit;
之后的标题函数
header('Location: users_table.php');
exit;
答案 1 :(得分:0)
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)删除所有内容:删除或评论所有其他不必要的代码,只需使用header
和die
功能,看看它们是否正常工作。
<?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
。在做任何其他事情之前,请检查一下! :)
(顺便说一句,我在问题解决后添加了更新,我从接受的答案中取出了这个)