PHP MySQLの質問です。


ある商品にユーザーが「タグ」をつけるインターフェイスを作ろうと思います。
フォームで入力させてPOSTで送ってDBに格納します。DBのフィールドは

tag_id syouhin tag

の3つです。(テーブル名はtag)

タグを複数登録する場合はカンマで区切って入力してもらう事を想定しています。

(商品名:キムチ)
凄い,辛い,安い

このように入力してもらったら、以下のように格納します。

(左からtag_id syouhin tag です)
1 キムチ 凄い
2 キムチ 辛い
3 キムチ 安い
タグIDはMySQL側が自動でつけるので実際には送りませんが。

つまりカンマで区切って格納する処理をPHPで書かなければいけません。自力でも何とかなりそうなのですが時間がかかりそうなので、このような処理を解説しているサイトは無いでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2007/04/09 21:41:53
  • 終了:2007/04/10 04:22:01

回答(1件)

id:studioes No.1

studioes回答回数523ベストアンサー獲得回数612007/04/09 21:48:33

ポイント60pt

<input type='text' name='syouhin'>

<input type='text' name='tag'>として飛んでくるとして

$tags = explode ( ',', $_POST['tag'] );

foreach($tags as $tag){

mysql_query("INSERT INTO tag(syouhin,tag) VALUES('{$_POST['syouhin']}', '{$tag}')");

}

こういう事かな?

決まった区切り符号があれば、explode(区切り文字, 文字列)の戻り値として配列が得られるので、foreachで順次処理すればOKです。

id:tokyosmash

ありがとうございます。ずばりそういう事です。質問文が冗長過ぎてすいません。

まだ試していませんが、恐らくこれでいけると思います。どうも配列を使うスクリプトがうまく書けないので助かります。

2007/04/09 22:02:13
  • id:kurukuru-neko

    POSTデータをそのまま入れるのは危険なので

    mysql_real_escape_string
    http://jp2.php.net/manual/ja/function.mysql-real-escape-string.php
    の処理をした方がよいです。

    $syouhin = mysql_real_escape_string($_POST['syouhin']);
    $safetag = mysql_real_escape_string($tag);

    例:不正データ登録が出来る
    syouhin "ダミ','うそ'),('偽データ','不正データ'),('偽"
    INSERT INTO tag(syouhin,tag) VALUES

    展開されると
    INSERT INTO tag(syouhin,tag) VALUES
    ('ダミ','うそ'),('偽データ','不正データ'),('偽','tag')
    なってしまう。
  • id:tokyosmash
    ご丁寧にありがとうございます。

    PHP+MySQLを使ったサイトではセキュリティ対策を施していないと公開するべきでは無いようですね。
    今まではPHPとSQLの基本のみを勉強していたのでセキュリティ方面は全く手付かずだったのですが、そちらの勉強も始めてみようと思います。

    とりあえず現段階ではユーザーが入力したデータは必ず何らかの処理を施すようにします。サニタイジングであるとか。

    SQLインジェンクションはイマイチまだわかっていないのですが、
    http://q.hatena.ne.jp/1176113851
    こちらでも話題になっていますね。
    パスワードを入力しないでもadminでログインできる手法のようで。

    今後セキュリティに関する質問させてもらうかもしれません。
    よろしくお願いします。

  • id:kurukuru-neko

    >http://q.hatena.ne.jp/1176113851

    http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html
  • id:tokyosmash
    リンク先わかりやすいですね、早速ブックマークしました。
    情報ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません