插入mysql时丢失帖子数据

时间:2012-09-03 14:22:29

标签: php jquery wysiwyg

这个问题对我来说似乎很奇怪,因为它是断断续续的。我会详细说明,请耐心等待。

我有一个textarea,用http://redactorjs.com

制作一个所见即所得的编辑器

我正在使用点击编辑功能(http://redactorjs.com/docs/examples/click-to-edit/)并使用ajax帖子保存数据。

mysql数据库字段名为'Info',设置为'blob'。

现在,如果我在textarea中输入以下文字并按保存,它可能会存储得很好。

“你好我的名字是格雷格,我是一个非常好的演员。 我也是烹饪爱好者,曾经在烹饪比赛中获得第二名。“

然后,如果我点击编辑并添加到它

“你好我的名字是格雷格,我是一个非常好的演员。 我也是烹饪爱好者,曾经在烹饪比赛中获得第二名。我也喜欢在星期四早上游泳!“

我有时会看到只有类似下面的内容才会保存到数据库中。

“你好我的名字是格雷格,我是一个非常好的演员。 我也是一位曾经来过“

的烹饪爱好者

然后,如果再次编辑并重新添加相同的文本并再次保存,则会成功保存!?!?

让我给你看一些代码..

view.php

回显信息数据

<script>
function ClickToEditInfo()
{ 
    var info =  ['formatting', '|', 'bold', 'italic', 'deleted', '|',
                    'unorderedlist', 'orderedlist', 'outdent', 'indent', '|',
                    'table', 'link', '|',
                    'fontcolor', 'backcolor', '|', 
                    'alignleft', 'aligncenter', 'alignright', 'justify', '|',
                    'horizontalrule']
    $('#info').redactor({ 
            focus: true,
            buttons: info,
            wym: true,
            fixed: true
    }); 
}

function ClickToSaveInfo()
{
    var html = $('#info').getCode();
    var item = <?php echo $item_id; ?>;

    $.ajax({
            type: 'POST',
            url: "ajax/clickToEditInfo.php",
            data: "item_id="+item+"&html="+html,
            error: function(xhr, status, error) {
                console.log(error);
            },
            beforeSend: function() {
                $("#ajax").show();
                $("#ajax").html('<span class="label label-info">Saving info.. please wait</span>');
            },
            success: function(html){
                console.log(html);
                $("#ajax").html('<span class="label label-success">Saved!</span>');
                $("#ajax").fadeOut(1000, function () {
                    $(this).hide();
                });
            }
    });

    $('#info').destroyEditor(); 
}
<?php 
    endif; // end check if user owns item
}
?>
</script>

        <div id="info">
            <?php echo $item->getMainField('info', $item_id); ?>
        </div>  

clickToEditInfo.php

<?php 
include_once('../classes/item.class.php');
if (!isset($_SESSION)) session_start();

$item_id = $_POST["item_id"];
$html = $_POST["html"];
$user_id = $_SESSION['jigowatt']['user_id'];

if( $item->checkUserOwns($user_id, $item_id) ) : //check user owns item

    $item->clickToEditInfo($user_id, $item_id, $html);

else : // user does not own it
    return false;
endif; // end check if user owns item
?>

item.class.php&gt; clickToEditInfo

public function clickToEditInfo($user_id, $item_id, $html) {
    $stmt = parent::query("UPDATE `item_main` SET `info` = '$html' WHERE `item_id` = $item_id AND `user_id` = $user_id");
}

您能想到DB中发布的数据被间歇性截断的原因吗?

更新

我找到了一种可靠地重现它的方法。 就像我说它是一个所见即所得的编辑。

“你好,我的名字是greg,我是一个非常好的演员。我也是烹饪爱好者,曾经在烹饪比赛中获得第二名。”

如果我突出竞争并点击超链接按钮并将其链接到谷歌例如。按保存,然后插入以下内容。

“你好,我的名字是greg,我是一个非常好的演员。我也是烹饪爱好者,曾经在烹饪中排名第二”

我已编辑

<?php 
include_once('../classes/item.class.php');
if (!isset($_SESSION)) session_start();

$item_id = $_POST["item_id"];
$html = $_POST["html"];
$user_id = $_SESSION['jigowatt']['user_id'];

if( $item->checkUserOwns($user_id, $item_id) ) : //check user owns item

    $item->clickToEditInfo($user_id, $item_id, $html);

    **echo $html;**

else : // user does not own it
    return false;
endif; // end check if user owns item
?>

并且console.log(html)正在显示

<p>Hello my name is greg and i am a very good actor. I am also a cooking enthusiast who once came 2nd in a cooking

所以它没有发布所有数据,与html标签有关吗?

UPDATE2

我已完成控制台登录 var html = $('#info')。getCode(); 并确认

<p>Hello my name is greg and i am a very good actor.</p><p>I am also a cooking enthusiast who once came 2nd place on Come dine with me :)&nbsp;<a href="goggle" target="">link</a>&nbsp;</p>

已发布,但仅

<p>Hello my name is greg and i am a very good actor.</p><p>I am also a cooking enthusiast who once came 2nd place on Come dine with me :) 

在clickToEditInfo.php

中收到

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在通过POST发送之前转义帖子数据

var html = escape($('#info').getCode()); 

答案 1 :(得分:0)

在我发布之前,我可能已经使用html上的escape()修复了它。

http://www.w3schools.com/jsref/jsref_escape.asp

var html = $('#info').getCode();
    var item = <?php echo $item_id; ?>;
    var html = escape(html);