簡體   English   中英

PHP代碼未插入MySQL數據庫

[英]PHP code not inserting into MySQL database

與本書相比,我再次檢查了我的代碼,並且確定輸入了正確的代碼。 頁面加載后,如果我將字段保留為空白,或者密碼和確認密碼字段不匹配,則會顯示錯誤。 但是,如果我正確填寫了表單並提交,則MySQL數據庫不會獲取傳遞給它的信息。 “注冊!” 並且登錄頁面也不會顯示。 我直接通過Ubuntu檢查了MySQL數據庫,並且users表仍然為空(空集(0.00秒))。 phpMyAdmin還為用戶表返回空的“ MySQL返回空的結果集(即零行)。(查詢花費0.0011秒)”。

<!DOCTYPE HTML>                                   
<html lang="en">                                  
    <head>                                         
        <metacharset="UTF-8">                       
        <title>Register Page</title>             
    </head>                                        
    <body>                                         
        <?php
            $page_title = 'Register';
            include('/var/www/html/learn/php/header.html');

            if($_SERVER['REQUEST_METHOD'] == 'POST')
            {

                require('/var/www/connect_db.php');
                $errors = array();

                if(empty($_POST['first_name']))
                {
                    $errors[] = 'Enter your first name.';
                }
                else
                {
                    $fn = mysqli_real_escape_string($dbc, trim($_POST['first_name']));
                }

                if(empty($_POST['last_name']))
                {
                    $errors[] = 'Enter your last name.';
                }
                else
                {
                    $ln = mysqli_real_escape_string($dbc, trim($_POST['last_name']));
                }

                if(empty($_POST['email']))
                {
                    $errors[] = 'Enter your email address.';
                }
                else
                {
                    $e = mysqli_real_escape_string($dbc, trim($_POST['email']));
                }

                if(!empty($_POST['pass1']))
                {
                    if($_POST['pass1'] != $_POST['pass2'])
                    {
                        $errors[] = 'Passwords do not match.';
                    }
                    else
                    {
                        $p = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
                    }
                }
                else
                {
                    $errors[] = 'Enter your password.';
                }

                if(empty($errors))
                {
                    $q = "SELECT user_id FROM users WHERE email='$e'";
                    $r = mysqli_query($dbc, $q);

                    if(mysqli_num_rows($r) != 0)
                    {
                        $errors[] = 'Email address already registered. <a href="login.php">Login</a>';
                    }
                }

                if(empty($errors))
                {
                    $q = "INSERT INTO users
                        (first_name, last_name, email, pass, reg_date)
                        VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())";
                    $r = mysqli_query($dbc, $q);

                    if($r)
                    {
                        echo '<h1>Registered!</h1>
                            <p>You are now registered.</p>
                            <p><a href="login.php">Login</a></p>';
                    }

                    mysqli_close($dbc);
                    include('/var/www/html/learn/php/footer.html');
                    exit();
                }
                else
                {
                    echo '<h1>Error!</h1>
                    <p id="err_msg">The following error(s) occurred:<br>';
                    foreach($errors as $msg)
                    {
                        echo "- $msg<br>";
                    }
                    echo 'Please try again.</p>';
                    mysqli_close($dbc);
                }
            }
        ?>

        <h1>Register</h1>
        <form action="register.php" method="POST">
            <p>
                First Name: <input type="text" name="first_name" value="<?php if(isset($_POST['first_name'])) echo $_POST['first_name'];?>">
                Last Name: <input type="text" name="last_name" value="<?php if(isset($_POST['last_name'])) echo $_POST['last_name'];?>">
            </p>
            <p>
                Email Address: <input type="text" name="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>">
            </p>
            <p>
                Password: <input type="password" name="pass1" value="<?php if(isset($_POST['pass1'])) echo $_POST['pass1'];?>">
                Confirm Password: <input type="password" name="pass2" value="<?php if(isset($_POST['pass2'])) echo $_POST['pass2'];?>">
            </p>
            <p>
                <input type="submit" value="Register">
            </p>
        </form>

        <?php include('/var/www/html/learn/php/footer.html');?>
    </body>                                        
</html>

我認為這是我的問題所在,但是我嘗試了各種替代方法,但仍然無法獲得將用戶插入MySQL數據庫的數據:

if(empty($errors))
{
    $q = "INSERT INTO users
        (first_name, last_name, email, pass, reg_date)
        VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())";
    $r = mysqli_query($dbc, $q);

    if($r)
    {
        echo '<h1>Registered!</h1>
            <p>You are now registered.</p>
            <p><a href="login.php">Login</a></p>';
    }

    mysqli_close($dbc);
    include('/var/www/html/learn/php/footer.html');
    exit();
}
else
{
    echo '<h1>Error!</h1>
    <p id="err_msg">The following error(s) occurred:<br>';
    foreach($errors as $msg)
    {
        echo "- $msg<br>";
    }
    echo 'Please try again.</p>';
    mysqli_close($dbc);
}

我不確定這本書為什么要輸入“ if($ r)”,但是請告訴我這是什么意思,並說明我在哪里搞砸了。

你的問題:

  1. 您正在復制變量$ q和$ r。 在這里換

      if(empty($errors)) { // changing the variable name here to $s and $m $s = "SELECT user_id FROM users WHERE email='$e'"; $m = mysqli_query($dbc, $s); if(mysqli_num_rows($m) != 0) { $errors[] = 'Email address already registered. <a href="login.php">Login</a>'; } } $q = "INSERT INTO users (first_name, last_name, email, pass, reg_date) VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())"; $r = mysqli_query($dbc, $q); 

還要刪除附加的if語句,因為它沒有任何作用。 另外,請使用參數化查詢來防止sql注入。 希望你能理解。

暫無
暫無

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

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