具有从Ajax POST到DB插入的特殊字符的字符串

时间:2016-01-17 05:54:13

标签: javascript php mysql json ajax

我有一个带有一些文本输入的表单,然后我有一个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);

?>

3 个答案:

答案 0 :(得分:0)

在ajax中发送数据($scope.para = function (event) { var elem = angular.element(event.target); elem.attr('style', "background-color:green") } )之前,您可以使用以下方法对其进行验证:

{nick: nick_, mensaje: message_ }

使用它像:

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

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

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

答案 1 :(得分:0)

问题在于你的php脚本。试试这个

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

我所做的就是逃避后期价值。

还应该更改您的查询是否成功的方式。你正在检查conn对象,而不是从$ conn-&gt; real_query()中捕获一个返回布尔值,它应该为你提供查询处理的真实结果(True为false)。

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

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

答案 2 :(得分:0)

如果您有表单,可以尝试使用data:$(this).serializeArray()来逃避这些字符

OR

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