【问题标题】:String with special chars from Ajax POST to DB insert带有特殊字符的字符串从 Ajax POST 到 DB 插入
【发布时间】:2016-01-17 05:54:13
【问题描述】:

我有一个带有一些文本输入的表单,然后我有一个 ajax 事件通过 POST 将此值发送到我的数据库 php 脚本,问题是我不知道如何从我的 ajax 事件发送特殊字符,如果字符串有 ' " \ 或类似字符,它不会将数据插入我的数据库,但如果字符串只包含数字/字母且没有特殊字符...我可以毫无问题地插入数据。

Ajax 事件

$$("#message").click(function(e) {
                var nick_ = window.localStorage.getItem("username");
                var message_ = $.trim(($("#msgtext").val()).replace(/(\r\n|\n|\r)/gm,""));

                if (message_ .length>0 && message_ .length<=500) 

                 $.ajax({type: "POST", 
                        url: "insert.php",
                        data: ({nick: nick_, mensaje: message_ }),
                      cache: false,
                      dataType: "json",
                      success: function(data) {
                  if(data.status == 'success'){
                       $('input[type=text], textarea').val('');   
                   } 
                }});

                else myApp.alert('Min:1 Max:500','Chars:');             

            }); 

这是我的数据库脚本

<?php

//jSON
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
//Connect to DB
include('con.php');

//POST vars
$nick=htmlspecialchars(trim($_POST['nick']));
$message=htmlspecialchars(trim($_POST['mensaje']));
$date=date("Y-m-d H:i:s");
//DB insert
$mysqli->real_query("INSERT INTO messages VALUES ('0','$nick','$message','$date')");

if ($mysqli) $response_array['status'] = 'success';
       else              
             $response_array['status'] = 'error';

    echo json_encode($response_array);

?>

【问题讨论】:

  • 你是说如果你的 POST 有 `' " `,它不会把它添加到数据库中?

标签: javascript php mysql json ajax


【解决方案1】:

在使用 ajax 发送数据 ({nick: nick_, mensaje: message_ }) 之前,您可以使用以下方法进行验证:

function isValid(data){
   for (i in data){
      if(!data[i].match(/^[a-zA-Z0-9]*$/))
         return false;
   }
   return true;
}

像这样使用它:

isValid({nick: nick_, mensaje: message_ })

如果数据是字母或字符,这将返回 true,否则返回 false。

此外,您不应依赖任何客户端脚本进行此类验证。

【讨论】:

  • 问题是如果字符串有特殊字符,例如'|,我不能将我的字符串发送到我的php脚本。 \
【解决方案2】:

问题出在您的 php 脚本中。试试这个

  $v = trim($_POST['mensaje']);
  $message = htmlspecialchars($conn->escape_string($v));

我所做的只是逃避帖子的价值。

您检查查询是否成功的方式也应该改变。您正在检查 conn 对象,而不是从 $conn->real_query () 捕获返回布尔值,这应该为您提供查询处理的真实结果(真假)。

    $result = $conn->real_query("........);

    if ($result){
        //do something
    }else{
       echo $conn->error;
    }

【讨论】:

    【解决方案3】:

    如果你有一个表单,你可以试试 data:$(this).serializeArray() 转义这些字符

    您可以使用我推荐的类似 tinyMCE 的编辑器。

    【讨论】:

      猜你喜欢
      • 2017-05-05
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2020-07-12
      • 2015-02-25
      相关资源
      最近更新 更多