无论

时间:2015-04-22 13:23:10

标签: php mysql forms login

我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的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
        }
}
?>

1 个答案:

答案 0 :(得分:6)

您的代码存在一些问题。

其中一个是你的条件陈述

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并确保它确实是您的PHP的正确网址。

  • 您应该将AND中可能导致问题的Username='".$username."'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或PHP 5.5的password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack

您目前的代码向SQL injection开放。使用mysqli with prepared statementsPDO with prepared statements。对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack