我创建了一个表单,将数据插入MySQL数据库。这是表单字段,它们是<form>
的一部分但是,我没有在这里显示整个表单,只是创建问题的字段。
<tr> <td>Top 728x90 As</td><td><textarea name='topad'><?=$r['topad']?></textarea></td</tr>
<tr> <td>Sidebar 250x250 Ad</td><td><textarea name='sidebarad'><?=$r['sidebarad']?></textarea></td></tr>
这部分代码处理输入并将其插入数据库。
if(isset($_POST['submit'])) {
$topad = $_POST['topad'];
$sidebarad = $_POST['sidebarad'];
$update = $connection->prepare("UPDATE site SET topad = '$topad' , sidebarad = '$sidebarad' WHERE id=1");
$update->execute(array());
}
此代码的问题是,它不接受/处理涉及<a href="#">
&amp;的数据部分。 </a>
代码。这不是关于转义HTML字符,因为所有其他HTML标记(如<img>
等)都按原样显示,这就是我想要的。
因此,每当我插入<a>
标签时,它就会消失,既不会插入数据库,也不会在按下提交按钮后显示在表单中。
更新:使用双引号插入链接时,它会被接受。如果我使用单引号,则不会处理。例如。数据库中将接受<a href="someurl">
,而<a href='someurl'>
则不会。
为什么会发生此错误?
答案 0 :(得分:1)
原因是因为您使用的是预准备语句,但未对参数化值进行参数化。请尝试以下,
$topad = $_POST['topad'];
$sidebarad = $_POST['sidebarad'];
$update = $connection->prepare("UPDATE site SET topad = :topad , sidebarad = :sidebarad WHERE id=1");
$update->execute(array(':topad' => $topad, ':sidebarad' => $sidebarad));