スレッド表示 | フラット表示〕 全トピック 920 件中 450 番目 次≫ ≪前

phpでのhtml formタグ生成

created: 2005-03-27 19:02 | modified: 2005-04-05 10:28 | reply: 8

[2212] phpでのhtml formタグ生成

user: たかぽん | created: 2005-03-27 19:02
はじめまして当方 超初心者です
どなた様か助けて下さいます様お願いいたします

やりたいこと
1.ORACLEから店番店名を取ってきて
2.HTMLformのプルダウンに表示させる(全店)
3.そのプルダウンの中から一つの店番、店名  を選び、またORACLEから売り上げ等のデータをブラウザに表示させる

です

なんとか他のHP等で調べ、店番、店名は取ってこれたのですがプルダウンの中に表示させることができません
HTML内にガリガリかけばいいのかもしれないのですが、おかげさまでそこそこの店数がありとてもこなせそうにないです

初心者的な質問でしょうが大変困っています

どうか皆様のご返事をお待ちしております

php 5.03
Apache 2.0.53
ORACLE 8i
WIN2K
です
reply: 2215 返信 編集 削除

[2215] Re:phpでのhtml formタグ生成

user: ぱぴよん | created: 2005-03-28 13:48
たかぽんさんはじめまして、ぱぴよんと申します。

私はORACLEを使ったことがありませんが、
odbcを使ってデータベースとのやりとりをしたことがあります。
もしかするとお役にたてるかもしれません。



>1.ORACLEから店番店名を取ってきて
>2.HTMLformのプルダウンに表示させる(全店)
>3.そのプルダウンの中から一つの店番、店名  を選び、またORACLEから売り上げ等のデータをブラウザに表示させる


1.について

>なんとか他のHP等で調べ、店番、店名は取ってこれた
とおっしゃられているのでSQLまたは違った方法を用いて
データの取得はできるということなのですよね?(解決ですよね?)


2.について

>HTML内にガリガリかけばいいのかもしれないのですが、おかげさまでそこそこの店数がありとてもこなせそうにないです
実際にプルダウンのリスト数が何件ほどになるのか分かりませんが、
echoやprintを使ってHTMLタグを書き出していく方法では処理速度がかかりすぎるのでしょうか?
例えばですが・・・
※PHPソースコードは見やすくするために全角の空白が入っています。
---------------------------------------
<?php
echo "<form>\n".
   "<input type=\"button\" value=\"ボタン\">\n".
   "<input type=\"submit\" value=\"送信ボタン\">\n".
   "<input type=\"reset\" value=\"リセットボタン\">\n".
   "<input type=\"text\" value=\"テキスト\">\n".
   "<input type=\"checkbox\">チェックボックス\n".
   "<input type=\"radio\" name=\"rbtn\">ラジオボタン1\n".
   "<input type=\"radio\" name=\"rbtn\">ラジオボタン2\n".
   "<select><option>コンボボックス<option>Item1<option>Item2</select>\n".
   "<select size=\"3\"><option>リストボックス<option>Item1<option>Item2</select>\n".
   "</form>";
?>
---------------------------------------
上記のようにechoを使えばPHPでHTMLタグを書き出すことができます。

なので以下のようにすると・・・
---------------------------------------
<?php
 //-------------------------------
 // 変数の設定
 //-------------------------------
 // 店番の配列
 $ID = array('001', '002', '003');
 // 店名の配列
$Data = array('A店', 'B店', 'C店');
 //-------------------------------
 // HTMLの表示
 //-------------------------------
 echo "店番: 店名<br>\n".
    "<select name=\"comb\">\n";
 // コンボボックスに配列の要素数分アイテムを追加する
 for($i = 0; $i < count($ID); $i++) {
  $Item = $ID[$i].":".$Data[$i];
  echo "<option value=\"$Item\">$Item\n";
 }
 echo "</select>\n";
?>
---------------------------------------
2.は解決すると思います。


3.について

これは、プルダウンで選んだアイテムから店番と店名の特定はできますよね?
それなので、SQL文を使って検索し、一致したデータを表示すればいいと思います。



見当違いな回答でしたら申し訳ありません^^;
Parent: 2212  reply: 2217 返信 編集 削除

[2217] ありがとうございます

user: たかぽん | created: 2005-03-28 20:33
ぱぴよん様 はじめまして
早速のアドバイスありがとうございます

