- ベストアンサー
SELECT結果から動的にコンボボックスを作りたい
- SELECT結果を元に、コンボボックスを作りたいと思っています。
- テーブル「bunsyo_tbl」から、3行の結果を受け取った時、3回だけ回るループの中で動的にhtmlを作成し、コンボの行数を増やす、といった事を実現させたいのですが、ループ内でhtmlを作成する部分が上手く行きません。
- 目的は、PHP変数$temphtml の中身を、<option value="2345">鋼材購入明細 </option><option value="3322">耐圧試験結果 </option><option value="3442">腐食箇所リスト</option>として、html文の中で<? $temphtml ?>で呼びコンボの行数を増やす事です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
直接関係ないけど気になったこと ○executeQuery ←自作関数ですかね? 関数内でmysql_queryを呼び出す? ○$resultのエラーチェックをしていない ○print($row['bunsyo_id']);を含む3か所のprint文、デバッグ用ですかね? 個人的には、デバッグ用の場合print_r または、var_dump、のどちらかを使用します。 理由は、リリース時の削除忘れ防止。 printやechoは、通常の出力としてもよく利用されるため、最終的に検索して単純に削除するわけにはいかないから。 print_r、var_dumpは事実上デバッグ出力専用の為、リリース時に検索して見つかったら何も考えずに削除しても問題ない為。 ○<? $temphtml ?> ←ショートタグ有効なんですね? 個人的には、ショートタグ使わず <?PHP $temphtml ?>とします。 たまたま使用しているレンタルサーバがデフォルトではショートタグを使用できなかったためでもありますが、他サーバーに乗り換えた際等にでも、確実に動作する方を選んでおくとトラブルが少ないと思ったので。 最後に print($temphtml);等のデバッグコードの出力結果を教えて貰えませんか?
その他の回答 (4)
- BellBell
- ベストアンサー率54% (327/598)
ん? 3の方の補足に書かれた下のものと、質問文は違うぞ。 <?= .$tempHtml ?> これ、余分な.(ピリオド)入ってるし、エラーメッセージもピリオドが邪魔だって書いてる。 元ソースではピリオド入っていて、それがエラー?
- doran357
- ベストアンサー率24% (23/93)
mysql_queryではなくてexecuteQueryを使っている理由は? >ループ内でhtmlを作成する部分が上手く行きません。 どううまくできない?
補足
doran357さん、ありがとうございます。 executeQueryを使っている理由は、WAMPの入門的な参考書で 最初に知ったサンプルソースで $sql = " (ここで直書き)"; $result = executeQuery($sql); と言う書き方をしていた為その書き方を使い続けています。 どう上手く行かないかと申しますと、ページロード時に下記エラーが出ます。 Parse error: syntax error, unexpected '.' in C:\Program Files\VertrigoServ\www\garyu\menue.php on line "A" ("A"はhtml側の <?= .$tempHtml ?> を記述した行) また、 <?= 'コンボ用html=' .$tempHtml ?> の、一行を挿入した際には、$tempHtmlの中身は意図した文字列が入っています。
"connect_db.php" で定義されているであろう関数 executeQuery ないしは変数 $rows2に問題はありませんか? htmlのoption部分のみですが、下記のような感じで動くと思います。 日本語の部分にはご使用のMySQLのパラメータを入れてください。 ------------------------ $con = mysql_connect(ホスト名, ユーザー名, パスワード); mysql_select_db(データベース名, $con); $sql = 'select * from bunsyo_tbl;' $res = mysql_query($sql, $con); $temphtml .= ''; while ($row = mysql_fetch_array($res)) { $temphtml .= "<option value=\"{$row['bunsyo_id']}">{$row['bunsyo_name']}</option>\n" } my_sql($con);
お礼
i80286さん、ありがとうございます。 自作関数ではなく、DB接続、DB選択、そしてmysql_queryを使用する。 文字列を格納する$temphtmlを、$temphtml .= ''; と、はじめに初期化する。 皆様の回答とi80286から、以上の点に注意して再度ソースを修正します。 ありがとうございます。
- doran357
- ベストアンサー率24% (23/93)
if($rows2){ の変数$rows2はどこから出てきた変数?
お礼
doran357 さん、すいません。 誤 rows 正 rows です。 作成中のソースの別の箇所で、別の問い合わせを実行していまして、 変数名にrows_【番号】で管理しています。 こちらに質問を掲載する際に番号部分を消したつもりでしたが 洩れがありました、失礼しました。
補足
何度もすいません… 誤 rows2 正 rows です。 間違いの訂正まで間違うとは…本当に面目ないです。 こんなミスをする状態ですので自分のソースも再度見直す事にします。
お礼
BellBell様、そして皆様、ありがとうございます。 解決いたしました。 修正箇所は自作関数executeQuery ではなく DB接続、DB選択、mysql_queryと順を追ったソースに書き直す。 Html内で<?= .$tempHtml ?>と記述している箇所からピリオドを削除する。 これらの修正で解決する事が出来ました。 解決しない間は慌てて居ましたがこうして解決した今、 落ち着いてエラー文を読む事と、 手順をさかのぼる事で気づく事が出来る内容であったとも感じます。 今後は、もう少し落ち着いて確認する事を心がけたく思います。 初歩的な原因にも関わらず、皆さんがお時間を割き回答してくださった事に感謝します。 ありがとうございました。
補足
BellBellさん、ありがとうございます。 >executeQuery と mysql_query executeQuery 内で $link = mysql_connect($url,$user,$pass) or die("接続失敗msg"); $sdb = mysql_select_db($db,$link) or die("DB選択失敗msg"); $result = mysql_query($sql, $link) を、それぞれ実施していました。 >printやechoは、通常の出力としてもよく利用される これは…大事そうですね。参考になります。 >デバッグ出力結果 html内に <?= 'コンボ用html=' .$tempHtml ?> を追記した結果、ブラウザ上では コンボ用html=鋼材購入明細耐圧試験結果耐圧試験結果 と表示されています。 IDが表示されていません。