• ベストアンサー

プルダウンメニューにDBの内容を表示させる

いつもお世話になっております。 度々ですが躓きましたので皆様の知恵をお借りしたいと思います。 どうぞ宜しくお願い致します。 題名にもある通り、HTMLのプルダウンメニューで選択する項目をDBから取得し、他のDBに登録させたいです。 以下、処理時のコードです。 $result = pg_query($con, "SELECT project FROM project_tbl"); $col = pg_fetch_array($result); <SELECT NAME="project"> <OPTION VALUE="$col['project']"> </SELECT> 但し、このコードではDBの内容を取得する事が出来ませんでした。 問題点はこれ以外に ・DBに複数行のデータがある時、複数行を取得出来ない ・仮にプルダウンで選択させる事が出来たとしても、登録ボタンを押せば 選択した内容が消えてしまう と考えています。 どれに対しても解決策が見出せないので、皆様のお力をお借りしたいと 考えています。 宜しくお願いします。

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

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.5

#1です。 まず、記述が足りなかった行なのですが <OPTION VALUE="<?php $data['project'] ?>"> は <OPTION VALUE="<?php $data['project'] ?>"><?php echo $data['project'] ?></OPTION> です。すみません。 失礼な事をお聞きしてすみませんが、 お使いのDBはPostgreSQLですよね? PostgreSQLならpg_query・pg_fetch_array MYSQLならmysqy_query・mysql_fetch_array で同等の扱いでいけるのではと思ったのですが。。 私の持っている環境はMYSQLしかないのでそちらの環境では同じロジックで関数を pg_query → mysqy_query pg_fetch_array → mysql_fetch_array に変えただけで正常に取得できました。 同じ使い方ではいけないのでしょうかね。。 お役に立てず、すみませんです。

destonias
質問者

お礼

gogo-tea様、ありがとうございます。 教えていただいたコードで処理を実現する事が出来ました。 しかし処理の内容を完全に理解しきれていないので、これから ゆっくりコードをみて理解したいと思います。 度々のご返答・ご教授感謝しております。

その他の回答 (4)

noname#26650
noname#26650
回答No.4

#2, #3の者です。たびたび申し訳ありません。 #2で回答したスクリプトのかわりに、以下をお試しになってみてくださいますか? pg_fetch_array()で、DBから取得した結果セットを$colという配列に 格納すると思いますので、pg_fetch_array()の呼び出しはforループの 外でないといけないはずです。 そして、forループの中で、配列$colの各要素をプルダウンメニューに登録しています。 <?php $result = pg_query($con, "SELECT project FROM project_tbl"); $rows = pg_num_rows($result); if ($rows > 0) {   print '<SELECT NAME="project">';   $col = pg_fetch_array($result);   for ($i = 0; $i < $rows; $i++) {     print '<OPTION VALUE="{$col[$i]}">{$col[$i]}</OPTION>';   }   print '</SELECT>'; } ?> (注)インデントのため、全角空白を使っています。

destonias
質問者

お礼

miraiya様、度々のご返答ありがとうございます。 教えていただいたコードではどうも内容が表示されず {$col[$i]} が表示されてしまいました。 以下のコードで実装する事が出来ました。 <SELECT NAME="PROJECT"> <?php $sql = "SELECT project FROM project_tbl ORDER BY project;"; $col = pg_query($con, $sql);; while($data = pg_fetch_array($col)){ ?> <OPTION VALUE="<?php $data['project'] ?>"><?php echo $data['project'] ?></OPTION><?php } ?> </SELECT> ご教授・参考になる意見を下さり、感謝しております。

noname#26650
noname#26650
回答No.3

#2の者です。#2回答には明らかな誤りがありましたので、 訂正しておきます。 >     print '<OPTION VALUE="{$col[$i]}">{$col[$i]}</OPTIONS>'; この行の最後にある</OPTIONS>を、</OPTION>に訂正します。 他にも誤りがあるかもしれません。その折はお許しください。

destonias
質問者

お礼

とんでもございません、ご教授頂けるだけでも充分ありがたいです。

noname#26650
noname#26650
回答No.2

もしかすると、こういうのでできるかもしれません。 <?php $result = pg_query($con, "SELECT project FROM project_tbl"); $rows = pg_num_rows($result); if ($rows > 0) {   print '<SELECT NAME="project">';   for ($i = 0; $i < $rows; $i++) {     $col = pg_fetch_array($result);     print '<OPTION VALUE="{$col[$i]}">{$col[$i]}</OPTIONS>';   }   print '</SELECT>'; } ?> (注)インデントのため、全角空白を使っています。

