php中的header()不是重定向

时间:2013-11-04 03:29:46

标签: php header

我有一个包含表单的登录页面。登录数据被发送到php脚本以检查用户是否存在于DB中。如果成功,它应该重定向。

这是我的代码:

<?php

$host="localhost:8889"; // Host name
$username="root"; // Mysql username
$password="root"; // Mysql password
$db_name="TableName"; // Database name
$tbl_name="Users"; // 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 form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($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);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file
  session_register("myusername");
  session_register("mypassword");
  header("location:../main.php");
  die();
}
else {
  echo "Wrong Username or Password";
}
?>

Count为1,但不会发生重定向。

我已阅读this great answer并检查了以下内容:

  1. 在开始标记之前没有空格,也没有其他回显或打印。
  2. 我在打开php标签之后尝试放置ob_start,但它也没有用。
  3. 我对BOM不了解。你可以帮我吗?

    我过去一直使用完全相同的代码,但是现在我在mamp和mac上工作不起作用。

    感谢。

    编辑:

    我做了人们所说的,在修好这些内容并启用报告后,问题是:

    Call to undefined sesion_register.
    

    所以,我改变了它,因为它没有定义,也没有被弃用,现在可以使用了!谢谢大家!

3 个答案:

答案 0 :(得分:1)

试试这个:

header("Location: http://localhost:8889/main.php");

Location应该有一个大写字母L,尝试使用绝对URI总是好的。

修改

阅读此link之后,最好检查一下php.ini中是否启用了output_buffering。然后将ob_start()ob_end_flush()分别放在文件的顶部和底部。

答案 1 :(得分:0)

对于初学者,你没有使用你的变量。您在引号中使用实际值。而不是:

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

应该是:

mysql_connect($host, $username, $password)or die("cannot connect");
mysql_select_db($db_name)or die("cannot select DB");

答案 2 :(得分:0)

请在该位置加上“L”。如果这不起作用,请尝试以下方法;
您可以使用headers_sent()

检查错误
// If no headers are sent, send one
if (!headers_sent()) {
    header('Location: ../main.php');
    exit;
}


或者你可以在php上试试javascript

<?php
echo "<script>window.location='../main.php'</script>";
?>

希望它有所帮助...