
SELECT結果から動的にコンボボックスを作りたい
SELECT結果を元に、コンボボックスを作りたいと思っています。
テーブル「bunsyo_tbl」から、3行の結果を受け取った時、
3回だけ回るループの中で動的にhtmlを作成し、コンボの行数を増やす、
といった事を実現させたいのですが、ループ内でhtmlを作成する部分が上手く行きません。
ご教授頂きたく質問いたします。
当方の環境はOSはWinXP SP3、
?Apache 2.0.63
?PHP 5.2.6
?Mysql 5.0.51b
です。
テーブル「bunsyo_tbl」の内容は
bunsyo_id | bunsyo_name | maker
2345 | 鋼材購入明細 | 1
3322 | 耐圧試験結果 | 1
3442 | 腐食箇所リスト| 1
PHPとhtmlのソースは最後に書きます。(長いので)
目的は、PHP変数$temphtml の中身を、
<option value="2345">鋼材購入明細 </option>
<option value="3322">耐圧試験結果 </option>
<option value="3442">腐食箇所リスト</option>
と、して、html文の中で<? $temphtml ?>で呼びコンボの行数を増やす事です。
WAMPに触れ2週間が経つ初心者です。
本質問前に十分に調べ、確認したつもりではいますが、
的外れな質問や、意味の通らない文章になっていましたらすいません。
よろしくお願いします。
--------------------
<?php
(接続部省略)
require_once("connect_db.php");
// select実行
$sql = "SELECT bunsyo_id,bunsyo_name FROM bunsyo_tbl WHERE maker = 1" ;
$result = executeQuery($sql);
//結果セットの行数を取得する。
$rows = mysql_num_rows($result);
//コンボボックスの不定部分のhtml作成
if($rows2){
while($row = mysql_fetch_array($result)) {
print($row['bunsyo_id']);
print($row['bunsyo_name']);
$temphtml .= "<option value=" .$row["bunsyo_id"]. ">" .$row["bunsyo_name"]. "</option>";
print($temphtml);
}
$msg = $rows."件のデータがあります。";
}else{
$msg = "レコード0件";
}
?>
<!--コンボボックス作成。初期は空白選択-->
<select name="doc_comb" size="1">
<option value="" selected="selected"></option>
<? $temphtml ?>
</select>
No.4ベストアンサー
- 回答日時:
直接関係ないけど気になったこと
○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);等のデバッグコードの出力結果を教えて貰えませんか?
この回答への補足
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が表示されていません。
BellBell様、そして皆様、ありがとうございます。
解決いたしました。
修正箇所は自作関数executeQuery ではなく
DB接続、DB選択、mysql_queryと順を追ったソースに書き直す。
Html内で<?= .$tempHtml ?>と記述している箇所からピリオドを削除する。
これらの修正で解決する事が出来ました。
解決しない間は慌てて居ましたがこうして解決した今、
落ち着いてエラー文を読む事と、
手順をさかのぼる事で気づく事が出来る内容であったとも感じます。
今後は、もう少し落ち着いて確認する事を心がけたく思います。
初歩的な原因にも関わらず、皆さんがお時間を割き回答してくださった事に感謝します。
ありがとうございました。
No.5
- 回答日時:
ん?
3の方の補足に書かれた下のものと、質問文は違うぞ。
<?= .$tempHtml ?>
これ、余分な.(ピリオド)入ってるし、エラーメッセージもピリオドが邪魔だって書いてる。
元ソースではピリオド入っていて、それがエラー?
No.3
- 回答日時:
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の中身は意図した文字列が入っています。
No.2
- 回答日時:
"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から、以上の点に注意して再度ソースを修正します。
ありがとうございます。
No.1
- 回答日時:
if($rows2){
の変数$rows2はどこから出てきた変数?
この回答への補足
何度もすいません…
誤 rows2
正 rows
です。
間違いの訂正まで間違うとは…本当に面目ないです。
こんなミスをする状態ですので自分のソースも再度見直す事にします。
doran357 さん、すいません。
誤 rows
正 rows
です。
作成中のソースの別の箇所で、別の問い合わせを実行していまして、
変数名にrows_【番号】で管理しています。
こちらに質問を掲載する際に番号部分を消したつもりでしたが
洩れがありました、失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
配列の値の更新方法について
-
PHPの構文で間違えが分からない
-
SFTPなどは使わないホームペー...
-
$_SESSIONに渡した後はそのまま...
-
($_POST['email']??"", ・・・...
-
phpのエラーについて
-
PHP MySql 画像を取得
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
PHP8でWarning:Undefined varia...
-
marginの値でマイナス値を設定...
-
phpでcookieがうまく保存されない
-
SplFileObject を利用したとき...
-
PHPSpreadsheetを使って関数を...
-
PHPSpreadsheetによる書き出し...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
PostgreSQLからCSV形式でエクス...
-
PHPを使って、別サイトの一部を...
-
BASIC認証のフォームをデザイン...
-
入力した部分を表示させたまま...
-
【初心者】XAMPPのapacheの(恐...
-
ログイン機の付きの掲示板サイ...
-
ワードプレスサイト PHP8.0.25...
-
Postgresの特定のカラムからス...
-
PHPで画像の渡しが上手く行きま...
-
PHPの勉強してます。 配列のと...
おすすめ情報