我现在大部分时间都在处理数据库插入问题,所以现在是时候寻求帮助了。
我的网站上有一个评论表单,通过ajax提交和处理,10次中有9次表示完美无缺,但我注意到当你输入&
字符时,它会过早地结束字符串但是仍然在该字符之前将字符串插入数据库!
在我的评论部分中,我允许在页面上显示时发布和突出显示代码片段,因此在任何已发布的片段中都需要&
字符进行比较。
我正在使用MySQLi类,转义函数只是一个基本的real_escape,而mynl2br只是一个自定义的nl2br函数,这是将注释数据插入数据库的代码:
$name = $db->escape($_POST['name']);
$email = $db->escape($_POST['email']);
$url = $db->escape($_POST['web']);
$comment = $db->escape(mynl2br($_POST['comments']));
$script_id = $db->escape($_POST['script_id']);
$insertData = array(
'`author`' => ''.$name.'',
'`email`' => ''.$email.'',
'`url`' => ''.$url.'',
'`comment`' => ''.$comment.'',
'`script_id`' => ''.$script_id.'',
'`time`' => ''.time().''
);
if ($db->insert('script_comments', $insertData)) {
// sent success response back
exit;
}
任何人都可以理解为什么&字符是否过早地结束了注释字符串?
答案 0 :(得分:2)
您的Ajax请求是通过GET请求(应该是POST)发送数据,并且数据未在javascript端使用encodeURIComponent()
正确转义。到目前为止,您的PHP脚本看起来很不错。