$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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
最終行の改行について
-
テキストファイルから改行コー...
-
VBAでCSVをExcelに取り込む時に...
-
エスケープ文字の復帰(¥r)と...
-
JavaMail,本文中の改行について
-
【VBA】エクセルで最後の不要な...
-
秀丸の正規表現で複数行にわた...
-
テキストボックスに改行を含む...
-
COBOLの改行
-
改行コード(CR/LF)の設...
-
CSV出力時の改行コードについて
-
C++で空Enterの入力を判...
-
CSVファイルの文字項目に改行コ...
-
awkで改行を除いて文字列を抜き...
-
ファイルから読み取った改行文...
-
テキストボックス行の桁数を制...
-
textareaに改行を入れても、CSV...
-
fgetsとsscanf
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
エクセルVBA 文字列領域が不足...
-
C++でのCRLFについて
-
JavaMail,本文中の改行について
-
C++で空Enterの入力を判...
-
COBOLの改行
-
awkで改行を除いて文字列を抜き...
-
グレープシティのSPREAD...
-
Excel VBAからBeckyを起動して...
-
最終行の改行について
-
【VBA】エクセルで最後の不要な...
-
ファイルから読み取った改行文...
-
jsp 改行コードで改行させて表...
-
fputsで改行できない
-
改行について
-
C# DataGridViewのセルを改行禁...
-
改行を読み飛ばす
-
テキストボックス行の桁数を制...
おすすめ情報