PHP中用于重定向的头文件


header in php for redirecting

新代码

            $count= mysqli_num_rows($result);

                    if ($count==1){
                        $row=mysqli_fetch_row($result);

                            if(($row[1]==$username) && ($row[2]==$password))
                            {
                                echo $row[1];   
                                $_SESSION["myusername"]= $username;
                                $_SESSION["mypassword"]= $password;
                                header("location: login_success.php"); 
                                exit();
                            } else {
                            echo "No user found";
                            }
                    } else {
                echo "No rows selected";
                //}
                mysqli_close($dbc); // Closing Connection   
                }
    }

?>我修改了代码,但头语句导致它停止。如果我删除标题,它会像预期的那样工作

$username = stripslashes($sent_username);是罪魁祸首,因为您将获取的用户名保存在$sent_user而不是$sent_username中。因为这是你在查询中使用的:

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'"; 

其中$username没有任何意义,如果你回滚,看看它真正持有什么,即$username = stripslashes($sent_username);,现在你看到罪魁祸首$sent_username,它在哪里?没有,确实是打错了。

而不是:

        $sent_user=$_POST['myusername'];
        $sent_password=$_POST['mypassword'];
        $username = stripslashes($sent_username);
        $password = stripslashes($sent_password);

试试这个:

        $sent_user=$_POST['myusername'];
        $sent_password=$_POST['mypassword'];
        $username = stripslashes($sent_user);
        $password = stripslashes($sent_password);
编辑:

这应该解决了你的问题,但是有几件事你应该重新检查。

1)头文件的正确语法:

而不是:

header("location:login_success.php");
使用

:

header("Location: login_success.php");

2) echo你的查询看看到底发生了什么,正确的表,正确的列和正确的值正在发送。

3)我怎么能忘记重要的部分,无论你对会话做什么,总是在你打算使用会话的每个文件的代码开头写session_start();

^一个例子:

<?php
session_start();
$host="localhost"; // Host name
$db_username=""; // Mysql username
$db_password=""; // Mysql password
$db_name="test_db_connection"; // Database name
$tbl_name="logintable"; // Table name
$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) 
 //

删除

 echo $row[1]; 

在header命令上方。头必须总是在向客户端提供任何其他输出之前发生。这是因为在HTTP规范中,报头是第一位的,并且必须采用正确的格式。

如果你试图在PHP中使用Header后,你已经发送了其他内容到客户端,那么它将触发一个警告,因为你已经试图违反HTTP规范。文档是这样说的:

请记住,必须在发送任何实际输出之前调用header(),可以通过普通的HTML标记、文件中的空白行或PHP调用。使用include或require函数或其他文件访问函数读取代码,并且在调用header()之前输出空格或空行是一个非常常见的错误。当使用单个PHP/HTML文件时,也存在同样的问题。

http://php.net/manual/en/function.header.php