プロが教えるわが家の防犯対策術!

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>

A 回答 (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);等のデバッグコードの出力結果を教えて貰えませんか?

この回答への補足

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が表示されていません。

補足日時:2010/03/15 20:05
    • good
    • 0
この回答へのお礼

BellBell様、そして皆様、ありがとうございます。
解決いたしました。

修正箇所は自作関数executeQuery ではなく
DB接続、DB選択、mysql_queryと順を追ったソースに書き直す。
Html内で<?= .$tempHtml ?>と記述している箇所からピリオドを削除する。
これらの修正で解決する事が出来ました。

解決しない間は慌てて居ましたがこうして解決した今、
落ち着いてエラー文を読む事と、
手順をさかのぼる事で気づく事が出来る内容であったとも感じます。
今後は、もう少し落ち着いて確認する事を心がけたく思います。

初歩的な原因にも関わらず、皆さんがお時間を割き回答してくださった事に感謝します。
ありがとうございました。

お礼日時:2010/03/15 20:34

ん?


3の方の補足に書かれた下のものと、質問文は違うぞ。
<?= .$tempHtml ?>
これ、余分な.(ピリオド)入ってるし、エラーメッセージもピリオドが邪魔だって書いてる。

元ソースではピリオド入っていて、それがエラー?
    • good
    • 0

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の中身は意図した文字列が入っています。

補足日時:2010/03/15 19:54
    • good
    • 0

"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);
    • good
    • 0
この回答へのお礼

i80286さん、ありがとうございます。

自作関数ではなく、DB接続、DB選択、そしてmysql_queryを使用する。
文字列を格納する$temphtmlを、$temphtml .= ''; と、はじめに初期化する。

皆様の回答とi80286から、以上の点に注意して再度ソースを修正します。
ありがとうございます。

お礼日時:2010/03/15 20:10

if($rows2){


の変数$rows2はどこから出てきた変数?

この回答への補足

何度もすいません…
誤 rows2
正 rows
です。

間違いの訂正まで間違うとは…本当に面目ないです。
こんなミスをする状態ですので自分のソースも再度見直す事にします。

補足日時:2010/03/15 19:41
    • good
    • 0
この回答へのお礼

doran357 さん、すいません。
誤 rows
正 rows
です。

作成中のソースの別の箇所で、別の問い合わせを実行していまして、
変数名にrows_【番号】で管理しています。
こちらに質問を掲載する際に番号部分を消したつもりでしたが
洩れがありました、失礼しました。

お礼日時:2010/03/15 19:16

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