当我使用带撇号的文本时,查询不起作用。
示例:这是Ben的派对。
这是我使用的功能:
function text_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
这是html:
<textarea name="text" rows="20" cols="89"></textarea>
php脚本:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["text"])) {
$errors[] = "There is no text";
} else {
$text = text_input(mysqli_real_escape_string($con, $_POST['text']));
}
if(empty($errors) === true){
mysqli_query($con, "INSERT INTO texts (text) VALUES ('$text')");
exit();
}
答案 0 :(得分:2)
你需要在完成所有其他事情之后执行mysqli_real_escape_string
。否则,stripslashes将删除您刚刚使用转义添加的斜杠。
所以:
$text = mysqli_real_escape_string($con, text_input($_POST['text']));
答案 1 :(得分:0)
您使用stripslashes()
和htmlspecialchars()
表示存在很多混淆。
trim()
是您的代码中唯一属于text_input()
。 stripslashes()
。相反,您应该使用为特定任务定制的函数来转义输出。在文本输入上使用stripslashes()
只会在用户实际需要使用反斜杠时引起混淆。
htmlspecialchars()
应该是在生成html输出之前使用的最后一个函数。如果HTML转义所有内容,当您需要将数据库用于其他目的时,您将会遇到麻烦。我在地址中看到了大量带有HTML字符引用(&#xx;
)的物理邮件,甚至是手写的邮件!
mysqli_real_escape_string()
应该是MySQL查询之前使用的最后一个函数。
换句话说:
$text = trim ($_POST['text']);
$text_h = htmlspecialchars ($text);
$text_m = mysqli_real_escape_string ($con, $text);
...
mysqli_query ($con, "INSERT INTO texts (text) VALUES ($text_m)");
...
echo "<p>'$text_h' added to database.\n";