3

我有一个 HTML 表单;我希望能够设置它,以便如果字段为空,数据库中的字段实际上将是 NULL,而不仅仅是字段中的单词 NULL。我认为使用此代码会有所帮助,但它只是将 NULL 这个词放在了字段中。PHP代码:

<pre>
<?php
            if (isset($_POST['oc_item'])) { 
            $oc_item = mysql_escape_string($_POST['oc_item']);
            $oc_itemdesc = (!empty($_POST['oc_itemdesc'])) ? $_POST['oc_itemdesc'] : NULL;

           $sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc)
            VALUES(''$oc_item','$oc_itemdesc')";

        mysql_query($SQL);
        if (mysql_query($sql)) {
            echo '<strong><em>Your data has been submitted</em></strong><br /><br />';
                } else {
            echo '<p>Error adding submitted info: ' . mysql_error(). '</p>';
        }
        }
        ?></pre>

HTML 代码:

<pre>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

        <table>
        <tr>
            <td>Item Name</td>
            <td><input class="forms" type="text" size="50" maxlength="50" name="oc_item" /></td>
        </tr>
        <tr>
            <td>Item Description</td>
            <td><input class="forms" type="text" size="50" maxlength="50" name="oc_itemdesc" /></td>
        </tr>
</table>

        <p><input type="submit" value="Submit item" /></p>
        </form></pre>

我希望该字段实际上为NULL,并且该字段不包含单词 NULL。提前致谢。

4

4 回答 4

1

如果您打印出 $sql,您会看到它正在插入, 'NULL'.

您需要修改代码,使其插入工作“NULL”(不带'' 引号),或者更好的是,根本不插入该参数(消除, 'NULL'字符串的整个部分。

于 2012-06-29T16:31:18.207 回答
1

如果你想将 NULL 写入 MySQL 数据库,你真的必须把 NULL 放在那里而不带引号。

像这样:

INSERT INTO table (column, column2) VALUES ('mystring', NULL);

如果您想手动执行此操作,总是有点费力,因为您必须为查询创建 if 条件。

记住:PHP null!= MySQL NULL。他们俩根本不认识。

但我仍然想知道,这与问题名称有什么关系?(选择除非)

你可以这样写你的代码:

$oc_item = mysql_escape_string($_POST['oc_item']);
$oc_itemdesc = (isset($_POST['oc_itemdesc']) && trim($_POST['oc_itemdesc']) != '') ? "'" . mysql_escape_string($_POST['oc_itemdesc']) . "'" : 'NULL';

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc)
        VALUES('" . $oc_item . "', " . $oc_itemdesc . ")";
# sorry for adding " . all the time, but I dislike variables within strings :D

但我不得不承认我也不太喜欢,因为它将 MySQL 字符串周围的引号从 SQL 查询本身移开。

于 2012-06-29T16:31:41.560 回答
0

试试这个:

$oc_itemdesc = (!empty($_POST['oc_itemdesc'])) ? "'".$_POST['oc_itemdesc']."'" : "NULL";

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item',$oc_itemdesc)";

就目前而言,您正在添加'NULL'而不是NULL添加单词而不是值。

旁注:我会小心并正确地转义/编码,$_POST['oc_itemdesc']因为在描述中加上撇号的人会完全放弃插入语句。例如: I don't like this看起来像这样:

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item','I don't like this')";//MYSQL Error

PPS:就目前而言,您正在插入两次:

mysql_query($SQL);//insert 1
if (mysql_query($sql)) {//insert 2
于 2012-06-29T16:33:24.253 回答
0

我用于来自 HTML 表单的 MySQL 数据的函数。

function emptyHtmlFormToNull($arr){
   foreach($arr as $key => $val){
       if(empty($val) || strtolower($val) === 'null'){
           $arr[$key] = null;
       }
   }
   return $arr;
}
于 2017-10-19T06:09:38.647 回答