Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysqli保存contentEditable div中的数据_Php_Jquery_Mysql_Mysqli_Contenteditable - Fatal编程技术网

Php 使用mysqli保存contentEditable div中的数据

Php 使用mysqli保存contentEditable div中的数据,php,jquery,mysql,mysqli,contenteditable,Php,Jquery,Mysql,Mysqli,Contenteditable,我正在尝试将contentEditable div中的数据保存到mySql数据库。但似乎“+”符号不能存储在DB中。这是正确的概念还是我遗漏了什么 index.php <div id="la_sent" contentEditable=true></div> <button class="saveChanges">Save changes</button> ajax.php $type = $_POST['iid']; $content = $_

我正在尝试将contentEditable div中的数据保存到mySql数据库。但似乎“+”符号不能存储在DB中。这是正确的概念还是我遗漏了什么

index.php

<div id="la_sent" contentEditable=true></div>
<button class="saveChanges">Save changes</button>
ajax.php

$type = $_POST['iid'];
$content = $_POST['content'];
$mysqli=connect_database(); //connection to database
$stmt = $mysqli->prepare('UPDATE email_structure SET content = ? WHERE type = ?');
$stmt->bind_param('ss', $content, $type);
$ress = $stmt->execute();
$stmt->close();
$mysqli->close();
echo "OK";

例如:如果我在div元素字符串“a+b+c”中写入,它会在DB字符串“a+b+c”中添加。知道为什么吗?

为了安全起见,在将文本插入数据库(搜索、存储等)之前,您应该始终转义文本。要执行此操作,请参阅php的
mysqli\u real\u escape\u string
。即使您正在使用准备好的语句,也应该转义字符


如果这确实是个问题,您可以用另一个字符替换
+
,然后在从DB检索时将其替换回加号在默认情况下被替换为空格,因此您必须首先对它们进行编码

是用javascript实现的一种方法

因此,在将
script.js添加到
datUrl
之前,编辑
script.js以通过
encodeURIComponent
传递
content
变量应该可以做到这一点

$(document).ready(function(){
  $( ".saveChanges" ).click(function() {
      content = $('#la_sent').html();
      dataUrl = "iid=1&content="+encodeURIComponent(content);  //encode content variable
      $.ajax({
        url:"ajax.php",
        type:"POST",
        data:dataUrl,
        success:function(data){
            ...
      }});
  }); 
}); 

呵呵?这叫什么<代码>更新电子邮件\u结构集内容=?其中type=?
是一个预先准备好的语句。这并不能解决这里的问题。我是说,即使他使用的是预先准备好的语句,他仍然应该避免使用字符Swall,用其他字符替换symbol+不是一个干净的解决方案。好吧,根据您的数据,您可以做很多事情:将其转换为base64,对其进行加密,但这些语句的速度要慢得多,不需要转义输入。我将其更改为GET,结果仍然相同。默认情况下,加号替换为空格。首先尝试将javascript中的
content
变量传递给用户
dataUrl=“iid=1&content=“+encodeURIComponent(content)@Jeribo非常感谢!这就解决了:)@Jeribo我认为答案最适合标记为已解决;-)干得好,我自己也是个服务器端的好人。TBH,我在很长时间的缺席后正在学习JS的东西,我从这个答案中学到了东西;干得好作为旁注:这肯定是他们使用jQuery造成的问题。如果OP没有使用它,他们的查询就会成功。@Fred ii-我理解。当然更有趣的服务器端:-)我不认为问题出在jQuery的使用上,因为如果我查看原始数据(
file\u get\u contents(“php://input)我可以在URL中看到加号。只是一些时髦的业务服务器端我用事先准备好的语句在我这方面进行了测试,结果证明一切正常,不管怎样在更新中对我来说都是如此。
$(document).ready(function(){
  $( ".saveChanges" ).click(function() {
      content = $('#la_sent').html();
      dataUrl = "iid=1&content="+encodeURIComponent(content);  //encode content variable
      $.ajax({
        url:"ajax.php",
        type:"POST",
        data:dataUrl,
        success:function(data){
            ...
      }});
  }); 
});