如何确保为空表单字段发送null而不是0

时间:2016-05-27 10:55:52

标签: php mysql

我有一个包含允许空值的列的表,并且具有默认的空值。在更新时,如果该字段为空(未插入数据),则我的脚本将插入0而不是null。我和我一样经历过类似的问题,我已经尝试过给出的建议,但仍然无法解决我的问题。这是我的代码

<?php
if (isset($_POST['submit'])) {

    # process the form
    $student_id = $_POST["student_id"];
    $subject_id = $_POST['subject_id'];
    if (is_null($_POST["test1"])){$test1 = null;} else {$test1 = $_POST["test1"];}
    if (is_null($_POST["test2"])){$test2 = null;} else {$test2 = $_POST["test2"];}
    if (is_null($_POST["test3"])){$test3 = null;} else {$test3 = $_POST["test3"];}

    for($i=0; $i < count($student_id); $i++) {
        $studentid = mysqli_real_escape_string($connection, $student_id[$i]);
        $subjectid = mysqli_real_escape_string($connection, $subject_id);
        $test_1 = mysqli_real_escape_string($connection, $test1[$i]);
        $test_2 = mysqli_real_escape_string($connection, $test2[$i]);
        $test_3 = mysqli_real_escape_string($connection, $test3[$i]);

        $query = "UPDATE fullresult SET test1='{$test_1}', test2='{$test_2}', test3='{$test_3}' WHERE student_id={$studentid} AND subject_id={$subjectid}";
        $result = mysqli_query($connection, $query);
    }
}
?>

当我回应查询时,这就是我所看到的,我想知道为什么我仍然会插入

UPDATE fullresult SET test1=' 10', test2=' ', test3=' ' WHERE student_id=51 AND subject_id=2

4 个答案:

答案 0 :(得分:1)

对于空字符串,is_null不返回true。尝试将if语句更改为以下内容:

$test1 = trim($_POST["test1"])
if (!strlen($test1)) $test3 = null;

答案 1 :(得分:0)

怎么样?
if (isset($_POST['submit'])) {

    # process the form
    $student_id = $_POST["student_id"];
    $subject_id = $_POST['subject_id'];

    # only retrieve FILLED IN answers
    $tests = array();
    if(isset($_POST["test1"]) && strlen($_POST["test1"])) $tests['test1'] = $_POST["test1"];
    if(isset($_POST["test2"]) && strlen($_POST["test2"])) $tests['test2'] = $_POST["test2"];
    if(isset($_POST["test3"]) && strlen($_POST["test3"])) $tests['test3'] = $_POST["test3"];

    if(!empty($tests)){ # if there were no answers, there's no point in updating the database
        for($i=0; $i < count($student_id); $i++) {
            $studentid = mysqli_real_escape_string($connection, $student_id[$i]);
            $subjectid = mysqli_real_escape_string($connection, $subject_id);

            # now let's build the "SET" part of the query
            $set = array();
            foreach($tests as $key => $value) $set[]=mysqli_real_escape_string($key)."='".mysqli_real_escape_string($value)."'";
            $set = implode(', ',$set);

            # ...and finally update
            $query = "UPDATE fullresult SET {$set} WHERE student_id={$studentid} AND subject_id={$subjectid}";
            $result = mysqli_query($connection, $query);
        }
    }
}

这种方法的重点是,如果您在UPDATE查询中未包含key =&gt;值对,则会使用其默认值填充它。

答案 2 :(得分:0)

您可以使用

ctype_digit

检查其中是否有数字字符。

功能

mysqli::real_escape_string -- mysqli_real_escape_string — Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection

(资料来源:http://php.net/manual/en/mysqli.real-escape-string.php

由于你想在数据库中使用null,你应该重写代码

    if (is_null($_POST["test1"])){$test1 = null;} else {$test1 = mysqli_real_escape_string($connection, $_POST["test1"]);}

只在需要时才会转义值(如果你在$ _POST中有值)

答案 3 :(得分:-1)

您必须设置'null'字,而不是null值。

if (is_null($_POST["test1"])){$test1 = 'null';} else {$test1 = $_POST["test1"];}
if (is_null($_POST["test2"])){$test2 = 'null';} else {$test2 = $_POST["test2"];}
if (is_null($_POST["test3"])){$test3 = 'null';} else {$test3 = $_POST["test3"];}