頂きましたアドバイスをやってみてイメージ通りにできそうです

実はもう一つ分からない事がありまして、、、

>データの取得はできるということなのですよね?(解決ですよね?)
はい 雑誌等見てなんとか接続し取得出来たと思います


<?php
$conn=odbc_connect("****","****","****");
$sql="select 店番,店名 from 店舗 where 店名 between 001 and 199";
$res=odbc_exec($conn,$sql);

として変数$res に持たせてます

この変数$res をアドバイス頂いた$ID,$DATAに渡したいのですが
それが分かりません

なにとぞご教授の程よろしくお願いいたします
Parent: 2215  reply: 2218 2219 返信 編集 削除

[2218] sample

user: Smarty | created: 2005-03-29 00:16
PHPからODBC接続したことが無いので未確認。

$sql="select 店番,店名 from 店舗 where 店名 between 001 and 199";

このSQLでは、どちらがUNIQUEなIDなのか分からないので、「店番」をIDと仮定。

$res = odbc_exec($conn, $sql);

if (! odbc_error($res)) {
$option = '<select>';
while ($src = odbc_fetch_array($res)) {
$option .= '<option value="'.$src[0].'">'.$src[1]."</option>\n";
}
$option .= '</select>';

echo '<form action="/" method="post">
'.$option.'
</form>';
}

これくらいのsampleはググればすぐに出てきます。
Parent: 2217  返信 編集 削除

[2219] Re:ありがとうございます

user: ぱぴよん | created: 2005-03-29 11:28
>$sql="select 店番,店名 from 店舗 where 店名 between 001 and 199";
この部分の『店名 between 001 and 199";』は 店番の間違いですよね?
そのように判断してサンプルを作成してみました。

-----------------------------------------------------------------
<?php
   // 初期化
1.  $StoreID = array(); // 店番
2.  $StoreName = array(); // 店名
3.  $html = "<form name=\"Store\" action=\"アクションをするPHPファイルを指定して下さい\" method=\"post\">\n".
4.      "<select name=\"StoreName\">\n";
5.  // データベースとの接続処理
6.  $conn = odbc_connect('データベース名', '', '');
7. $sql = "SELECT 店番, 店名 FROM テーブル名 WHERE 店番 BETWEEN 1 AND 199 ORDER BY 店番";
8.  $res = odbc_exec($conn, $sql) or die ("データベース接続エラー");
9.  while(odbc_fetch_row($res)) {
10.  array_push($StoreID, odbc_result($res, '店番'));
11.  array_push($StoreName, odbc_result($res, '店名'));
12. }
13. odbc_close($conn);
14. for($i = 0; $i < count($StoreID); $i++) {
15.  $html .= "<option value=\"$StoreID[$i]\">$StoreName[$i]</option>\n";
16. }
17. $html .= "</select>\n</form>";
18. // HTMLの表示処理
19. echo $html;
?>
-----------------------------------------------------------------
少しだけ解説です。
1、2では配列を用意しています。
3ではHTML出力する変数を用意しています。
6ではデータベースに接続しています。
7ではSQL文を用意しています。
8ではSQL文を実行しています。
9ではSQL文によって絞り込んだレコード数だけ処理をします。
10ではテーブルのフィールド名が'店番'のものを取り出しています。
11ではテーブルのフィールド名が'店名'のものを取り出しています。
13ではデータベースから切断しています。
14では$StoreIDの要素数分(count(配列))だけ処理をします。
19ではHTMLへ出力しています。

前回は店番と店名を配列に格納して処理をしましたが、配列を使わなくてもできます。
今回のサンプルの場合は以下のようにすれば、配列を使わなくてもいいです。

-----------------------------------------------------------------
<?php
 // 初期化
 $StoreID = -1; // 店番
 $StoreName = ""; // 店名
 $html = "<form name=\"Store\" action=\"アクションをするPHPファイルを指定して下さい\" method=\"post\">\n".
     "<select name=\"StoreName\">\n";
 // データベースとの接続処理
 $conn = odbc_connect('データベース名', '', '');
