FC2ブログ

フォームからの入力をDBへ保存する場合

今日はちょっと難しめですが、フォームから入力した情報をDBへ保存する場合の処理です

$sql = sprintf('INSERT INTO my_items SET maker_id=%d,
item_name="%s", price=%d, keyword="%s"',
mysql_real_escape_string($_POST['maker_id']),
mysql_real_escape_string($_POST['item_name']).
mysql_real_escape_string($_POST['price']),
mysql_real_escape_string($_POST['keyword'])
);

mysql_query($sql) or die(mysql_error());

このように
%d や %s というようにすれば、入力した数値や文字などを
DBへ POST 送信できるようになります

ちなみに、%s が "" で囲ってあるのは、文字列だからです

%d は数値
%s は文字列の入力に使います

C 言語とかでも使いますので覚えておくと便利です

$_POST は POST 送信するという定数です
GET と POST がありますが
GET だと
GETでは日本語などの全角文字を送信できない
とか
GETには送信できる情報量に制限がある

そして
GETの場合は送信内容がURLとして渡される
つまり内容丸見えです
これは非常にセキュリティを考えるとまずいので
極力POSTを使いましょう

もっと詳しい解説として
GETとPOSTの違い
に解説が載っています

また、重要なことですが
mysql_real_escape_string() は
SQLインジェクション対策です

これは
フォームからの情報で
' OR ''='
つまり
SELECT * FROM testtable WHERE password='' OR ''='';
という実行と同じで
意味は
password フィールドが空 または空が空の場合という条件となっています

これが実行されると、すべてのレコードに条件があてはまり
パスワードによる認証が無効化され、データが盗み出されます

このため、対策として
mysql_real_escape_string()
を使うことで、入力される文字列でSQLにとって危険とされる文字を無効化しておきます


そして、今回は sprintf() を使って書き込みしていますが
$sql = sprintf('INSERT INTO my_items SET maker_id=%d,
item_name="%s", price=%d, keyword="%s"',
mysql_real_escape_string($_POST['maker_id']),
mysql_real_escape_string($_POST['item_name']).
mysql_real_escape_string($_POST['price']),
mysql_real_escape_string($_POST['keyword'])
);


$sql = 'INSERT INTO my_items SET maker_id='
.mysql_real_escape_string($_POST['id']) .' ,
'.item_name="' .mysql_real_escape_string['item_name']) .'",
.price=' .mysql_real_escape_string($_POST['price']) . ',
keyword="' .mysql_real_escape_string($_POST['keyword']). '"';
としても
同じ意味になります

スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメント

非公開コメント

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック