- ベストアンサー
セレクトフォームで選択した複数の値の挿入
こんにちは。 標題の通りセレクトフォームで複数の値を渡した時のテーブルへのInsertの方法について悩んでいます。 環境はPHP5.1.2、MYSQL5、Apache2です。 やりたいことはセレクトフォームで複数の値を選択した場合、カンマ区切りにしてひとつのフィールドに格納したいということです。 現在つまづいている部分は、カンマ区切りにした値をInsertする部分です。表示するだけならいいのですが、どうしても最後の値しかInsertできません。(ちなみに挿入する値は数値です。フィールドはカンマを入れるのでVarcharにしています) 下にソースを書きましたが、この書き方だと前の値が上書きされているためだということはわかるのですが、どうしても書き方がわかりません。 できれば $value = $id['0'].",".$id['1'].",".$id['2']....; というような形で挿入したいのです。(ほかに同等の形になるよい方法があればこの形にこだわりません) へたな説明で申し訳ありませんがよろしくお願いします。 <<index.php>> <form action="entry.php" method="post"> <select name="bugID[]" multiple> <option value="id1" name="bugid">AA</option> <option value="id2" name="bugid">BB</option> <option value="id3" name="bugid">CC</option> <option value="id4" name="bugid">DD</option> </select> <input type="submit" value="送信"> </form> <<entry.php>> if($_POST["bugID"]){ foreach($_POST["bugID"] as $value){ $bug_id = $value.","; } } mysql_select_db($DB,$mysql) or die ("Entryデータベースの接続に失敗しました\n".mysql_error()); $query = "insert into ".entryTA." (bug_id)"; $query .= " values('{$bug_id}')"; mysql_query($query,$mysql);
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
implode() って言う関数があるのでそのほうがいいかも。
その他の回答 (1)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 まず<option>にname属性は存在しません。 foreach内で引数を展開しつつカンマ区切りにしている部分ですが、 $bug_id = $value.","; これですと、お察しのとおりどんどん上書きされ、 最後の文字, という形になってしまっています。 $bug_id .= $value.","; にすればどんどん足されていくかなと思います。 下で$queryに行っているものと同じ処理です。 AA,BB,DD,となっていいならそのままですが、 AA,BB,DDとしたい(最後のカンマはいらない)となると 最後に、一番右のカンマを削除するか、 $cnt = 0; foreache($_POST["bugID"] as $value ) { if ( $cnt !=0 ) { $value .= ","; } $cnt ++; } として、最初の繰り返しでない場合に選択された文字の前にカンマを追加する処理を入れてみてはいかがでしょうか。
お礼
name属性いらなかったんですね…。ほかのフォームと勘違いしてました。 最後にカンマがつくことも、つかないようにするにはどう書いたらよいのかわからなかったので大変参考になりました。 ありがとうございました!
お礼
できました!こんな関数があるなんて知りませんでした~。 もっとよく考えて探さないとだめですね。 一気に解決できました。どうもありがとうございました!