$sql="SELECT 店番, 店名 FROM テーブル名 WHERE 店番 BETWEEN 1 AND 199 ORDER BY 店番";
 $res = odbc_exec($conn, $sql) or die ("データベース接続エラー");
 while(odbc_fetch_row($res)) {
  $StoreID = odbc_result($res, '店番');
  $StoreName = odbc_result($res, '店名');
  $html .= "<option value=\"$StoreID\">$StoreName</option>\n";
 }
 odbc_close($conn);
 $html .= "</select>\n</form>";
 // HTMLの表示処理
 echo $html;
?>
-----------------------------------------------------------------
※ソースコードには見やすくするために全角スペースが入っているので
 そのままコピペしてもエラーがでます。自分で確認しながら書いて下さいね^^

 今回の分で この前の2までは解決ですね。
 このサイトの左のPHPLinksの中に「PHP日本語マニュアル」というものがありますよね?
 ここをみると関数の詳しい説明などがあるので見てみて下さい(^-^/~~
Parent: 2217  reply: 2220 返信 編集 削除

[2220] 感謝です!

user: たかぽん | created: 2005-03-30 10:28
ぱぴよん様 丁寧なアドバイス大変ありがとうございます

頂きましたアドバイスに基づき試したところイメージ通り
になりました^^)
感謝致します ありがとうございました
当方PHP.HTMLを触り始めたばかりですのでかなりの素人です

日本語マニュアル等を見て修行してまいります
早くぱぴよん様のように的確なアドバイスが出来るようにがんばります
本当にありがとうございました
また分からないことがありましたらこの場で質問させて頂きたいと思いますので
その時はよろしくお願いいたします^^)


Smarty 様
アドバイスありがとうございます
もっとググリ方を研究してサンプルを見つけたいと思います
Parent: 2219  reply: 2221 返信 編集 削除

[2221] Re:感謝です!

user: ぱぴよん | created: 2005-03-30 12:37
たかぽんさんのお役に立てたようで私もよかったです^^

私もHTMLやPHPを始めて半年のひよっこです^^;
なので、まだまだ分からないことがたくさんあります。
お互いがんばっていきましょ(@^-^@)


>日本語マニュアル等を見て修行してまいります

マニュアルを見る癖をつけることはいいことだと思います。
私も分からないときなどにマニュアルを見て調べたりします。


>また分からないことがありましたらこの場で質問させて頂きたいと思いますので
>その時はよろしくお願いいたします

はい、私が分かる範囲でしたら一緒に考えていきたいと思います。
この場というのはこのスレッドのレスで質問されるということでしょうか?
(3の選んだ店情報を表示するがまだ終わっていないので)

実は3に対する簡単なサンプルも作成していましたが、次の質問の機会に ということにしておきますね^^
Parent: 2220  reply: 2230 返信 編集 削除

[2230] ぱぴよん様へ

user: たかぽん | created: 2005-04-04 19:46
ぱぴよん様、お世話になります^^
なんとか自前で苦労して「3」は出来たつもりです
ただもしもよろしければ後学の為にサンプルを
お見せいただけないでしょうか?
あつかましいお願いですがよろしければお願い致しますm(__)m
Parent: 2221  reply: 2231 返信 編集 削除

[2231] Re:ぱぴよん様へ

user: ぱぴよん | created: 2005-04-05 10:28
たかぽんさん、お久しぶりです。

>なんとか自前で苦労して「3」は出来たつもりです
苦労しながら作るとできたときに何だかうれしいですよね。 よかったですね^^

>ただもしもよろしければ後学の為にサンプルを
>お見せいただけないでしょうか?
大したサンプルではないので恐縮してしまいます^^;
下記にサンプルを載せておきます。
※いつものように全角スペースが含まれています。


