Javascript 未设置默认空值

Javascript 未设置默认空值,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我对内容编辑有问题。我正在尝试使用contenteditable制作一个ajax post方法。我有两个房间 如果它没有写入任何内容,则它必须是数据库表中的NULL,但它显示空post not settingNULL AJAX $("body").on("click", ".post", function() { var text1 = $("#text1").html(); var text2 = $(

我对内容编辑有问题。我正在尝试使用contenteditable制作一个ajax post方法。我有两个房间

如果它没有写入任何内容,则它必须是数据库表中的
NULL
,但它显示空post not setting
NULL

AJAX

$("body").on("click", ".post", function() {
   var text1 = $("#text1").html();
   var text2 = $("#text2").html();
   
   var data = 'text1=' + encodeURIComponent(text1) + '&text2=' + encodeURIComponent(text2);
   
      $.ajax({
         type: 'POST',
         url: '/requests/post.php',
         data: data,
         cache: false,
         beforeSend: function() {
            // Do something
         },
         success: function(html) {
            console.log("post sended");
         }
      });
   
});
HTML

<div class="abc" id="text1" contenteditable="true" placeholder="Write something1"></div>
<div class="text2" id="text2" contenteditable="true" placeholder="Write something2"></div>
所有代码都工作正常。但问题是text2。若并没有写入任何文本,它将在数据库中显示空结果。我想将id设置为默认值
NULL

走错了路

应该是这样的


我错过了什么?任何人都可以在这方面帮助我吗?

在逻辑中添加一个预检查,因为您必须给出
NULL
,或者不使用insert中的字段来获得表中的实际
NULL

// Add the insert POST
 $text2 = $text2?"'$text2'":'NULL';
 $query = mysqli_query($this->db,"INSERT INTO `posts` (text1,text2, uid_fk,time) VALUES ('$text1',$text2,'$uid','$time')") or die(mysqli_error($this->db));
插入文本与非文本

插入一个实
NULL

插入帖子(text1)值(null)

插入内容为空的文本
NULL

插入帖子(text1)值('NULL')

插入表默认值:

插入帖子(text1)值(默认值)

插入内容为默认值的文本

插入帖子(text1)值(“默认值”)

要进一步了解它,这里有一个sql示例:

插入测试(testfield)值(null),('null'),(默认值),(''


用一个字段
VARCHAR(50)NULL DEFAULT NULL创建一个表
test
,然后执行SQL并查看得到的结果。您将得到两个实数为null的条目,一个为空字符串,另一个为字符串
null

问题是您传递的是
空值,而不是
null
本身

只需检查字符串是否为空
,如果为空则输入null

if(isset($_POST['text1'])){
    $text1 = mysqli_real_escape_string($db, $_POST['text1']);
    $text2 = mysqli_real_escape_string($db, $_POST['text2']);
    $text1 = !empty($text1) ? $text1 : null;
    $text2 = !empty($text2) ? $text2 : null;
    $data = $POST->POST($uid,$text1, $text2); 
}
另外,您的
insert
语句在字符串周围添加
'
,这将使
null
成为字符串
'null'

因此,使用pdo进行相应的处理:

$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword");
$stmt = $dbh->prepare("INSERT INTO `posts` (text1,text2, uid_fk,time) VALUES (:text1,:text2,:uid,:time)");

$statement->execute(array(':text1'=>$text1,
                          ':text2', $text2,
                          ':uid', $uid,
                          ':time', $time
                    ));
编辑:

由于某些原因,如果您不能或不想使用PDO。你最终会入侵sql。比如:

$text2 = !empty($text2) ? "'".$text2."'":null;
$text1 = !empty($text1) ? "'".$text1."'":null;
$query = mysqli_query($this->db,"INSERT INTO `posts` (text1,text2, uid_fk,time) VALUES ($text1,$text2,'$uid','$time')");

所有代码都正常工作??你看到了吗:
值(N'$text1',
?如果你在数据库中插入一个空文本,它也会变成一个空字符串,而不是真实的
NULL
。这将是数据库
('','foobar')
中的文本,这将是数据库
(NULL,'foobar')
,所以对
$test2
做一个类似
$test2=$test2''的预检查:'null';
并将其粘贴到查询中,
('$text1',$test2)
,这里没有单引号(在预复查中添加)。@JustOnUnderMillions
$test2=$test2?”“$test2”:'null';
这个'null';只是一个文本,我想获取默认值
null
是的,但是查询的文本,由于查询中缺少单引号,它将在数据库中成为真正的null。
('null')!=(null)
首先是数据库中的一个文本,其内容为
null
,第二个将成为一个真正的null,您现在明白了吗?@JustOnUnderMillions它没有从数据库中获取默认null,它只是获取一个文本。我认为问题是contenteditable,因为我使用普通文本区域或输入文本,如果text2为空。这仍将向表中写入一个空字符串。请查看我更新的答案的结尾。但首先请查看
POST($uid,$text1,$text2)
对参数的作用;-)@JustOnUnderMillions查看了它,是的,这表明我的ans将插入db
null
非空stringlol@JustOnUnderMillions不可能我正在使用pdo,所以您可能应该了解它是如何工作的。干杯我知道PDO是如何工作的(谁说我不知道),但是一个好的答案将采用OP使用的东西,他使用的是MYSQLI,你强迫他将解决方案更改为PDO,好吧,但我真的不知道。
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword");
$stmt = $dbh->prepare("INSERT INTO `posts` (text1,text2, uid_fk,time) VALUES (:text1,:text2,:uid,:time)");

$statement->execute(array(':text1'=>$text1,
                          ':text2', $text2,
                          ':uid', $uid,
                          ':time', $time
                    ));
$text2 = !empty($text2) ? "'".$text2."'":null;
$text1 = !empty($text1) ? "'".$text1."'":null;
$query = mysqli_query($this->db,"INSERT INTO `posts` (text1,text2, uid_fk,time) VALUES ($text1,$text2,'$uid','$time')");