PHP初心者です。
教えて下さい。お願いします。
下記のようなプログラムを組んでいます。
セレクトメニューで選択されたメニューの結果を変数に入れたいのですが、入ってくれません。変数の中身は空でした。
MySQLのテーブルからデータを読み出し、それをループでオプションを作成しております。セレクトメニューには正常に表示されておりますが、その表示され選ばれた内容のデータが、変数に入っておりません。どこが間違っているのでしょうか。ご教授下さい。
宜しくお願い致します。
---------------------------------------------------------------
<?php
//MySQLの記述は殆ど割愛しています。
$sql = "SELECT chimei from tbltest";
$rst = mysql_query($sql);
$i=0;$cnt=0;
while($col = mysql_fetch_array($rst)) { //地名のデータを、MySQLより読み込んでおります。
$arychimei[$i] = $col[chimei]; //テーブル(配列)に格納しております。
$i++;
}
//この画面で確認するためのフォームです。
$body .= "<FORM name = 'selectform' action = '$PHP_SELF' method='POST'>";
$body .="地 名
<SELECT name = 'chimei'>";
$body .= "<option selected> ";
for ($cunt=0;$cunt<=$i;$cunt++){
$body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt];
}
$body .= "</SELECT><BR>
<BR>
<BR>";
$body .= "<INPUT type = 'hidden' name = 'chimei' value = '$chimei'>";
$body .= "<INPUT type = 'submit' value = '検索'>
</FORM>
print "地名は".$chimei."です。<br>";
print $body;
?>
No.1ベストアンサー
- 回答日時:
こんばんは。
簡単に、改善のポイントだけ書きますね。
(1)値をとりたい<select>タグは、<form>~</form>の間にあることが必要
(2)<option>タグ中に value 属性が必要(の はず)
(3)submit ボタンをクリックしたときに<select>タグの内容を得るための
$chimei = $_REQUEST['chimei'];
という命令が、プログラム中で必要
です。参考にしてください。
この回答への補足
早速のご回答有り難う御座います。
(1)のFORMの件は、SELECTタグがFORMの間に入ってい ますので大丈夫ですね。
(2)はVALUEが無い場合は、OPTIONの値がそのままわたさ れますね。それで、このままでOKですね。
(3)試して見ましたが、駄目でした。
しかし、OPTIONの値を、ダイレクトに設定すると、問題なく値が渡されます。FOR文で値を入れると駄目なのです。
例えば、
$body .="地 名
<SELECT name = 'chimei'>";
$body .= "<option selected> ";
$body .= "<option> 東京
$body .= "<option> 名古屋";
$body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt];
これなら旨く値が渡されます。
$body .="地 名
<SELECT name = 'chimei'>";
$body .= "<option selected> ";
$body .= "<option> 東京
$body .= "<option> 名古屋";
</select>
補足で間違っておりました。
最後の一行は要りません。
上記が正解です。
すみません。
No.5
- 回答日時:
レスありがとうございます。
まず、回答しますね。$_REQUEST['~~'] は、プログラムのできるだけ先頭のほうに、入れてあげてください。そうすればプログラムのどこででも、その値を参照できるようになりますからね。
いや~、良かったですー robotanmarch さん! これで私も安心しました。今回のご質問によって、PHPに関して大きく進歩されたことと思います。
わからないことは遠慮しないで、ご自身の納得できるまで尋ねようとする姿勢には、感服です。robotanmarch さんは、きっと良いエンジニアになられることでしょう。
あと私の回答の中でけっこうキツい表現の部分があったこと、ひらにご容赦ください。
また何かありましたら、このコーナーでお尋ねになってみてください。もし私が見つけたら、わかる範囲でお答えしたいと思いますので。
では、頑張ってくださいね!
色々お世話になり有り難う御座いました。
これからも、少しずつですが勉強しながら頑張って行きたいと思います。非常に参考になりましたご指導を有り難う御座いました。
まだまだ道のりは遠いですけれど頑張ります。
有り難う御座いました。
No.4
- 回答日時:
レスありがとうございます。
>下記の記述の件ですが、「$body .=」は、イコールではなく、$bodyの変数に、HTMLのタグの文字列を加えて、PHPでのHTMLを表示するためのテクニックなのです。
それは分かりますが、私の申し上げたいのは、同式内の2番目の「=」、すなわち「 $option[$cunt] = 」の「=」がなぜ必要か、ということなのです。
>それと、name = ’chime’は、同名で無ければ次に変数を渡すことが出来ません。
いや、名前が違っても「 $_REQUEST['~~']; 」の「~~」の部分を変更すれば大丈夫なのでは?
>FOR文を使った部分にのみ何か問題が有るのかを…
うん、一箇所、気がついた点がありました。それは for 文。いま「 for($cunt=0; $cunt<=$i; $cunt++){ 」になってますが、
「 ... $cunt<$i; ... 」
が正解じゃないかと。質問者さんのコードだと、$iが3のとき、ループを4回まわってしまうことになり、<OPTION> が ひとつ余計にできてしまうのでは?と思いました。
この回答への補足
hkd9001さん有り難う御座いました。
お陰様で旨く動きました。
有り難う御座いました。
本当はお礼の所でお礼を申し上げたかったのですが、先程続けて質問を書きましたのでふさがっており、補足内容に書いております。
本当に有り難う御座いました。
原因は、やはり「<FORM> ~ </FORM>」の挿入位置が悪かったのです。質問の記述は正しかったのですが、私自身の本当のプログラムが間違っておりました。よく見ればとんでもないところに入っておりました。恥ずかしいです。
FOR文も参考になり助かりました。
ちゃんと旨く変数の値渡しが出来ましたので喜んでおります。
私のような馬鹿な初心者に助言を戴きまして本当に有り難う御座いました。まだまだこれからも疑問点が出てくるかと思いますが、どうか宜しくお願い申し上げます。
hkd9001さん本当に有り難う御座いました。
robotanmarch
度々のレス、本当に有り難う御座います。
「私の申し上げたいのは、同式内の2番目の「=」、すなわち「 $option[$cunt] = 」の「=」がなぜ必要か、ということなのです。」
上記の件は理解致しました。そうですね。考えて見れば必要有りませんね。
さらに、配列変数に入れ組み立てようとしていました。必要の無いことを理解致しました。有り難う御座いました。
下記の件も有り難う御座いました。
余分に1回回っており、余分のOPTIONが出来ており、スペースが表示されておりました。
修正を致しました。有り難う御座いました。
「 ... $cunt<$i; ... 」
しかし、未だ根本的には解決しておりません。
「名前が違っても「 $_REQUEST['~~']; 」の「~~」の部分を変更すれば大丈夫なのでは?」
このアドバイスに従い挑戦してみます。
しかし、この記述をどこに入れれば良いのかが分かりません。
<INPUT ~ ~ > の値を渡す為のSUBMITの所でしょうか。余り、良く分からないので困っております。
どうか、宜しくお願い致します。
No.3
- 回答日時:
レスありがとうございます。
まず、おわびです:
(1)の、<form>… の件は、私のカンちがいというか、見誤りでした.申し訳ないです。
(2)も… そうでした。お恥ずかしい!
さて本題ですが、for ループを使うと値がうまく取れない件。
$body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt];
の式なんですが、「=」が ふたつ入ってしまっていますねー。
ここは
$body .= $option[$cunt]."<OPTION>".$arychimei[$cunt]."</OPTION>"
と変更すれば、うまく行くのではないかな。
あと、#2 さんもおっしゃっていたけど、
$body .= "<INPUT type = 'hidden' name = 'chimei' value = '$chimei'>";
は名前を変更するか、これ自体を削除する必要があるでしょうね。
もし追加でご質問あれば、どうぞ。
この回答への補足
早速のレス有り難う御座います。
下記の記述の件ですが、「$body .=」は、イコールではなく、$bodyの変数に、HTMLのタグの文字列を加えて、PHPでのHTMLを表示するためのテクニックなのです。
$body .="<html>
<br><br>
<p><HR></html>";
このような使い方をします。PHPで簡単にHTMLの表示ができます。
この記述の最後で、「print $body;」でHTMLを表示させます。
ですから、これは、全く問題ありません。
$body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt];
print $body;
それと、name = ’chime’は、同名で無ければ次に変数を渡すことが出来ません。変数名を変更すれば、どの変数の中身を渡せばいいか、プログラムでは判断出来ないと思います。勿論受け取る側は同名でなくても良いでしょうけど。今送りタイのは、「'chimei'」なのです。
それと、ダイレクトにOPTIONを指定すると何も問題が全くないのです。この同じ記述方法でダイレクトにOPTIONを指定している部分だけ旨く変数渡しが行われています。それで、FOR文を使った部分にのみ何か問題が有るのかを教えて戴きたいと思っております。
お世話掛けますが宜しく御願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【PHP&JavaScript】複数の別ウ...
-
<select>文、foreachと初期値設定
-
foreachで次の行の値を取得して...
-
UPDATEの記述について
-
PHP データベース データ更新
-
PHPで画像の渡しが上手く行きま...
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
phpで掲示板を作りたい
-
POSTを使わずに値を渡す方法
-
変数のパターン処理パート3
-
<input type="hidden" >で配列...
-
Submit(送信ボタン)を押した...
-
SQLとPHPの連結方法がわからな...
-
ローカルにあるhtmlのフォーム...
-
smartyでチェックボックスをチ...
-
DBから読み込んだ買い物リスト...
-
集計結果をiframeの中に表示す...
-
phpでの複数選択チェックボック...
-
XMLデータをPOSTで送信・受信す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
input type="hidden"で送る値を...
-
連動させたいセレクトボックス...
-
【PHP&JavaScript】複数の別ウ...
-
セレクトしたときに全て初期状...
-
複数 selectフォームから今回on...
-
RDFの名前空間の要素をxpathで...
-
HTML_QuickFormのチェックボッ...
-
phpのプルダウンメニューで選ん...
-
複数のセレクトボックスを1つに...
-
PHPをはじめ早くも壁に当たって...
-
プルダウンで選択された値を保持
-
ループでチェックボックスにche...
-
foreachで次の行の値を取得して...
-
PHPでの変数の扱い方
-
コンボボックス(プルダウン)...
-
セレクトメニューの値が旨く得...
-
自作ブログのPing送信について
-
ドロップダウン、ラジオボタン...
-
ウェブ上で選択した複数行の内...
-
mysqlからのコンボボックスにつ...
おすすめ情報