我在HTML网页上有一个表单,它将用户的注释和名称发送到MySQL数据库表,然后将其存储在页面中。问题是,如果用户的名字中有撇号,那么服务器(我支付托管费用,不是我的服务器而我无法更改配置)就是将它们发送到一个错误页面,上面写着:
“请求的网址已被拒绝。如果您认为这是一个错误,请与网站管理员联系。 您的支持ID是:13509873612934211694“
更新
我刚刚使用不同的php格式完全重写了该页面。现在撇号问题和服务器错误是固定的。但是,页面在每次加载页面时都会向数据库发送空白条目。有什么想法吗?
<?php
$servername = "my_server";
$username = "my_username";
$password = "my_password";
$dbname = "my_database";
$users_name = htmlentities($_POST['name'], ENT_QUOTES, 'UTF-8');
$users_request = $_POST['requests'];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
}
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
$conn->exec("INSERT INTO submissions (requests, name)
VALUES ('$users_request', '$users_name')");
$conn->commit();
header("Location: clv3.php");
}
catch(PDOException $e)
{
$conn->rollback();
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
<form method="POST" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Make A Request:<br>
<textarea name='requests' id='requests'></textarea> <br>
Your Name (a-z only):<br>
<input type='text' name='name' id='name'/><br>
<input type='submit' value='Send' class='button'>
</form>
答案 0 :(得分:-1)
有没有听说过SQL注入?这是你创造的......
始终逃避您的数据!您现在正在将用户提供的数据直接推送到数据库中。
$name = mysqli_real_escape_string($conn, $_POST['name']);
$comments = mysqli_real_escape_string($conn, $_POST['comments']);
此外,您可以在插入前编码特殊字符,在显示时进行解码
答案 1 :(得分:-1)
您是否尝试过:
encodeURI(yourString)
然后在php端你做:
url_decode($_POST['myVariable'])