我有一个带有一些文本输入的表单,然后我有一个 ajax 事件通过 POST 将此值发送到我的数据库 php 脚本,问题是我不知道如何从我的 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);
?>
在 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 脚本中。试试这个
$v = trim($_POST['mensaje']);
$message = htmlspecialchars($conn->escape_string($v));
我所做的只是转义帖子值。
此外,您检查查询是否成功的方式也应该改变。 您正在检查 conn 对象,而不是从 $conn->real_query () 中捕获返回布尔值,该值应该为您提供查询处理的实际结果(True of false)。
$result = $conn->real_query("........);
if ($result){
//do something
}else{
echo $conn->error;
}
如果你有一个表单,你可以尝试data:$(this).serializeArray()
转义这些字符
或
您可以使用我推荐的编辑器,例如tinyMCE。