这是我在Stack Overflow上发表的第一篇文章。我已经对此进行了很好的尝试并且很好地寻找答案,但无济于事。所以这里:
我已经为编码练习制作了一个基本的消息传递应用程序。显然,我希望它从xss安全,所以使用了" HTMLspecialchars"。
问题: 只要没有人在消息中放入撇号,该应用程序就可以正常工作。所以消息"让我们去吧#34;抛出错误:
让我们走吧错误:插入聊天(消息)值('你好,让我们去吧#39;) 您的SQL语法有错误;查看与您的> MariaDB服务器版本对应的手册,以获得正确的语法,以便使用附近的')'在第2行
这是我输入和发送到mysql的代码:
<!DOCTYPE html>
<!-- input -->
<html>
<body>
<?php
// define variables and set to empty values
$name = $msg = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$msg = test_input($_POST["msg"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Messaging Appq</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value ="<?php echo htmlspecialchars($_POST['name']); ?> ">
<br><br>
Message: <textarea name="msg" rows="5" cols="40"></textarea>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<!-- enter on DB -->
<?php
$servername = "localhost";
$username = "*********";
$password = "*********";
$dbname = "***********";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$name=$_POST['name'];
$msg=$_POST['msg'];
$bothd = $name . $msg;
$sql = "INSERT INTO chat (msg)
VALUES ('$bothd')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully<br><br>";
} else {
echo "Error:" . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
所以,我知道我需要使用&#34; ent_quotes&#34;。但它应该去哪里?我看到正常的语法是
<?php echo htmlspecialchars($str, ENT_QUOTES); ?>
我试过把&#34; ent_quotes&#34;在以下位置,显然不是所有的同时:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES);?>">
Name: <input type="text" name="name" value ="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES); ?> ">
<br><br>
Message: <textarea name="msg" rows="5" cols="40" value ="<?php echo htmlspecialchars($msg, ENT_QUOTES); ?>"></textarea>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
我也尝试将其添加到函数中:
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data, ENT_QUOTES);
return $data;
}
道歉,如果我遗漏了一些明显的东西!我对此比较陌生!
答案 0 :(得分:-3)
SELECT 'A ''quoted'' word.' AS text FROM DUAL;
TEXT
A&#39;引用&#39;字。
您必须编辑查询字符串并将另一个'
添加到字符串