フォームからの入力を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’]). ‘”‘;
としても
同じ意味になります

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です