1

最近、MySQLテーブルから取得した情報を一覧表示してさまざまな種類で表示する基本的なPHPWebページをまとめました。ユーザーがテーブルに新しいアイテムを追加し、リスト内のアイテムを編集し、ページを更新せずにリスト内のアイテムを削除できるようにしたい(Ajax)。

これは現在進行中です。

  • 記事を追加/編集するには、ポップオーバーajaxフォームを表示するリンクをクリックし、以下のように関数setEdit(comment)を実行して、その内容を入力します(編集している場合)。
  •    <a class="popup-button" title="<?php echo $row['comment']; ?>" onclick="setEdit('<?php if($row['comment']){ echo $row['comment']; } else { echo "Enter comment here..."; } ?>');"><?php echo $row['listitem']; ?></a>
    

  • setEdit()コメントは次のとおりです。
  • function setEdit(editcomment)
    {
          if(editcomment){ document.getElementById('help-us-comment').value=editcomment; }
    }
    

  • これは、ajaxフォームを送信した後、次のphpコードで処理されます。
  •  if(isset($_POST['comment_text']))
        $comment=$_POST['comment_text'];
    
        $sql = "INSERT INTO table SET
        comment='$comment'";
    

    問題:新しい行、一重引用符、または二重引用符で倒れることなく、データベースの内容を1、2、3で取得しようとすると常に問題が発生します。タグ、htmlspecialchars、nl2brを置き換えることの無限の組み合わせを試しましたが、半分の成功はありませんでした-非常に複雑でエンコード/デコードされたので、はるかに単純で明白な方法があると思いますm行方不明。

    主な問題は、データをフォームに読み込もうとしたときに発生します。通常、フォームがフォールオーバーしてデータの入力をまったく拒否するか(通常、抽出されたデータによってリンクが壊れること、つまり一重引用符または改行によって)、またはフォームが編集するプレーンテキストの代わりに特殊文字が入力されます。

    できる限り詳しく説明するように努めましたが、さらに必要な場合は喜んで提供させていただきます。また、これが明らかな修正/間違いであり、私がばかであることをお詫びします。

    4

    1 に答える 1

    0

    ここには2つの問題があります。保存と表示です。

    表示するにはhtmlentities、文字列がプレーンテキストまたは入力値として安全に表示されるように、安全なHTML(すべての引用符の置換、HTMLエンコードなど)を確認する必要があります。

    データを保存するには、クエリをサニタイズする必要があります。パラメータを使用mysqliしてバインドするか、を使用mysql_real_escape_stringして入力を手動でエスケープできます。

    それ以外の場合は、Bobby Tablesに挨拶してください;)

    于 2012-07-11T13:14:49.660 に答える