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