destonias
質問者

お礼

miraiya様、お返事ありがとうございます。 明日早速試してみます。 参考になる意見ありがとうございます。

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.1

pg_queryは使った事がないのですが多分こんな感じでしょうか <SELECT NAME="project"> <?php $sql = "select project from project_tbl order by project;"; $col = pg_query($con, $sql);; while($data = pg_fetch_array($col)){ ?> <OPTION VALUE="<?php $data['project'] ?>"> <?php } ?> </SELECT> 登録ボタンでPOSTされたら$projectに選択された値が 入るかと思います。 同じ画面にもどるのであれば 上のループで $data['project']が受け取った$_POST['project']と等しければ selectedにしてあげればよいかと思います。

destonias
質問者

お礼

gogo-tea様、お返事ありがとうございました。 残念ながら教えていただいた上記コードでは 空白のみでDBの内容が表示されませんでした。 もう少し考えてみます。 参考になる意見ありがとうございました。

関連するQ&A

  • プルダウンメニューの値をDBに格納する

    以前、こちらでDBの内容をプルダウンメニューで表示させる処理を教えて頂き 下記のコードで実装する事が出来たのですが <SELECT NAME="DAY"> <?php $sql = "SELECT day FROM date_tbl ORDER BY day;"; $col = pg_query($con, $sql); while($data = pg_fetch_array($col)){ ?> <OPTION VALUE="<?php $data['day'] ?>"><?php echo $data['day'] ?></OPTION> <?php } ?> </SELECT> これを応用し、プルダウンメニューでDBの値を選択し 削除ボタンを押せば、選択した項目をDBから削除しようとしています。 しかし実行しても何も起きず自力での解決が出来なくなってしまったので 再度のご教授願えますでしょうか? 以下は自分が考えた処理です。 $del_day = mb_convert_kana($_POST['DAY_DELETE'], "n", "EUC-JP"); if($del_day){ pg_query($con, "DELETE FROM date_tbl WHERE day = '$del_day'"); } ちなみにDBの構造は下記の通りです。 ---------------------- 名前 | 日付 | 登録日 | ---------------------- SELECT name,TO_CHAR(day, 'yyyy年mm月dd日') AS day,TO_CHAR(record_date, 'yyyy年mm月dd日') AS record_date FROM date_tbl ORDER BY day, record_date;"); ※DBには名前・日付・登録日があり、日付はTO_CHARで 『2007-04-01』⇒『2007年04月01日』という形に整形しています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • プルダウンメニューの選択肢の保持について

    こちらにはだいぶお世話になっています。 perlとpostgresを使用してcgiを作成しているのですが、 下記のコードでプルダウンメニューにDBの値を入れて、 DBにデータが追加されてもプルダウンにもデータが追加されているプルダウンメニューを作りました。 $sql="select * from testtable order by code"; $result = $conn -> prepare($sql1); $ref = $result -> execute; while(@ref = $result->fetchrow){ $options.="<option value='$ref[0]'>$ref[1]</option>\n"; } $select="<select name=''>\n<option value=''>選択してください</option>\n$options</select>\n"; print "$select"; データの検索時にこのプルダウンメニューを使っているのですが、選らんだ選択肢を例えばBとして 送信すると、一番上の「選択してください」に戻ってしまします。 これを送信してもその時選択した選択肢を残すやり方を教えて頂けますでしょうか? testtableの中身:      プルダウンメニュー化 |code|name|      |選択してください▼| | 1 | A |         |    A    | | 2 | B |        → |    B    | | 3 | C |         |    C    | | 4 | D |         |    D    |

  • プルダウンメニューからチェックボックスを表示したい

    php、javascript、mysqlを使用し、プルダウンで選択後、チェックボックスを表示させる仕組みを作りたいのですが、 どうすればよいのか分かりません。 どなたか力を貸して頂きたく思います。 例えば下記のようなTBLがあったとします。 ■TBL:oya  oyaコード  10  20  30 ■TBL:ko  oyaコード    koコード  10        1100  10        1200  10        1300  20        2100  20        2200  30        3100 TBL 「oya」 をプルダウンメニューにセット。 プルダウンメニューを選択する度にTBL 「ko」を呼び出し、同ページ内にチェックボックスとして表示させたいと考えています。 例) ・10が選択されたら  「1100」、「1200」、「1300」のチェックボックスを表示する プルダウンメニューへのセットは出来たのですが、プルダウン選択後の「ko」を呼び出す箇所が分かりません。 php Mysql javascript で実現したいと考えております。 サンプルページでもいいですので、何かありましたら教えて下さい。 お分かりになる方よろしくお願いいたします。

  • 【PHP】 DB経由のプルダウンメニューに、DBの変更なしで追加させたい

    毎度毎度の質問失礼します。 今ではおかげ様で、PHPのプルダウンメニューをデータベースから取得し、作成できるようになりました。 今回は、そのプルダウンメニューの一番上に、「選択してください」といった項目を追加したいのです。 なるべく、既存のDBの内容を変更させずにこの変更を行いたいのです。 それとも、やはりDBを変更しない限りできないことなのでしょうか? 以下は既存のソース(PHPのみ)です。 ----------------------------------------------------- <?php //ファイルを読み込み require_once("bussys.php"); // クエリを送信する $sql = "SELECT * FROM scd ORDER BY scd"; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを、プルダウンメニューとして作成 $options=""; while($row = mysql_fetch_array($result,MYSQL_ASSOC)){ $options.="<option value='{$row['scd']}'>{$row['sname']}</option>\n"; } $select="<select name='hoge'>\n{$options}</select>\n"; print $select; //結果保持用メモリを開放 mysql_free_result($result); ?> ----------------------------------------------------- 質問ばかりで申し訳ございませんが、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • プルダウンメニューで・・・。

    <SELECT>タグのプルダウンメニューで、 複数選択は可能でしょうか? 以前どこかのホームページで、Shiftキーを押しながらできたと思うのですが・・・。

    • ベストアンサー
    • HTML
  • PHPとプルダウンメニュー

    PHPで以下のことをやりたいのですが、どうしてもうまく出来ません。経験の有る方、どうぞ宜しくお願い致します。 2つのプルダウンメニューがあり、1つ目のプルダウンメニューから選択時、選択された値に関連する項目をDBより2つ目のプルダウンメニューに登録したいのです。 ちなみにDBはOracleを使用しています。 プルダウンメニューから選択時は、どのようなイベント(?)が発生するのでしょうか? もし、PHPで出来ない場合、他にどのような方法がありますか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • プルダウンメニューの内容の取得方法ってありますか?

    プルダウンメニューで、VALUE値 選択された項目の内容って取得できないんでしょうか。 <FORM NAME="sltTest"> <SELECT NAME="slt01"> <OPTION VALUE="01">内容1</OPTION> <OPTION VALUE="02">内容2</OPTION> </SELECT> </FORM> たとえば上記のようなメニューのとき、 選択された「内容1」もしくは「内容2」を取得したいとき どう記述すれば取得可能でしょうか。

  • PHPの配列をDBのテーブルに入れたいのですが

    完全に行き詰まりそうなので助けていただきたく投稿(投降)します。 PHP内でSQLを走らせた結果を、 $result に入れています。 $rows = pg_num_rows($result); print('レコード数は、'.$rows.'です<br><br>'); // 上記、2行のコードで件数が正しいことは確認しました。 $sabun = array(); $sabun = pg_fetch_all($result); $cnt1 = count($sabun); print('配列sabunのレコード数は'.$cnt1.'です<br><br>'); // 上記、4行のコードで配列に格納された件数が正しいことは確認しました。 // 最初の2行の件数とこの4行の件数は同じ件数です。 // ここで配列sabunのデータをテーブルに入れる /* エラーが出た */ $result = pg_insert( $link,テーブル,$sabun ); /* エラーが出た */ $result = pg_insert( $link,テーブル,$result ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $sabun ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $result ); // 上記、4種類のコードを試したのですが、全てエラーが出ました(泣) if (!$result) { print('テーブルへの登録が失敗!<br><br>'.pg_last_error()); $err_flg = 1; goto ENDCLR; } 「テーブルへの登録が失敗!」以外のエラーメッセージ等は 表示されませんでした。 エラーが出た4種類のいづれかでうまく行くと思ったのですが、 全滅してしまい途方に暮れています。 根本的にPHPへの理解が足りないのかもしれません。 何か解決の糸口などご教授いただけますと助かります。 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • 2つのテーブルのカウント結果を1行で取得

    以下のようなデータ件数のテーブルが、別々のDBにあります。 SELECT COUNT(*) FROM AA.TBL01 ------ TBL01 ------ 10 SELECT COUNT(*) FROM BB.TBL02 ------ TBL02 ------ 5 それぞれのテーブルのカウント結果を、1行で取得する ことは可能でしょうか? <取得したい結果> ---------------- TBL01 TBL02 ---------------- 10 5 よろしくお願いします。 (SQL Server2005 Standard)