-------------------------------------------------------------------------------------
 データベース名:StoreData
 テーブル名  :TStore_info
 フィールド名 :店番(int)、店名(char)、取扱い(char)、住所(char)、電話番号(char)

 //--------------------------------------------
 // main.php
 //--------------------------------------------
 <?php
  $html = "<form name=\"Store\" action=\"output.php\" method=\"post\">\n".
      "<select name=\"StoreID\">\n";
  $conn = odbc_connect('StoreData', '', '');
  $sql="SELECT 店番, 店名 FROM TStore_info WHERE 店番 BETWEEN 1 AND 199 ORDER BY 店番;";
  $res = odbc_exec($conn, $sql) or die("データベース接続エラー");
  while(odbc_fetch_row($res)) {
   $html .= "<option value=\"".odbc_result($res, '店番')."\">".odbc_result($res, '店名')."</option>\n";
  }
  odbc_close($conn);
  $html .= "</select>\n".
       "<input type=\"submit\" name=\"submit\" value=\" 詳細情報の表示 \">\n".
       "</form>";
  echo $html;
 ?>


 //--------------------------------------------
 // output.php
 //--------------------------------------------
 <?php
  ///////////////////////////////////
  // 関数
  ///////////////////////////////////
  // 店データを取得する関数
  function getStore_Info($StoreID) {
   global $Store_Info;
   $Result = True;
   if($StoreID == -1) $Result = False;
   if($Result) {
    $conn = odbc_connect('StoreData', '', '');
    $sql="SELECT * FROM TStore_info WHERE 店番=$StoreID";
    $res = odbc_exec($conn, $sql) or die("データベース接続エラー");
a.   for($i = 0; $i < odbc_num_fields($res); $i++) {
b.    $FieldName = odbc_field_name($res, $i + 1);
c.    $FieldData = odbc_result($res, $FieldName);
d.    $Store_Info[$FieldName] = $FieldData;
    }
    odbc_close($conn);
   }
   return $Result;
  }
  (1)
  // 詳細データを取得する関数
  function getFieldData($FieldName) {
   global $Store_Info;
e.  return $Store_Info[$FieldName];
  }

  ///////////////////////////////////
  // 初期化
  ///////////////////////////////////
  $Store_Info = array(); // 店情報
  $StoreID = -1; // 店番
  $html = "<p><input type=\"button\" name=\"return\" value=\" 店一覧へ戻る \" onClick=\"location.href='main.php';\"></p>\n";

  ///////////////////////////////////
  // 店番号の取得
  ///////////////////////////////////
f. if(isset($_POST['StoreID'])) $StoreID = $_POST['StoreID'];

  ///////////////////////////////////
  // 店情報の表示
  ///////////////////////////////////
  if(getStore_Info($StoreID)) {
       (※)
  } else {
   $html .= "<p>エラー</p>";
  }
  echo $html;
 ?>
-------------------------------------------------------------------------------------
(※)の部分は2種類用意しました。
1.(1)のgetFieldData(フィールド名)という関数により、
  指定フィールドデータを取得する方法(フィールド名と表示したい項目名が違う場合など)
$html .= "<table border=\"2\">\n".
     " <tr><td>登録店番号</td><td>".getFieldData('店番')."</td></tr>\n".
     " <tr><td>店名</td><td>".getFieldData('店名')."</td></tr>\n".
     " <tr><td>取扱い商品</td><td>".getFieldData('取扱い')."</td></tr>\n".
     " <tr><td>住所</td><td>".getFieldData('住所')."</td></tr>\n".
     " <tr><td>TEL</td><td>".getFieldData('電話番号')."</td></tr>\n".
     "</table>";

2.フィールド名をそのまま表示する場合
$html .= "<table border=\"2\">\n";
foreach($Store_Info as $Key => $Value) $html .= " <tr><td>$Key</td><td>$Value</td></tr>\n";
  $html .= "</table>";

表示するHTMLテーブルの形が複雑でループ処理による表示ができない場合は、
1.のような方法を取った方がいいかもですね^^


      【 output.phpについて 】

配列$Store_Infoに店情報を入れています。
この際、 キー => 値 という形で配列に格納し、
配列[キー]というようにキーを指定することで値を取得できるようにしています。

少しだけ解説です。
a.ではSQLで取得したフィールド数だけ繰り返します。
b.ではフィールド名を取得しています。
c.では指定したフィールド名のデータを取得しています。
d.では 配列[キー]=値 という風にフィールド名をキーとしてデータを格納しています。
e.キーを指定して値を取得しています。(格納時にフィールド名をキーとしているため、
 フィールド名を指定することで値を取得する)
f.ではmain.phpから送信されたStoreID(selectタグのname)という変数の値を取得しています。
 isset()は指定した変数に値がセットされていれば、Trueを返します。



分かりづらかったら申し訳ありません^^;
少しでもたかぽんさんのお役に立てば幸いです。
もし、質問や疑問などがありましたら、聞いて下さい。
私が答えられる範囲でしたら、答えようと思います。
分からない時は「分かりません」というかもしれませんが・・・
Parent: 2230  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 450 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