无法使用php验证数据库的表单详细信息

时间:2016-03-31 10:28:54

标签: php html database forms

我创建了此登录页面表单

<form name="loginform" method="post" action="home1.php" enctype="multipart/form-data" id="Form1"  onsubmit="return Validateloginform(this)">
    <input type="hidden" name="formid" value="form1">
    <div id="wb_Text14" style="position:absolute;left:44px;top:13px;width:412px;height:38px;z-index:0;text-align:left;">
        <span style="color:#000080;font-family:'Comic Sans MS';font-size:27px;"> <strong>&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; LOGIN  </strong></span></div>
    <div id="wb_Text15" style="position:absolute;left:29px;top:75px;width:122px;height:27px;z-  index:1;text-align:left;">
        <span style="color:#000080;font-family:'Comic Sans MS';font-size:19px;"><strong> USERNAME</strong></span></div>
    <input type="text" id="Editbox6"     style="position:absolute;left:187px;top:75px;width:267px;height:28px;line-height:28px;z-index:2;" name="username" value="">
    <div id="wb_Text16"  style="position:absolute;left:34px;top:129px;width:125px;height:27px;z- index:3;text-align:left;">
        <span style="color:#000080;font-family:'Comic Sans MS';font-size:19px;"> <strong>PASSWORD</strong></span></div>
    <input type="password" id="Editbox7"   style="position:absolute;left:187px;top:129px;width:267px;height:28px;line-height:28px;z-index:4;" name="password" value="">
    <input type="submit" id="Button1" name="submit" value="Submit" style="position:absolute;left:142px;top:223px;width:195px;height:52px;z- index:5;">
</form>

我的PHP代码是

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['formid'] == 'form1') {
        $mysql_server = 'localhost';
        $mysql_username = 'root';
        $mysql_password = '';
        $mysql_database = 'register';
        $mysql_table = 'users';

        $db = mysqli_connect($mysql_server, $mysql_username, $mysql_password, $mysql_database);
        if (!$db) {
            die('Failed to connect to database server! <br>' . mysqli_connect_error());
        }
        mysqli_select_db($db, $mysql_database) or die('Failed to select database<br>' . mysqli_connect_error());
        $username = $_POST['username'];
        $password = $_POST['password'];

        $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
        $result = mysqli_query($db, $sql);
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        if (mysqli_num_rows($result) == 1) {
            session_start();
            $_SESSION['username'] = $username;
            $_SESSION['password'] = $password;
            header('Location: home1.php');
            exit;
        } else {
            $error = "Incorrect username and password";
        }
    }
?>

我不知道这段代码有什么问题。一切似乎都很好。它不会验证使用数据库中存在的数据在登录表单中输入的数据。即使我输入了错误的密码或错误的用户名,甚至没有输入任何内容,只需按下提交按钮,它就会将我成功重定向到所需的页面。我的注册表和代码工作正常,数据通过表单成功输入数据库。

我想要的页面名称是home1.php。我在同一网页上有注册表和登录表。早些时候,我在同一页面上有注册表单和登录表单的php代码。当我运行此代码时,它曾经将我重定向到同一页面。我的老师让我把登录表单的php代码放在所需的网页上,即home1.php。我把它,然后当我按下提交按钮时,它将我重定向到home1.php页面(我想要的页面)但我已经发现即使我没有在登录表单中输入任何内容并按提交然后它也将我重定向到所需的页面,如果我输入数据库中不存在的用户名和密码,它会再次将我重定向到所需的页面。 然后我将登录表单php代码放在另一个文件中,然后尝试访问home1.php页面,但同样的问题就在那里。请帮我 。我不知道该怎么办 。 谢谢 !

1 个答案:

答案 0 :(得分:2)

您的代码中有多处错误。

您总是被重定向到home1.php,因为您的格式是

<form name="loginform" method="post" action="home1.php" enctype="multipart/form-data" id="Form1"  onsubmit="return Validateloginform(this)">

这将在home1.php文件上执行你的代码,你应该将你的登录代码存储在另一个页面中,比如说loginPage.php,因此你的表单应该是:

<form name="loginform" method="post" action="loginPage.php" enctype="multipart/form-data" id="Form1"  onsubmit="return Validateloginform(this)">

您还应该将代码更改为以下内容:

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['formid'] == 'form1') {
        $mysql_server = 'localhost';
        $mysql_username = 'root';
        $mysql_password = '';
        $mysql_database = 'register';
        $mysql_table = 'users';

        $db = mysqli_connect($mysql_server, $mysql_username, $mysql_password, $mysql_database);
        if (!$db) {
            die('Failed to connect to database server! <br>' . mysqli_connect_error());
        }

        $username = $_POST['username'];
        $password = $_POST['password'];

        $sql = "SELECT * FROM users WHERE username = '$username'";

        $result = mysqli_query($db, $sql);

        $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

        if (mysqli_num_rows($result) == 1 && $row["password"] == $password) {
            session_start();
            $_SESSION['username'] = $username;
            header('Location: home1.php');
            exit;
        } else {
            $error = "Incorrect username and password";
        }
    }
?>

上面的代码工作正常。

您还应该考虑在注册和登录页面上使用一些哈希函数,因为在数据库中存储纯文本密码是非常不安全的。