1

PHP ページに送信してデータベースに保存するときに、tinyMCE ボックスから完全な HTML コードを取得する際に問題が発生しているようです。

私のAjaxコードはこれです:

console.log('type=' + theType + '&rID=' + theReplyID + '&email=' + $('#email').val() + '&name=' + $('#name').val() + '&fb=' + FB + '&com=' + tinyMCE.activeEditor.getContent());
    $.ajax({
        type: "post",
        url: "post.php",
        cache: false,
        data: 'type=' + theType + '&rID=' + theReplyID + '&email=' + $('#email').val() + '&name=' + $('#name').val() + '&fb=' + FB + '&com=' + tinyMCE.activeEditor.getContent(),
        success: function(data,status){         
            showMsgBox('Your comment has been posted!','OK','blue');
        },
        error: function(xhr, desc, err){
            showMsgBox('Error while saving comment data','OK','red');
        }
    }); 

console.logは正しいテスト データを出力します。

type=C&rID=&email=test@here.com&name=david dev&fb=na&com=<p>this is just a test&nbsp;    </p>
<p>here&nbsp;</p>
<p>and here</p> 

しかし、データベースに保存すると、次のものしかありません。

<p>this is just a test

私のPHPページは次のようになります。

<?PHP
   $type = $_POST['type']; //R(reply) or C(comment)
   $email = $_POST['email'];
   $name = $_POST['name'];
   $fb = $_POST['fb'];
   $comment = $_POST['com'];

    $dbhandle = mysql_connect("xx.xxx.xxx.xxx", "xxxxx", "xxxxx") or die(mysql_error());
mysql_select_db("Gvth") or die(mysql_error());

$result = mysql_query("SELECT * FROM UserInfo WHERE Email = '" . $email . "'");  
$count = 0;

while($row = mysql_fetch_assoc($result)) {
    $count++;       
    $id = $row["id"];
}

mysql_close($dbhandle);

   $dbhandle = mysql_connect("xx.xxx.xxx.xxx", "xxxxx", "xxxxx") or die(mysql_error());
    mysql_select_db("Gvth") or die(mysql_error());

    $result = mysql_query("INSERT INTO UserComments (UserInfoID,Comment,ImageUploaded,commentID,accepted,dt) 
    VALUES (" . $id . ",'" . $comment . "','na'," . $id . random_numbers(4) . ",1,'" . date('Y-m-d g:i:s',time()) . "');");
    mysql_close($dbhandle);
4

2 に答える 2

1

手動でクエリ文字列を作成する場合 (これはお勧めしません)、& などのすべての特殊文字が URL エンコードされていることを確認する必要があります。でこれを行うことができますencodeURIComponent

だから変えてください

data: 'type=' + theType + '&rID=' + theReplyID + '&email=' + $('#email').val() + '&name=' + $('#name').val() + '&fb=' + FB + '&com=' + tinyMCE.activeEditor.getContent(),

 data: 'type=' + theType + '&rID=' + theReplyID + '&email=' + $('#email').val() + '&name=' + $('#name').val() + '&fb=' + FB + '&com=' + encodeURIComponent(tinyMCE.activeEditor.getContent()),

jQuery ポストでデータを渡すさらに優れた方法は、クエリ文字列の代わりにオブジェクトをデータに渡すことです。そのようです:

data: {type: theType, rID: theReplyID, email: $('#email').val(), name: $('#name').val(), com: tinyMCE.activeEditor.getContent() },

これにより、特殊文字をエスケープする必要がなくなります。

また、サーバー側 (PHP スクリプト内) では、mysql_real_escape_string()Miguelo が言及したように、ユーザーが投稿したデータをデータベースに挿入する前に、常にエスケープする必要があります。

于 2013-04-08T19:42:53.390 に答える