Php HTML表单,将空白表单设置为空

Php HTML表单,将空白表单设置为空,php,mysql,Php,Mysql,我有一个HTML表单;我希望能够将其设置为,如果字段为空,则DB中的字段实际上将为NULL,而不仅仅是字段中的单词NULL。我认为使用这段代码会有所帮助,但它只是在字段中输入NULL这个词。 PHP代码: <pre> <?php if (isset($_POST['oc_item'])) { $oc_item = mysql_escape_string($_POST['oc_item']); $oc_it

我有一个HTML表单;我希望能够将其设置为,如果字段为空,则DB中的字段实际上将为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>
INSERT INTO table (column, column2) VALUES ('mystring', NULL);
HTML代码:


我希望字段实际为NULL,而不是让字段包含NULL这个词。提前感谢。

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


您需要修改代码,使其插入不带引号的work NULL,或者更好的是,完全不插入该参数,从而消除字符串的整个“NULL”部分。

如果您想将NULL写入MySQL数据库,您确实必须将NULL放在那里,而不带引号

像这样:

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

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item',$oc_itemdesc)";
如果您想手动执行此操作,则需要付出一定的努力,因为您必须为查询设置if条件

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

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

您可以这样编写代码:

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item','I don't like this')";//MYSQL Error
function emptyHtmlFormToNull($arr){
   foreach($arr as $key => $val){
       if(empty($val) || strtolower($val) === 'null'){
           $arr[$key] = null;
       }
   }
   return $arr;
}
但我必须承认我也不太喜欢,因为它将围绕MySQL字符串使用引号的职责从SQL查询本身转移到了别处。

试试以下方法:

mysql_query($SQL);//insert 1
if (mysql_query($sql)) {//insert 2
目前,您添加的是“NULL”而不是NULL,因此它添加的是单词而不是值

旁注:我会小心并正确地转义/编码$_POST['oc_itemdesc'],因为在描述中加上撇号的人会完全摆脱insert语句。例如:我不喜欢这个会是这样的:

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item','I don't like this')";//MYSQL Error
function emptyHtmlFormToNull($arr){
   foreach($arr as $key => $val){
       if(empty($val) || strtolower($val) === 'null'){
           $arr[$key] = null;
       }
   }
   return $arr;
}
PPS:目前,您正在插入两次:


我用于从HTML表单中获取MySQL数据的函数


您好,我使用了您的代码,它将字段留空-它不会将字段标记为NULL。我签入了phpmyadmin,当我去编辑该条目时,空框没有被选中,它只是空白。这就是我想要完成的。好的,我已经完全改变了代码。我可能写了一些不起作用的东西。我已经有一段时间没有使用纯SQL了。试试新的,同时检查我们现在插入的NULL文本是否打印出来。然后我们知道正确的语句被采用了。我可以尝试一下,唯一的问题是,我在这个表单上还有大约20个其他字段。在我发布的示例中,我只是将它们删掉以节省空间。我如何将它们合并到这段代码中?这就是这个方法失败的地方…但我还不确定,为什么蒂姆·威瑟斯仍然使用另一个失败的方法。但是对于处理20个变量,您必须使用他以前解析字符串与NULL的方法。我测试了我的旧代码,对我来说,它似乎工作正常。我得到INSERT到catalog_dev oc_item,oc_itemdesc值'aaa',NULL作为输出,这将把NULL插入数据库。我猜您得到了一个空输入,因为您的if条件的计算结果为true。所以这一定是出了什么问题!emptytrim$\u POST['oc\u itemdesc']。也许你的输入中有空格或换行符,那么它就会说有一个输入。尝试修剪我也添加了它上面。嗨,我尝试了你的代码,当我有一个'它给我这个错误时提交:错误添加提交的信息:你有一个错误在你的SQL语法;查看与您的MySQL服务器版本对应的手册,了解在“这是一个测试,您可以显示整个SQL查询var_dump$SQL;”附近使用的正确语法;。我相信撇号是个小错误。在生成的SQL代码中比在这样的PHP-SQL-mix.PHP NULL中更容易看到它MySQL空。只需将数据库中的字段设置为允许null,并将默认值设置为null,如果输入为空,则不要插入该字段。