dポイントプレゼントキャンペーン実施中!

現在、作成しているwebアプリの中(管理画面)に、リッチテキストエディタを自作して
表示しており、動作も問題ありません。

・使用言語:php, js

※ブログなどの記事編集できる管理画面を想像していただければ、
イメージしやすいと思います。

今回、お聞きしたいのは2点です。

1.編集した記事をMySQLに挿入するとカラムの値が0になってしまうこと。

例えば、エディタから記事のタイトル、記事本文を保存したい場合、
下のように書いています。(もちろん, $_POSTには値はしっかり入っています。)

$req = $db->prepare('insert into texts (title, edit_text) values (title = :title, edit_text = :edit_text)');
$req->execute(array(
':title' => ($_POST['title']),
':edit_text' => stripslashes($_POST['mytext'])
));

すると、テーブルtextsのtitle,edit_textにそれぞれ0が入ってしまいます。
ログをみても特に怪しいところもなく、エラーも出てないようなので全く理由が
わかりません。なぜなのか、ご教授いただけないでしょうか?


2. エディタで編集した記事の内容はどこに保存するべきなのでしょうか?

※こちらも、ブログ記事編集画面を想像していただければと思います。

1つのtextareaに装飾したテキストや画像もある場合、一気mysqlに
保存することは難しいと思っております。
また、仮に保存できたとしても、強調したテキストや下線の入ったテキストなどの形式まで
保存はできないですよね?

どのようにしたらよいのか全く解決策が見えませんので、ご教授いただけないでしょうか?
宜しくお願い申し上げます。

A 回答 (5件)

>このままで、問題なく表示はできるのですが、


>大丈夫でしょうか?

質問の意図がよくわからないのですが
考え方だけ・・・

まずもともとの質問、データを登録するときの問題は、どう保存してもよい
という回答でご理解いただいたでしょうか?
むしろそれを考慮してのプリペアード処理なのだと推測して回答したつもりです。

また今回の質問が信頼できないユーザーの投稿や、他人の書いた文書を取り込んで
そのまま表示させたときに問題があるか?という命題であれば、
閲覧者が意図していないページへ誘導されたりいろいろ問題です

仮に自分が書いたものもしくは自分の属するグループが書いたものであれば
セキュリティ面ではある程度リスクは低くなりますが、「強調したテキストや下線」
など意図したとおり見せることは少し難しいです
必ずしも情報提供者と同じ環境ではないユーザーが閲覧するため
ご自身で下線と思って表示したつもりでも相手の環境では網掛けになっているかも
しれません(もちろんそれを考慮していろいろデザインを工夫するのでしょうけど)

ご自身の見られる表示に近い形で他人にみせようとするなら、画像やpdfといった
環境に依存しにく手法をとることになります。
    • good
    • 0
この回答へのお礼

出張中のため、返信が遅れてしまいました。
ベストアンサーとさせていただきます。ありがとうございました。

お礼日時:2013/11/12 01:26

あ、0に化ける件は解決されていましたね。


失礼しました。
    • good
    • 0

1.


カラムの型がINTになっていたりはしませんか?一般的にはサイズ指定したVARCHARかTEXTを用います。

2.
装飾テキストや画像はどうやって埋め込んでいるのでしょうか?単にHTMLタグを使った装飾なら何の問題も無く保存できます。画像に関しては、画像のバイナリデータを格納できるテーブルも作っておけばいいんじゃないでしょうか。表示するときにだけ引っ張り出してきてテンポラリファイルを生成するなり、PHPファイルで直接画像を出力するなりすればいいと思います。


あと1つ気になったのですが、

stripslashes($_POST['mytext'])

このstripslashesって不要なのでは?
バックスラッシュが含まれていても問題なく処理できますよ。

PHPからデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>装飾テキストや画像はどうやって埋め込んでいるのでしょうか?

designMode= Onにして execCommandで埋め込んでます。
現在,mysql二保存されているソースは以下のようなイメージです。

このままでもよいのか、それともバイナリデータだけ
別にmysqlに保存したほうのがよいのか、パフォーマンスに
差がでないのならこのままでもよいかと思っているのですが、
実際、どうなんでしょうか?

以上、宜しくお願いします。

<font color="#0000ff">テストテスト</font><div><font color="#0000ff"><br></font></div><div>テストテスト</div><div><br></div><div>テストテスト<br><div></div><div><img src="./images/preview_hogehoge.jpg"></div>

お礼日時:2013/10/31 13:02

>htmlのソースごとmysqlに保存するのは、できたのですが、


>果たしてそのやり方でよいのでしょうか?

データはなるべく生に近い形で持った方がよいので、
特に変なエンコードを考えずにソースのあるがままとっておけばよいのでは?
運用ポリシーの問題なので好きにすればいいです

そこからキーワードを検索したいなどあるなら
全文検索など視野に入れてもよいかもしれませんが、思う以上に面倒です
    • good
    • 0
この回答へのお礼

mysqlに保存されているソースが下のようなイメージです。

<font color="#0000ff">テストテスト</font><div><font color="#0000ff"><br></font></div><div>テストテスト</div><div><br></div><div>テストテスト<br><div></div><div><img src="./images/preview_hogehoge.jpg"></div>

このままで、問題なく表示はできるのですが、
大丈夫でしょうか?

お礼日時:2013/10/31 13:05

的外れな回答かもしれませんが



>insert into texts (title, edit_text) values (title = :title, edit_text = :edit_text)

ってSQL文としておかしくないですか?
せめて、insert into texts (title, edit_text) values (:title, :edit_text) ではない?

この回答への補足

htmlのソースごとmysqlに保存するのは、できたのですが、
果たしてそのやり方でよいのでしょうか?

念のため、edit_textのデータ型をLONGTEXTにしているのですが、
他に方法はあるものなのでしょうか?

どーもhtmlソースごと保存するということに違和感を覚えましたので。

宜しくお願いします。

補足日時:2013/10/30 12:06
    • good
    • 0
この回答へのお礼

あっ、おっしゃる通りです。
お恥ずかしい限りです。

ご指摘ありがとうございました。

お礼日時:2013/10/30 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!