質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3619閲覧

入力値どおりの文字をDBに保存し、表示させるには?

sakura-shi

総合スコア93

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2019/04/20 06:48

編集2019/04/21 11:21

#やりたいこと
フォームのinput要素やTextarea要素で入力した
とおりのひらがな、カタカナ、記号(全角・半角)、英数字(全角・半角)、漢字
を、いったんinsert文でDBに保存。その後何度かUpdateのSQLが実行されDB値は更新される。
画面でDB検索結果を表示させたい場合、insert直後であっても、Updateを何度か行った後でも、
どの段階であっても、かならず入力値どおりに表示させたい。

#経緯
当初、フォームから入力した値はすべてaddslashesを行っていたので、入力値どおりが検索結果に表示されていた。ただし、バックスラッシュを入力しても、検索結果表示時に表示されない。
この問題があったため、入力値をすべてaddslashesすることはやめました。
その結果、DB保存時や保存後の検索結果表示時には
「…」「→」などが混じるようになりました。

#疑問
1)DB保存データをみると、やはり表示時と同じように「…」「→」などが存在する
のはどうしては?
2)保存したデータを画面に呼び出すとやはり「…」「→」などが存在する

#やってみたこと(1)
DB検索し表示する時点でhtmlspecialcharをつけてみる
その結果
「…」を例にとると「amp;hellip;」と化けてしまう

#やってみたこと(2)
入力値

[]!"#$%&'()\クラウド……ABC//……()[]().&'"!*/\→

これを、htmlspecialcharsをしないでDBにinsert
その結果、保存値はphpMyAdminでみたとき

[]!"#$%&'()\クラウド……ABC//……()[]().&'"!*/\→

となっています。

この値をselectして、画面に表示させたとき

[]!"#$%&'()\クラウド……ABC//……()[]().&'"!*/\→

となります。

DB保存値は、入力値と同じ状態になるのがほんとうではないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2019/04/20 07:07

私自身はDBさわったことないですが、情報不足だと思います。 HTML自身ではDBにアクセスできません。 どのようにしてDBにアクセスしておられるのでしょうか? JavaならJavaなりの流儀がありますし、 PythonならPythonなりの流儀があります。 タグではPHPとなっていますが、PHPでどのようにやっているのでしょうか? そこまで細かく書かないことには、デキル人でもお手上げです。
guest

回答1

0

ベストアンサー

入力された情報はバリデーションにかからなかったなら全てそのまま(SQLエスケープを施して)登録すべきなので、登録時にhtmlspecialchars()などhtmlエスケープがかかった情報を登録しているのではないでしょうか。
あくまで画面出力時のみ対応するものです。

実際のコードがないので可能性の話でしかないですが。

ちなみに表示時のhtmlソースを見たときに→のようになっているのはhtmlエスケープが正しくかかっているので出方としては正しいです。
「&」は&がhtmlエスケープかかった結果なので化けてるわけではなくそれが正しい結果です。
あくまで保存時にhtmlエスケープをかけてはいけない、だけの話です。

ちなみに既に登録されたデータはphp側でどうにかできるわけではないのでDB側で置換かけるか、捨ててください。

追記:
もう1つお伝えしておくと、addslashes()による対応はSQLインジェクションが可能になるのでやめましょうと結構前から言われているので、あまり正しく理解できていない状態で使うものではなかったりします。
※そのあたり、調べるとすぐ出てきます。

投稿2019/04/20 07:05

編集2019/04/20 09:14
m.ts10806

総合スコア80854

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問