我正在构建一个网页,其中包含与 MySql 数据库链接的可编辑数据字段。
<th>CONTACT 1 NUMBER*</th>
<td bgcolor="#FFFFFF" contenteditable="true" data-old_value="<?php echo $rows["emr1_number"]; ?>" onBlur="saveInlineEdit(this,'emr1_number','<?php echo $rows["safr_id"]; ?>','<?php echo $userRow['userId']; ?>')"><?php echo $rows["emr1_number"]; ?></td>
以上代码用于html端显示数据,如果字段被编辑则获取新数据。
function saveInlineEdit1(editableObj,column,id,uid) {
// no change change made then return false
if($(editableObj).attr('data-old_value') === editableObj.innerHTML)
return false;
// send ajax to update value
$(editableObj).css("background","#FFF url(loader.gif) no-repeat right");
$.ajax({
url: "saveInlineEdit1.php",
cache: false,
data:'column='+column+'&value='+editableObj.innerHTML+'&id='+id+'&uid='+uid,
success: function(response) {
console.log(response);
// set updated value as old value
$(editableObj).attr('data-old_value',editableObj.innerHTML);
$(editableObj).css("background","#FDFDFD");
}
});
}
以上JS用于获取编辑后的数据并进行AJAX调用。
这是saveInlineEdit1.php
<?php
include_once("db_connect.php");
$sql = "UPDATE coin_location set ".$_REQUEST["column"]."='".$_REQUEST["value"]."' WHERE coin_id='".$_REQUEST["id"]."' AND userId='".$_REQUEST["uid"]."'";
mysqli_query($conn, $sql) or die("database error:". mysqli_error($conn));
echo "saved";
?>
一切正常。我唯一的问题是,如果正在编辑带有“+”符号的数据字段,例如,在网页中将数据“hello”更改为“+hello”。实际上,数据库中更改的数据必须是“+hello”,但我得到的是“hello”。一个空格被替换为“+”号。
请帮我摆脱这个。
谢谢。
最佳答案
PHP 正在(正确地)将 GET 参数中的 + 视为空格。您需要在发送之前将您的值编码为 url,例如与 encodeURIComponent .然后在服务器端你可以使用 urldecode 来获取原始值。
评论后编辑:
所以在你的 JavaScript 中你会做类似的事情
data:'column='+column+'&value='+encodeURIComponent(editableObj.innerHTML)+'&id='+id+'&uid='+uid,`
在 PHP 中:
$sql = "UPDATE coin_location set ".$_REQUEST["column"]."='".urldecode($_REQUEST["value"])."' WHERE coin_id='".$_REQUEST["id"]."' AND userId='".$_REQUEST["uid"]."'";
重要警告:该代码展示了如何解决您当前的问题,但您永远不应像那样将未经检查的用户输入插入到 SQL 中。
关于javascript - "+"js中的字符回显来自html页面的编辑数据被替换为数据库中的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788856/