• ベストアンサー

プルダウンメニューに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に複数行のデータがある時、複数行を取得出来ない ・仮にプルダウンで選択させる事が出来たとしても、登録ボタンを押せば 選択した内容が消えてしまう と考えています。 どれに対しても解決策が見出せないので、皆様のお力をお借りしたいと 考えています。 宜しくお願いします。

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

  • ベストアンサー
  • 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