簡體   English   中英

使用准備好的語句 PHP MYSQL 將空值插入數據庫

[英]Inserting null values to database using prepared statements PHP MYSQL

嗨,我第一次使用准備好的語句。 我有一個表單,它的值使用 Mysqli 准備好的語句插入到 Mysql 數據庫中。 但問題是如果用戶將輸入框留空,Query 不會向數據庫插入行。

形式

<form action="test.php" method="post" class="signupform">
    <input type="text" Placeholder="Name" name="name" Required="required"/>
    <br />
    <input type="email" Placeholder="Email-id" name="email" Required="required"/>
    <br />
    <input type="password" Placeholder="Password" name="pass" Required="required"/>
    <br />
    <span>Male<input type="radio" name="sex" value="M" checked="checked"/>&nbsp;&nbsp;&nbsp;Female<input type="radio" name="sex" value="F"/></span>
    <br />
    <input type="text" Placeholder="City" name="city"/>
    <br /><br />
    <input type="submit" value="CREATE MY ACCOUNT" name="submit"/>
</form>

<?php

if(isset($_POST['submit'])){
    include_once('includes/db.php');
    $name=$_POST['name'];
    $pass=$_POST['pass'];
    $email=$_POST['email'];
    $sex=$_POST['sex'];
    $city = $_POST['city'];
    if ($stmt = $mysqli->prepare("INSERT INTO login VALUES('',?,?,?,?,?,'')")) {
        $stmt->bind_param("sssss", $name, $email, $pass, $sex, $city);
        $stmt->execute();
        if($stmt){
            echo "result inserted";
        }
    }
}

?>

在使用上面的表單和查詢時,當我填寫所有表單框時,它會為我插入一個新行。 但是如果我將輸入框留空,它不會插入任何行。

我也看到很多問題說如果我使用這樣的變量

if(empty($_POST['city'])) { $city = null; } else { $city = $_POST['city']; }

那么它就會起作用,並且其中大部分都是可以接受的答案。 我很困惑為什么這個解決方案對我不起作用???

任何幫助表示贊賞...謝謝

您的查詢有誤:

if ($stmt = $mysqli->prepare("INSERT INTO login VALUES('',?,?,?,?,?,'')")) {

它應該是這樣的:

if (!empty($name) || !empty($pass) || !empty($email))
    {
        $stmt = $mysqli->prepare("INSERT INTO login(`name`,`password`,`email`,`sex`,`city`) VALUES(?,?,?,?,?)");
        $stmt->execute([$name, $pass, $email, $sex, $city]);
        echo "result inserted";

    } else {
        echo 'You have not entered all of the fields.';
    }

在這種情況下,如果變量不為空,則執行插入。 否則,如果它們是空的,則會發出一個回聲,說明這些字段尚未填充。

如果您對這些字段為空感到高興,只需將!empty()更改為empty()但如上述 Fred -ii- 所述,請確保您的數據庫允許在這些字段中使用 NULL。

可能這不是最聰明的方法之一,但是嘿,它會完成工作。

在將變量分配給 $_POST 字段之前需要做的一件事,您需要檢查該 $_POST 字段是否已設置並且不為空,如果不為空則分配值,目前如果有人遺漏了一個字段當您運行查詢時,您的表單可能會收到未定義的通知。

這是你可以做的。

<?php

if (isset($_POST['submit'])) {
    include_once('includes/db.php');


    if (!empty($_POST['name'])) {

        $name = $_POST['name'];
    } else {

        $name = " ";
    }

    if (!empty($_POST['pass'])) {

        $pass = $_POST['pass'];
    } else {

        $pass = " ";
    }

    if (!empty($_POST['email'])) {

        $email = $_POST['email'];
    } else {

        $email = " ";
    }

    if (isset($_POST['sex'])) {

        $sex = $_POST['sex'];
    } else {

        $sex = " ";
    }

    if (!empty($_POST['city'])) {
        $city = $_POST['city'];
    } else {

        $city = " ";
    }
    if ($stmt = $mysqli->prepare("INSERT INTO login VALUES(?,?,?,?,?)")) {
        $stmt->bind_param("sssss", $name, $email, $pass, $sex, $city);
        $stmt->execute();
        if ($stmt) {
            echo "result inserted";
        } else {

            echo "could not insert";
        }
    }
}

?>

還有其他更好的方法可以做到這一點。

暫無
暫無

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

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