如何使用PHP将URL插入到MySQL数据库中?

3
我有一个表单,可以将信息提交到数据库中。表单包括三个输入 - 名称、描述和URL。这三个输入都可以正常工作并将数据提交到数据库中,但是如果输入的文本包含了“http://”,那么URL输入框就无法正常工作。我需要它包含“http://”。
目前,如果我提交不带“http://”的表单,则可以顺利进行,但是如果加上“http://”则会出现406不可接受的错误。
我已经阅读了一些关于“mysqli_real_escape_string”的文章,但是没有找到正确使用它的方法。目前我所拥有的代码如下:
$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$code_name = filter_var($_POST['code_name'], FILTER_SANITIZE_STRING);
$code_desc = filter_var($_POST['code_desc'], FILTER_SANITIZE_STRING);
$code_dest = filter_var($_POST['code_dest'], FILTER_SANITIZE_STRING);

$stmt = $dbh->prepare("INSERT INTO qr_codes (code_name, code_desc, code_dest ) VALUES (:code_name, :code_desc, :code_dest )");

$stmt->bindParam(':code_name', $code_name, PDO::PARAM_STR);
$stmt->bindParam(':code_desc', $code_desc, PDO::PARAM_STR, 40);
$stmt->bindParam(':code_dest', $code_dest, PDO::PARAM_STR, 40);

$stmt->execute();

这是表单:

<form id="newQR" method="post" action="create-qr-code.php" onSubmit="return validateForm();">
    <ul class="new-qr-form">
        <li><label>Name</label><br><input id="code_name" name="code_name" type="text" class="form-control" ></li>
        <li><label>Description</label><br><input id="code_desc" name="code_desc" type="text" class="form-control" ></li>
        <li><label>Destination</label><br><input id="code_dest" name="code_dest" type="text" class="form-control" ></li>
        <li class="img-src-preview"><label>Preview Source</label><br><input value="test" id="code_img_src" name="code_img_src" type="text" class="form-control" ></li>
    </ul>
</form>

有什么想法,为什么它不允许URL?


2
你在表单中使用GET方法吗?你能否发布你的表单或者如何提交数据到它?你正在使用PDO,所以你不需要使用mysqli_real_escape_string,而且这是一个完全不同的库,因为你正在使用PDO而不是MySQLi。你已经在你的示例代码中使用了预处理语句,这非常好。 - Prix
这个URL字段使用的数据类型是什么,MySQL版本是多少? - Ataboy Josef
2
"406 Not Acceptable"?听起来像是底层的Web服务器会产生的问题,而不是PHP和/或MySQL的问题。 - deceze
1
谢谢,我很感激。这种情况需要什么样的重写规则? - Tom Nolan
2
所以,我和我的托管提供商交谈了,这是他们的回复:我查看了正在生成的错误。它们正在生成,因为服务器检测到潜在的远程文件注入。您需要审查代码,并可能需要修改其功能方式。我们无法绕过那种类型的错误。对于重写规则或如何修改上述代码使其正常运行有什么建议吗? - Tom Nolan
显示剩余12条评论
2个回答

0
$url= filter_var($_POST['url'], FILTER_SANITIZE_URL);

使用FILTER_SANITIZE_URL常量来处理您的URL


0
一个简单的解决方法是在validateForm()中删除http:// onSubmit。或者你可以以某种方式对其进行编码,例如使用encodeURIComponent()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接