1

好的,所以我之前问过这个问题并得到了很多很好的答案,不幸的是他们都没有改变结果。我正在尝试在我正在处理的网站上的“登录”页面后重定向。我在会话中收集 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

4 回答 4

1

检查这些问题

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

exit;

在标头功能之后

header('Location: users_table.php'); 
exit;
于 2012-10-12T17:15:12.553 回答
0

14.30 地点

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

尝试使用绝对 URI

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

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

error_reporting(E_ALL);
ini_set("display_errors","On");
于 2012-10-12T17:09:18.743 回答
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();
}

第三,您需要在重定向中将 Location 大写:

/*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 );
于 2012-10-12T17:21:28.613 回答
0

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

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

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

<?php 

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

?>

如果有效,则继续执行第 3 步,否则转到最后一步。

3)检查代码是否执行:只需注释header函数,然后echo 'ok';在此之前只写一行。如果您在渲染页面上没有看到它ok,那么您的代码根本没有执行。继续执行第 4 步,否则,如果您看到ok,则转到最后一步。

4)看可疑的地方:试着评论你的SQL Query部分,把你的if陈述从if ($count == 1) {改为if (true) {。如果您的页面被重定向,那么您在从MySQL表中获取数据时会出错。如果header没有再次工作,则转到最后一步。

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

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

如果以上任何一个步骤都不适合您,只需将其留在那儿,去买一些啤酒,尝试在电视上看一些烹饪节目,写几条短信并打 1-2 个电话,当您至少过了 2 个小时,然后回到这里从第 1 步重新开始。相信你最终会解决的!永不放弃!:)

更新:经典错误!...检查你没有任何new linewhite space之前你的 PHP 开始标记<?php。在做任何其他事情之前先检查一下!:)

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

于 2012-10-12T18:00:18.247 回答