我正在构建一个网页,该网页具有与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参数中将A 作为空间处理。您需要在发送之前将其作为URL编码为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。
@gertg建议的URL编码解码是方式。
在JavaScript中,
data:'column='+column+'&value='+encodeURIComponent(editableObj.innerHTML)+'&id='+id+'&uid='+uid,
在PHP中,
$sql = "UPDATE coin_location set ".$_REQUEST["column"]."='".rawurldecode($_REQUEST["value"])."' WHERE coin_id='".$_REQUEST["id"]."' AND userId='".$_REQUEST["uid"]."'";
使用rawurldecode($str)
代替urldecode($str)
解决问题!