我有一个带有一些文本输入的表单,然后我有一个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);
?>
答案 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的编辑器。