$sql = INSERT INTO users (logid, passwd) VALUES (
"'" . mysql_real_escape_string($_POST['id']) "','" . mysql_real_escape_string($_POST['pas']) . "';"
とすると全POSTデータの先頭に「\r\n」が付与されてしまいます。
INSERT INTO users (iogid, passwd) VALUES ('\r\n 入力されたID', '\r\n 入力されたパス')
こんな感じになってしまいます。
SQL実行時にデータベースに入ってしまっているのか、
phpMyAdminで確認すると、文章内に改行が入ってしまっているみたいで、表のレイアウトがガタガタになっています。
SQLインジェクション対策に必要だと参考書には表記されているのですが、あまりにデータベースが見にくいので、私の使い方が間違っている様な気がします。
(1)\r\nが先頭に付与されるのは正しいのでしょうか?
(2)データベースにSQLで\r\nをINSERTしると、データも\r\nが入ってしまうのでしょうか?
(3)PHP + MySQLでSQLインジェクション関数はmysql_real_escape_stringだけなのでしょうか?
なにぶん超初心者なので、ご教授の程よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
(1) 何らかの原因で、 $_POST['id'] や $_POST['pas'] の先頭に改行が入っているのだと思います。
引数の文字列に改行が無ければ入らないと思います。(2) \r\nは改行文字(Windowsタイプ)をエスケープしたものなので、改行が入ります。
(3) SQL用の文字列エスケープ関数は各DBMS向けにいろいろ有るようですが、MySQL向けは mysql_real_escape_string() になるかと。
なぜ $_POST['id'] や $_POST['pas'] に改行が入っているのかを突き止めて、それを修正されるのがよろしいかと。
例えば、入力フォームが textarea になっているなど、様々なことが考えられます。
とりあえず、DBに入れるデータの先頭から改行を取り除きたいのであれば、trim()を使えばできると思います。
例) ---------------------------------------------------------------
mysql_real_escape_string(trim($_POST['pas']))
-------------------------------------------------------------------
trim() では、文字列の先頭や末尾のホワイトスペース(スペース、タブ、改行など)を取り除かれるので、注意してください。
参考URL:http://jp.php.net/manual/ja/function.trim.php
ご教授ありがとうございます。
なるほど~ tirm関係の関数で削除してから
mysql_real_escape_stringすれば良かったんですね。
$_POST['id']や$_POST['pas']はTEXTBOXで作っており、
入力はテストで自分でした為、先頭に改行は入力していませんでした。
なぜ改行文字が入ってしまうかは、さておいて
trimで解決できそうです。
本当にありがとうございました。
No.2
- 回答日時:
例えば以下のように変数に値を代入すると先頭に改行が入りますが、
同じ状況で改行が入っている可能性もあります。
$str = "
data";
試しにSQL文を作っている部分を1行で書いてみるとどうでしょうか?
$_POSTと$sqlをvar_dumpすると解決へ近づきそうです。
改行の有無を確認するため、<pre>タグ内に出すようにするか、htmlソースで確認する必要があります。
この回答への補足
ご教授ありがとうございます。
SQLにして出力してみると、
INSERT INTO users (logid, passwd) VALUES (
'\r\npostid' ,'\r\npostpassword')
になっていました。
なんとか\r\nを削除しないとダメみたいですねm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
C++で空Enterの入力を判...
-
CSVファイルの改行コード判別
-
ファイルから読み取った改行文...
-
texのchapterが改行される
-
C# DataGridViewのセルを改行禁...
-
グレープシティのSPREAD...
-
テキストボックス行の桁数を制...
-
秀丸の正規表現で複数行にわた...
-
jsp 改行コードで改行させて表...
-
ラベル(スタティックテキスト)...
-
ファイルの内容をstrcpyを使っ...
-
改行を読み飛ばす
-
VBでcsv読込TextFieldParser...
-
改行コードが半角スペースにな...
-
textareaに改行を入れても、CSV...
-
\\nと\\rの違い
-
JAVA System.out.println の ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
最終行の改行について
-
【VBA】エクセルで最後の不要な...
-
変数の中の改行コードをBRタグ...
-
テキストファイルから改行コー...
-
ファイルから読み取った改行文...
-
COBOLの改行
-
エクセルVBA 文字列領域が不足...
-
C++で空Enterの入力を判...
-
JavaMail,本文中の改行について
-
コンボボックスの項目中に改行を
-
改行について
-
C# DataGridViewのセルを改行禁...
-
JavaDoc コメントの改行について
-
VBAでCSVをExcelに取り込む時に...
-
jsp 改行コードで改行させて表...
-
エディットボックスで改行
-
awkで改行を除いて文字列を抜き...
おすすめ情報