javascript - "+"js中的字符回显来自html页面的编辑数据被替换为数据库中的空白

标签 javascript php jquery html mysql

我正在构建一个网页,其中包含与 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/

相关文章:

javascript - Debowerify 无法与 Grunt 一起使用

javascript - 为什么在滚动元素中使用 offset().top 和 scrollTop() 时我的尺寸没有按预期返回?

php - 从 php 执行 python

java - PHP - 如何将字节数组转换为图像文件?

javascript - Wordpress:通过 ajax 获取条款

javascript - 如何从Angular7调用JavaScript的函数表达式

javascript - 如何更换当前的 Angular 转发器

php - 如何使用mysql和php进行排名

javascript - Jquery UI 自动完成输入 - 如何检查更改时输入是否为空?

javascript - 使用 jQuery 循环 ID 并使它们可删除