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 post 传递数据的更好方法是将对象传递给数据而不是查询字符串。像这样:

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 回答
0

您可以为所有要使用的表单数据添加一个类。.formdata 之类的东西

然后,您可以代替写出的对象执行此操作:

$('.formdata').serialize();

这将为您创建对象。

至于使用 tinyMCE,我在尝试保存数据之前曾经使用过它。

tinyMCE.triggerSave();
于 2013-07-16T03:03:51.210 回答