• ベストアンサー

セレクトフォームで選択した複数の値の挿入

こんにちは。 標題の通りセレクトフォームで複数の値を渡した時のテーブルへの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);

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • taskuni
  • ベストアンサー率71% (49/69)
回答No.2

implode() って言う関数があるのでそのほうがいいかも。

naruwanko
質問者

お礼

できました!こんな関数があるなんて知りませんでした~。 もっとよく考えて探さないとだめですね。 一気に解決できました。どうもありがとうございました!

その他の回答 (1)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 まず<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 ++; } として、最初の繰り返しでない場合に選択された文字の前にカンマを追加する処理を入れてみてはいかがでしょうか。

naruwanko
質問者

お礼

name属性いらなかったんですね…。ほかのフォームと勘違いしてました。 最後にカンマがつくことも、つかないようにするにはどう書いたらよいのかわからなかったので大変参考になりました。 ありがとうございました!

関連するQ&A

  • selectが複数ある場合の値取得について

    お世話になります HTML内に下記のようなフォームが複数存在しています。 select[name="page_name"]が変更されたときに値を取得しPHP に送信したいのですが、一番上にあるselectの値が取得されてしまいます。 ひとつのscriptで複数のselectに対応したい場合、どのような記述になりますでしょうか? 助けていただきたいです。よろしくお願いします。 <!--1番目のセレクト--> <form method="post" action="javascript:void(0);"> <input type="hidden" id="img_id" name="img_id" value="3"> <select name="page_name"> <option value="">選択してください</option> <option id="page_name" value="1">あああ</option> <option id="page_name" value="2">いいい</option> <option id="page_name" value="3">ううう</option> </select> </form> <!--2番目のセレクト--> <form method="post" action="javascript:void(0);"> <input type="hidden" id="img_id" name="img_id" value="4"> <select name="page_name"> <option value="">選択してください</option> <option id="page_name" value="1">あああ</option> <option id="page_name" value="2">いいい</option> <option id="page_name" value="3">ううう</option> </select> </form> <!--3番目のセレクト--> ---省略--- /*script*/ $('select[name="page_name"]').change(function() { var data = { 'page_name' : $('#page_name').val(), 'img_id' : $('#img_id').val() }; $('#name').text(data['img_id']); $.ajax({ type: "POST", url: "/admin/change/", data:data }); alert("画像使用ページを変更しました!"); return false; }); });

  • PHP セレクトフォームの連動

    初めての質問です。よろしくお願いします。 今、同一ページ内で二つのセレクトフォームを連動させてライブ写真の表示をさせようとしているのですが、上手くいきません。 内容は、まず1つ目のセレクトにライブ会場名を表示します。そのセレクトをクリックすると、連動してもう一つのセレクトに写真名のリストが表示されるようにします。 今困っているのは一つ目のセレクトをクリックし、二つ目のセレクトの連動はどうにかできたのですが、二つ目のセレクトをクリックすると一つ目のセレクトが初期状態に戻ってしまいます。 質問がヘタクソなので、ソースとURLを書いておきます。ソースが分かりにくいとは思いますがご了承ください。お分かりになる方は分かりやすく教えてください。よろしくお願いします。 URL http://www.officekuwa.com/soulsurvivores/ontheroad/gallery.php データーベースの内容です。 gallery_title(ライブ会場名が登録されたテーブル) id,title,date,active gallery (写真名が登録されたテーブル) id,cid,title,photos,date,active //一つ目のセレクト // ライブ会場名表示 $gallery_query = "select * from gallery_title where id =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery = mysql_fetch_assoc($gallery_cat_data); <FORM method="post" name="setForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery['id']); ?>"> <SELECT NAME="setID" CLASS="formPulldown" STYLE="width:175px" onChange="document.setForm.submit()"> <option value=''>Select a Photo Set</option> // 会場名表示 $gallery_query = "select * from gallery_title"; $gallery_cat_data = mysql_query($gallery_query, $db); while($gallery_cat = mysql_fetch_assoc($gallery_cat_data)) { $SELECTED = (($_POST['setID'] == $gallery_cat['id'])?" SELECTED":""); <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> } //二つ目のセレクト // 写真タイトル名表示 if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <FORM method="post" name="phoForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery_cat['id']);?>&setID=<?php echo _hs($gallery_cat['cid']);?>"> <SELECT NAME="ID" CLASS="formPulldown" STYLE="width:275;background-color:#FFFFFF" onChange="document.phoForm.submit()"> <option value=''>Select a Photo</option> <?php } } if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_disp_data = mysql_query($gallery_query, $db); while($gallery_disp = mysql_fetch_assoc($gallery_disp_data)) { $SELECTED = ((!isset($_POST['setID']) Or $_POST['setID'] == "none")?" SELECTED":""); ?> <OPTION VALUE="<?php echo _hs($gallery_disp['cid']);?>" <?php echo _hs($SELECTED); ?>><?php echo $gallery_disp['title'];?></OPTION> <?php } } ?> </SELECT> // 写真の表示 <?php if ($_SERVER["REQUEST_METHOD"]=="POST") { $SELECTED = "SELECTED"; if(!isset($_POST['ID'])) { print ""; } else { // 写真の表示 $gallery_query = "select * from gallery where cid =".$_POST['ID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <img src="<?php echo _hs($gallery_cat['photos']); ?>" alt="" hspace="0" vspace="6" border="0"> <?php } } ?>

    • 締切済み
    • PHP
  • POSTでセレクトフォームの値を渡す

    こんにちは。初めて質問させていただきます。 過去ログを検索して似たような内容の投稿は読んだのですが、どうにも自分がやりたいことへの応用が利かないため投稿させていただきました。環境はPHP4.3.2 DBはMYSQLを使用しています。 やろうとしていることは、入力フォーム上(index.phpとします)で任意(セレクトフォーム)でテーブルを選択し、その選択したテーブルにセレクトフォームの下にあるテキストフォームの値を挿入しようと考えています。 引っかかっている部分はセレクトの値の部分です。(テキストの方はテーブルを固定すると問題なかったので省略します) <<index.php>> <form action="inputdata.php" method="post"> <select name="dblist"> <? $mysql = mysql_connect(SERVER,USER,PASS) or die ("MYSQLに接続できませんでした\n"); mysql_select_db(DB,$mysql) or die ("データベースの接続に失敗しました\n"); $dbresult = mysql_query("SELECT * FROM listtable", $mysql); while($row = mysql_fetch_assoc($dbresult)){ echo "<option value='{$row['list_tb']}'>{$row['list_name']}"; } mysql_close($mysql); ?> </select> //これより下にテキストが入りますが省略します </form> 上記のような渡し方の場合、受け取る側(inputdata.php)を $table = $_POST['dblist']; と書いているのですが、echoで$tableを表示してもなにも表示されませんでした。(nullでした) 受け取り側(inputdata.php)の書き方が悪いのでしょうか?それともそもそもの渡し方(index.php)が悪いのでしょうか? 基礎的なことかもしれないのですが、適切な受け渡し方法があれば教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームの選択リストで表示用とデータベース用に値を分けたい

    phpのformで下記のようなプルダウンメニューを作成しました。 <select size="1" name="category"> <option value="1">1課</option> <option value="2">2課</option> <option value="3">3課</option> </select> nameのcategoryはmysqlのフィールド名で、valueはそれぞれ数字を割り当てました。 mysqlにvalueの値を格納したいのですが、次のプレビューページで見ると <?php echo $category?> valueの値がそのまま表示されてしまいます。プレビュー画面では1課と表示したいのですが、1が表示されてしまいます。 データベース格納用とPHP表示用をどのようにして組み込むことができますでしょうか?

    • ベストアンサー
    • PHP
  • select値でのフォームのaction値の変更

    以下のようなフォームでselectの値によって PHPでactionのURLを変更させるようなことは出来るでしょうか。 <form name="form" method="GET" action="ここをselect値により変更"> <input type="text" name="word" id="word" value="" /> <select name="select" id="select"><option selected="selected" value="01">値01</option> <select name="select" id="select"><option selected="selected" value="02">値02</option> <select name="select" id="select"><option selected="selected" value="03">値03</option> </select> </form> 以上、どうぞ宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • DBに入力されている値のセレクトフォームを受け取りたいです

    こんにちは。 たびたびすみません・・・・。 MySQLのテーブルの顧客名をセレクトメニューで 表示できて大喜びしていたのですが・・・。 【登録】→【確認】→【MySQLの該当テーブルに保存】 としたいのです。 テキストエリアで入力した項目は、【確認】画面で <?php echo htmlspecialchars($_POST["siire_no"]) ?> と入力すると、ちゃんと表示されるのですが・・・。 先日教えて頂いた、テーブルからセレクトメニューを作る コードを使わせて頂いて $res=mysql_query("select * from kokyaku"); while ( $rows=mysql_fetch_array($res) ) {   print "<option value=\"".$rows['kokyaku_id']."\">".$rows['kokyaku_name']."\n"; } と書いて、【確認】画面で <?php echo htmlspecialchars($_POST["kokyaku_id"]) ?> とすると、顧客テーブルで指定していた、顧客の番号が 表示されます。 これを、siireテーブルに保存するときの顧客情報 フィールドには、顧客番号で入れたいけれども、 【登録確認】画面では、番号ではなく、顧客名を 表示させたい場合は、どのように記述すれば よいのでしょうか・・・・。 ためしに、 <?php echo htmlspecialchars($_POST["kokyaku_name"]) ?> と書いてみたりしたのですが 【確認】画面で、顧客の欄だけ何も出なくなったり してしまいました。 どうかご指導よろしくお願いいたします。 使用環境:PHP5+MySQL4+Apache

    • ベストアンサー
    • PHP
  • PHP・MySQL・javascriptを用いたセレクトボックスによる絞込み検索

    はじめまして!現在PHPを勉強し始めた初心者なのですが、PHP・MySQL・javascriptを用いて、検索機能を実現させたいと思い思考錯誤しているのですが、やりたいことができず、困っております。 やりたいことというのは、MySQLに商品テーブルが存在し、材質やサイズなどのフィールドをいくつか設けているのですが、セレクトボックスを5つ配置し、それぞれのセレクトボックスを選んでいくと他のセレクトボックスが連動して絞り込まれていき、5つ全て選んだ時に1つの商品がヒットするというものを作りたいのです。 一つ目のセレクトボックスからポストされた値を次のセレクトボックスのクエリのwhere句の条件として絞り込んで二つ目を表示させることはできたのですが、三つ目以降どうしていいかわかりません>< 初心者なので、詳しく解説して頂ければ幸いです。 どうか宜しくお願いいたします。 現在製作中のソースですは下記をご参照下さい。 <?php //MySQLクラスファイルの取り込み require_once("mysql.php"); //MySQLクラスファイルの取り込み $mysql = new MySQL; //ポストされた値を変数に格納 $category = $_POST["category"]; $syo_code = $_POST["syo_code"]; ?> <html> <head> <body> <form action="jon2.php" method="post"> <!--jon2.phpは現在のページの名前です--> <select name="category" onChange="this.form.submit()"> <option value="">-------------</option> <? $query = "select * from category"; $result = $mysql->query($query); while ($rows = $mysql->fetch($result)) { ?> <option value="<?=$rows["category_id"]?>"><?=$rows["category"]?></option> <? }//while終わり ?> </select><br /> <select name="syo_code"> <option value="">-------------</option> <? $query = "select syo_code from syohin where category_id=$category"; $result = $mysql->query($query); while ($rows = $mysql->fetch($result)) { ?> <option value="<?=$rows["syo_code"]?>"><?=$rows["syo_code"]?></option> <? }//while終わり ?> </select> </body> </head> </html>

    • 締切済み
    • PHP
  • フォームへ値の渡し方について

    こんばんわ。 PHPの勉強をしています。 入力されたIDを元にDBから氏名をクエリし、テキストボックスへ表示させようとしていますが、テキストボックスの指定の仕方が分からず、行き詰っています。 各テキストフォームは<?php?>の中に記述しています。 初心者のため簡単にできることなのかもしれませんが、ご教授願います。 <form method="POST" action="hyouji.php"> ID: <?php if($_POST["ID"]){ $id = $_POST["ID"]; echo "<input type=text name=ID onChange = submit() value = '$id'>"; ECHO "YES"; }else{ echo "<input type=text name=ID onChange = submit()>"; ECHO "NO"; } ?> Name: <?php echo "<input size=28 type=text name=Name ><br>"?> /*上記、テキストボックスに値を入力*/ <input type=submit name=bottun1 value=入力> </form> <?PHP $host = 'localhost'; $user = 'root'; $pass = 'root'; $db = 'DB'; if($_POST["ID"]){ $id = $_POST["ID"]; $link=mysql_connect($host,$user,$pass) or die("接続エラー"); mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); mysql_select_db($db,$link) or die("接続エラー"); $sql="SELECT * FROM test WHERE id = '$id'"; $res=mysql_query($sql,$link) or die("データ抽出エラー"); $rows = mysql_fetch_array($res,MYSQL_ASSOC); echo "<tr>"; echo "<td>".$rows["user_id"]."</td>"; echo "<td>".$rows["customer"]."</td>"; echo "</tr>"; mysql_close($link); }else{ echo "表示データはなし"; } ?> 以上、長文になりましたがよろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数選択された値を取得したい

    複数選択可のリストボックスを使用してパラメータをPOSTで送った時、その値の取得方法がわかりません。 例えば <select name="select" multiple> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> </select> というリストボックスがあります。 02、03、04を選択して送信した時に、$_POST[select]の中には04しか入っていません。 選択された値を配列にして全て取得したいのですが、どのようにすれば良いのでしょうか? アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • セレクトメニューで複数選択した値をpost送信する

    セレクトメニューで下のように、「multiple」を使えばカテゴリA~カテゴリDまでを全て選択する事ができますが、 <form method="post" action="test.php"> <select multiple name="category"> <option value="category_a">カテゴリA</option> <option value="category_b">カテゴリB</option> <option value="category_c">カテゴリC</option> <option value="category_d">カテゴリD</option> </select> </form> そうではなくて、下のように「すべてのカテゴリ」という項目を作って、カテゴリA~カテゴリDまでの値をPOST送信したいのですが、どのように記述すればよいのか四苦八苦しております。 <form method="post" action="test.php"> <select name="category"> <option value="?">すべてのカテゴリ</option>⇒この部分が解らない箇所です。 <option value="category_a">カテゴリA</option> <option value="category_b">カテゴリB</option> <option value="category_c">カテゴリC</option> <option value="category_d">カテゴリD</option> </select> </form> 色々調べてみたのですが、ないものですね。私の勉強不足だとは思いますが、どなたかご助言の程よろしくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう