我正在使用MAMP,由于某些原因我没有在php中使用标头重定向,如果有什么问题,有人可以查看下面的代码吗?
我看过类似的帖子,发现它是由标题标记之前的一些空格引起的,但在我的情况下却不是。
请提出建议... thanx
<?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.";
}
?>
答案 0 :(得分:4)
我在MAMP中遇到了同样的问题,结果发现在我的php.ini配置文件中禁用了output_buffering。我所要做的就是把它重新打开。
php.ini中的找到这一行:
output_buffering = Off
并将其更改为:
output_buffering = 4096
然后重启MAMP
请参阅此帖子了解更多详情: http://hibbard.eu/php-headerlocation-not-working-in-mamp/
答案 1 :(得分:2)
header('Location: http://example.com/Account/index.php');
exit;
是实现此目的的一种方法,但您可以使用输出缓冲来解决此问题,所有输出到浏览器的开销都将缓冲在服务器中,直到您发送它为止。您可以通过在脚本中调用ob_start()
和ob_end_flush()
,或在php.ini或服务器配置文件中设置output_buffering配置指令来执行此操作。
编辑和附录解决方案:------&gt;
您可以将输出缓冲用作
<?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来刷新内部缓冲区内容并停止输出缓冲。
答案 2 :(得分:0)
它应该是这样的:
header('Location: http://example.com/Account/index.php');
exit;