「覚え間違い」を教えてください!

いつもお世話になっております。
度々ですが躓きましたので皆様の知恵をお借りしたいと思います。
どうぞ宜しくお願い致します。

題名にもある通り、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に複数行のデータがある時、複数行を取得出来ない
・仮にプルダウンで選択させる事が出来たとしても、登録ボタンを押せば
選択した内容が消えてしまう
と考えています。

どれに対しても解決策が見出せないので、皆様のお力をお借りしたいと
考えています。 宜しくお願いします。

A 回答 (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
に変えただけで正常に取得できました。
同じ使い方ではいけないのでしょうかね。。
お役に立てず、すみませんです。
    • good
    • 0
この回答へのお礼

gogo-tea様、ありがとうございます。

教えていただいたコードで処理を実現する事が出来ました。
しかし処理の内容を完全に理解しきれていないので、これから
ゆっくりコードをみて理解したいと思います。

度々のご返答・ご教授感謝しております。

お礼日時:2007/04/09 12:20

#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>';
}
?>

(注)インデントのため、全角空白を使っています。
    • good
    • 0
この回答へのお礼

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>

ご教授・参考になる意見を下さり、感謝しております。

お礼日時:2007/04/09 13:12

#2の者です。

#2回答には明らかな誤りがありましたので、
訂正しておきます。

>     print '<OPTION VALUE="{$col[$i]}">{$col[$i]}</OPTIONS>';

この行の最後にある</OPTIONS>を、</OPTION>に訂正します。
他にも誤りがあるかもしれません。その折はお許しください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/09 12:14

もしかすると、こういうのでできるかもしれません。



<?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>';
}
?>

(注)インデントのため、全角空白を使っています。
    • good
    • 0
この回答へのお礼

miraiya様、お返事ありがとうございます。

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

お礼日時:2007/04/08 22:02

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にしてあげればよいかと思います。
    • good
    • 0
この回答へのお礼

gogo-tea様、お返事ありがとうございました。

残念ながら教えていただいた上記コードでは
空白のみでDBの内容が表示されませんでした。

もう少し考えてみます。
参考になる意見ありがとうございました。

お礼日時:2007/04/08 21:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A