Php 如何使用TinyMCE、jQuery和PDO提交HTML表单?(完整代码)

Php 如何使用TinyMCE、jQuery和PDO提交HTML表单?(完整代码),php,pdo,Php,Pdo,$\u POST['reply']变量包含类似文本的html标记,但我无法将其插入数据库。对于回复我使用TinyMCE,当我不使用它时(输入为无标记),如文本出现在此处,则正确插入 我错过了什么 try { $db = new PDO(DB_DRIVER . ":dbname=" . DB_DATABASE . ";host=" . DB_SERVER, DB_USER, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET

$\u POST['reply']
变量包含类似
文本的html标记,但我无法将其插入数据库。对于
回复
我使用TinyMCE,当我不使用它时(输入为无标记),如
文本出现在此处
,则正确插入

我错过了什么

try {
    $db = new PDO(DB_DRIVER . ":dbname=" . DB_DATABASE . ";host=" . DB_SERVER, DB_USER, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $db->prepare("INSERT INTO replies(article_id, comment) VALUES (:article_id, :comment)");

    $stmt->bindParam(':article_id', $article_id, PDO::PARAM_INT);
    $stmt->bindParam(':comment', $_POST['reply'], PDO::PARAM_STR);


    if($stmt->execute()) {
      echo 'success';  
    }

    $db = null;
} catch(PDOException $e) {
    trigger_error('Error occured while trying to insert into the DB:' . $e->getMessage(), E_USER_ERROR);
}
这是表单代码:

<form class="comment-form">
    <div class="form-input">
        <input type="hidden" name="post_id" value="<?= $row['id']; ?>" />
    </div>

    <div class="form-input">
        <textarea name="reply" id="elm1" rows="8"  placeholder="Your comment here" ></textarea>
    </div>

    <div class="form-input">
        <input type="Submit" class="btn btn-primary" id="submit" value="SEND" />
    </div>
</form>

<script type="text/javascript">
    $(function(){
        $(".comment-form").submit(function(event){
            event.preventDefault();
            $("#results")
                .show();

            $.post('add-it.php', $(".comment-form").serialize(), function(data) {
                $('#submit')
                    .hide();
                $('#results')
                    .html(data)
                    .fadeIn('slow');
            });
        });
    });
</script>

你可以用

$pdo->bindValue(':comment', $_POST['reply'], PDO::PARAM_STR);
这应该插入html代码,而不是
bindParam

您应该将post设置为表单的方法

<form action="#" method="post" class="comment-form">
</form>


函数在TinyMCE中,否则您的post变量为空。

因为您使用AJAX,所以需要手动触发TinyMCE中的保存函数。这需要在你发出请求之前完成

 $("#results").show();
     tinyMCE.triggerSave(); // <--- Add this here
    $.post('add-it.php'....
$(“#结果”).show();

tinyMCE.triggerSave();// 我认为您的问题在于TinyMCE不会自动将其更改绑定到textarea。您需要在提交处理程序中调用
tinyMCE.triggerSave()
。看

我附上了一个完整的代码样本,我可以确认工程


我已经获取了您的代码并对其进行了大量的处理,我想我已经能够为您排序了希望,我已经更改了手动添加数据的
$(“.comment form”).serialize()
。我还添加了
tinymce.get('elm1').getContent()
,因为这将检索tinymce文本区域内的数据

<script type="text/javascript">
    $(function(){
        $(".comment-form").submit(function(event){
            event.preventDefault();
            $("#results")
                .show();

            $.post('add-it.php', {
                post_id: $( '.post_id' ).val(),
                reply: tinymce.get('elm1').getContent()
            }, function(data) {
                $('#submit')
                    .hide();
                $('#results')
                    .html(data)
                    .fadeIn('slow');
            });
        });
    });
</script>

$(函数(){
$(“.comment form”).submit(函数(事件){
event.preventDefault();
$(“结果”)
.show();
$.post('add-it.php'{
post_id:$('.post_id').val(),
回复:tinymce.get('elm1').getContent()
},函数(数据){
$(“#提交”)
.hide();
$(“#结果”)
.html(数据)
.fadeIn(“慢”);
});
});
});

我认为这个问题提供了一个解决方案。尝试使用一个简单的文本区域,检查html是否正确发布并保存到数据库中。这样,如果这是服务器端或客户端的故障,您将获得另一条线索。还可以尝试此操作来检查序列化输出

textarea_value -> <p>do this do that</p>
serialized_value -> %3Cp%3Edo+this+do+that%3C%2Fp%3E
textarea\u value->做这个做那个

序列化的_值->%3Cp%3Edo+this+do+that%3C%2Fp%3E

jQuery serialize是url编码输出,因此请检查是否与该部分的tinymce设置冲突。此外,如果mod_security给您带来了问题,您可以尝试在发布之前使用javascript对textarea值进行base64编码,并对服务器端进行base64解码,以恢复您的实际值。对于base64和javascript,请检查这一点,如果您使用utf8,这是一个很好的示例。

只要它是一个字符串,它将inserted@Ghost它是这种格式的文本,但没有插入。我尝试过不使用html标记,但它被保存了。您使用的是什么PHP版本?这只是一根线,它应该能正常工作fine@Ghost我使用的是5.3请添加完整的代码(从连接->查询执行),并在问题中添加一个输入示例。我尝试过,但没有发生任何变化
textarea_value -> <p>do this do that</p>
serialized_value -> %3Cp%3Edo+this+do+that%3C%2Fp%3E