0

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="#"></a>コードを含むデータの一部を受け入れ/処理していないことです。これは、HTML文字をエスケープすることではありません。これは<img>、などの他のすべてのHTMLタグがそのまま表示されるためです。これは、私が望んでいることです。

したがって、挿入して<a>タグを付けると、データベースに挿入されたり、送信ボタンを押した後にフォームに表示されたりすることなく、消えてしまいます。

更新:リンクが二重引用符を使用して挿入されると、受け入れられます。一重引用符を使用すると、処理されません。たとえば<a href="someurl">、DBで受け入れられますが、受け入れられ<a href='someurl'>ません。

なぜこのエラーが発生するのですか?

4

1 に答える 1

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));
于 2012-12-27T11:21:24.100 に答える