簡體   English   中英

無法使用php與數據庫驗證表單詳細信息

[英]Can't verify the form details with database using php

我創建了此登錄頁面表單

<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頁面,但是存在相同的問題。 請幫我 。 我不知道該怎么辦 。 謝謝 !

您的代碼中有幾個錯誤。

您總是被重定向到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";
        }
    }
?>

上面的代碼正常工作。

您還應該考慮在注冊和登錄頁面上使用一些哈希函數,因為在數據庫中存儲純文本密碼非常不安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM