Javascript 未设置默认空值
我对内容编辑有问题。我正在尝试使用contenteditable制作一个ajax post方法。我有两个房间 如果它没有写入任何内容,则它必须是数据库表中的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 = $(
NULL
,但它显示空post not settingNULL
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将插入dbnull
非空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')");