この問題は断続的であるため、私には非常に奇妙に思えます。詳しく書いていきますので、よろしくお願いします。
http://redactorjs.comを使用して wysiwyg エディターにしたテキストエリアがあります。
クリックして編集する機能 (http://redactorjs.com/docs/examples/click-to-edit/) を使用し、ajax 投稿でデータを保存しています。
mysql データベース フィールドは「Info」と呼ばれ、タイプ「blob」に設定されています。
ここで、次のテキストをテキストエリアに入力して保存を押すと、おそらく問題なく保存されます。
「こんにちは、私の名前はグレッグです。私は非常に優れた俳優です。私はかつて料理コンテストで 2 位になった料理愛好家でもあります。」
次に、編集をクリックして追加すると
「こんにちは、私の名前はグレッグです。私は非常に優れた俳優です。私はかつて料理コンテストで 2 位になった料理愛好家でもあります。また、木曜日の朝に泳ぐのも好きです!」
以下のようなものだけがデータベースに保存されることがあります。
「こんにちは、私の名前はグレッグです。私は非常に優れた俳優です。また、かつて来た料理愛好家でもあります」
次に、もう一度編集して同じテキストを追加して再度保存すると、正常に保存されます!?!?
いくつかのコードをお見せしましょう..
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");
}
DB に投稿されたデータが断続的に切り捨てられる理由を思いつきますか?
アップデート:
確実に再現する方法を見つけました。私が言ったように、それは wysiwyg エディターです。
「こんにちは、私の名前はグレッグです。私は非常に優れた俳優です。私はかつて料理コンテストで 2 位になった料理愛好家でもあります。」
たとえば、競争を強調表示してハイパーリンク ボタンをクリックし、Google にリンクするとします。Saveを押すと以下が挿入されます。
「こんにちは、私の名前はグレッグです。私は非常に優れた俳優です。私はかつて料理で 2 位になった料理愛好家でもあります」
私は編集しました
<?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 タグと関係がありますか?
更新2
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 :) <a href="goggle" target="">link</a> </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 で受け取ります
どうすればこれを修正できますか?