2012-09-03 73 views
1

這個問題對我來說似乎很奇怪,因爲它是間歇性的。我會詳細的,所以請耐心等待。當插入到mysql時丟失發佈數據

我有它被做成一個所見即所得的編輯器http://redactorjs.com

我使用的點擊編輯功能(http://redactorjs.com/docs/examples/click-to-edit/一個textarea )並用ajax文章保存數據。

mysql數據庫字段被稱爲'信息'並被設置爲鍵入'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> 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"); 
} 

你能想到的一個原因,張貼在數據庫中的數據被截斷間歇?

UPDATE:

我已經找到一種方法來可靠地重現它。 就像我說的它是一個wysiwyg編輯器。

「你好我的名字是格雷格,我是一個非常好的演員,我也是一個烹飪愛好者,曾經在烹飪比賽中獲得第二名。「

如果我想強調競爭和單擊超鏈接按鈕,並將其鏈接到谷歌的例子。按保存及以下插入。

」你好,我的名字是格雷格和我是一個很不錯的演員。我也曾經誰排在烹飪」

第二烹飪愛好者我已經編輯

<?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

收到我該如何解決這一問題?

+3

你確定你保存數據不低於最大尺寸列可以包含更大? – Leri

+0

數據是否在Php中被截斷? –

+0

@PLB「然後,如果再次編輯並重新添加相同的文本並保存,則它會成功保存」 –

回答

1

在POST

發送之前逃離後數據
var html = escape($('#info').getCode()); 
+0

更新後其無法讀取 –

+1

也許試試var html = escape($('#info')。引用代碼()); – Mike

+0

哦,只是這樣做之前,我看到您的評論,請更新您的答案接受:)乾杯 –