HTML textarea中的撇号导致PHP错误

时间:2017-06-25 14:14:16

标签: php html forms htmlspecialchars

这是我在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;
    }

道歉,如果我遗漏了一些明显的东西!我对此比较陌生!

1 个答案:

答案 0 :(得分:-3)

SELECT 'A ''quoted'' word.' AS text FROM DUAL;

TEXT

A&#39;引用&#39;字。

您必须编辑查询字符串并将另一个'添加到字符串