1

我正在使用 MAMP,由于某种原因,我没有使用 php 中的标头进行重定向,如果其中有问题,有人可以看看下面的代码吗???

我读过类似的帖子,发现它是由标题标签之前的一种空格引起的,但在我的情况下不是。

请给你的建议...谢谢

<?php

$host="localhost"; // Host name 

$username="root"; // Mysql username 

$password="root"; // Mysql password 

$db_name="DBase"; // Database name 

$tbl_name="customers"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from the form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$myusername = stripslashes($myusername);
$mypassword = md5($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE Username='$myusername' and Password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:/Account/index.php");
}
else {
echo "Wrong Username or Password.";
}
?>
4

3 回答 3

4

我在 MAMP 中遇到了同样的问题,结果证明 output_buffering 在我的 php.ini 配置文件中被禁用。我所要做的就是重新打开它。

在 php.ini 中找到这一行:

output_buffering = Off

并将其更改为:

output_buffering = 4096

然后重启MAMP

有关更多详细信息,请参阅此帖子:http: //hibbard.eu/php-headerlocation-not-working-in-mamp/

于 2013-05-22T08:59:05.057 回答
2
header('Location: http://example.com/Account/index.php');
exit;

是一种方法,但您可以使用输出缓冲来解决这个问题,所有输出到浏览器的开销都在服务器中缓冲,直到您发送它。你可以通过在你的脚本中调用ob_start()and来做到这一点ob_end_flush(),或者在你的 php.ini 或服务器配置文件中设置 output_buffering 配置指令。

编辑和附加解决方案: ------>

您可以将输出缓冲用作

    <?php
    ob_start();
    $host="localhost"; // Host name 

$username="root"; // Mysql username 

$password="root"; // Mysql password 

$db_name="DBase"; // Database name 

$tbl_name="customers"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from the form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$myusername = stripslashes($myusername);
$mypassword = md5($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE Username='$myusername' and Password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:/Account/index.php");
}
else {
echo "Wrong Username or Password.";
}
    ob_end_flush();
    ?>

问题是我们在开始发送输出后无法发送标头。为了解决这个问题,我们缓冲输出。函数 ob_start 打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送输出(除了标题),而是将输出存储在内部缓冲区中。所以回显输出将被缓冲。接下来我们发送标题没有任何问题,因为我们还没有吐出任何输出。最后我们调用 ob_end_flush 来刷新内部缓冲区内容并停止输出缓冲。

于 2012-08-20T07:02:16.953 回答
0

它应该是这样的:

header('Location: http://example.com/Account/index.php');
exit;
于 2012-08-20T06:45:18.117 回答