无论如何,登录脚本都会重定向用户

login script redirects user no matter what

我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的 mysql 数据库。但是,当我提交表单时,无论登录是否有效,它都会重定向信息。我很困惑可能出了什么问题。

我的表格:

<form name="login" action="edit_profile/index.php" method="post"> //redirects to this page regardless of what has been submitted
    <fieldset>
        <legend>Please enter your login details</legend>
        <label for="username">Username</label>
        <input id="username" name="username" type="text" value="" required/><br>
         <label for="password">Password</label>
        <input id="password" name="password" type="password" value="" required/><br>
        <input type="submit" value="submit"/>
    </fieldset>

pHp脚本:

<?php require_once "connectdb.php";?>
<?php
    if(isset($_POST["submit"])){
        $username=$_POST["username"];
        $password=$_POST["password"];

        $query=mysql_query("SELECT * FROM login_details WHERE Username='".$username."'AND Password='".$password."'");
        $numrows=mysql_num_rows($query);
    if($numrows!=0) {

        while($$row=mysql_fetch_asoc($query)) {
            $dbusername=$row["Username"];
            $dbpassword=$row["Password"];
        }

        if($user == $dbusername && $pass == $dbpassword) {
            session_start();
            $_SESSION["user_session"]=$user;
            echo "<pre>";
            print_r($_SESSION);
            echo '</pre>';
            }
        } else {
            echo "Invalid username or password!"; //does not echo
        }
}
?>

您的代码有一些问题。

其中一个是你的条件语句

if(isset($_POST["submit"])){...}

您的提交按钮没有名称属性

<input type="submit" value="submit"/>

修改为

<input type="submit" name="submit" value="submit"/>

然后这个while($$row删除其中一个$

mysql_fetch_asoc打错了,应该写成mysql_fetch_assoc

while($row=mysql_fetch_assoc($query))

此外,您发布的代码似乎缺少结束 </form> 标记。

  • 您还应该检查您的 action 并确保 URL 确实适合您的 PHP。

  • 您应该 space 删除 Username='".$username."'AND 中的 AND,这可能会导致问题 Username='".$username."' AND以防万一.

然后我们有这一行:

if($user == $dbusername && $pass == $dbpassword)

$user$pass 此时未定义,因此您可能想分别使用 $username$password

error reporting 添加到您的文件的顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只应在试运行中进行,绝不能在生产中进行。

  • 同时将 or die(mysql_error()) 添加到 mysql_query()

脚注:

我注意到您可能以明文形式存储密码。如果是这种情况,非常不鼓励。

我推荐你使用CRYPT_BLOWFISH or PHP 5.5's password_hash() function. For PHP < 5.5 use the password_hash() compatibility pack

您当前的代码是开放SQL注入。将 mysqli 与准备好的语句一起使用 ,或将 PDO 与准备好的语句 结合使用。对于密码存储,使用 CRYPT_BLOWFISH or PHP 5.5's password_hash() function. For PHP < 5.5 use the password_hash() compatibility pack.

  • ircmaxell 昨天使用 password_hash()password_verify()
  • 发布了一个答案
  • 看看:

改变这个:

<?php
    if(isset($_POST["submit"])){

对此:

<?php
    if(isset($_POST["password"])&&isset($_POST["username"])){

确保未发布空表单。

检查这里的错别字:

while($$row=mysql_fetch_asoc($query)) {

将其更改为

while($row=mysql_fetch_asoc($query)) {