• ベストアンサー

whileループの中でフォーム入力を入れられますか?(ループする処理メニュー選択の書き方)

whileループの中にフォーム入力を入れたphpスクリプトを、ブラウザから指定しても何の動きもありません。 操作メニューをフォーム入力によって指定し、処理が終わればまた戻ってくる構造を、1つのセッションの中で行いたい場合はどのように記述すれば適切でしょうか。 実験したスクリプトは次のものです。 なお、このスクリプトからwhile文を削除した場合の動作は正常でした。 phpのバージョンは4.3.10です。 <?php // // form入力が入っているwhileループの実験 // while ($_POST['select_num'] != 2) { if (!isset($_POST['select_num'])) { $location_next = $_SERVER["PHP_SELF"]; print "<form method=\"post\" action\"{$location_next}\">"; print "<input type=\"radio\" name=\"select_num\" value=\"1\">選択1"; print "<br><br>"; print "<input type=\"radio\" name=\"select_num\" value=\"2\">中止"; print "<br><br>"; print "<input type=\"submit\" name=\"sbmt1\" value=\"OK\">"; print "</form>"; } else { print ("select_num = " . $_POST['select_num']); print "<br>"; } // if文の終了 } // while文の終了 print ("select_num = " . $_POST['select_num']); print "<br>"; print "whileループを終了しました<br>"; ?>

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

ちゃんとプログラムのフロー(流れ)を考えましょう。 $_POST['select_num']が2以外の時に永久ループに入ります。

RASUM2
質問者

お礼

Bonjin様、ありがとうございます。 「最初のフォームの記述の部分でプログラムがストップしてユーザーからの入力を待つ」と誤って考えていました。 「スクリプトの最後までプログラムが全て実行された中で、フォーム画面が表示されている」と理解するする必要がありました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

欲を言えば可能な限りヒアドキュメントで書けば HTMLレベルでの文法ミスが減るかと。

RASUM2
質問者

お礼

yambejp様、ありがとうございます。 やはりそうですか。 「ヒアドキュメントを利用するか」「どちらでもよい引用符をシングルにするかダブルにするか」については、適当にしている面が強いです。 「ヒアドキュメントを利用する」「展開する必要のない文字列はシングルコーテーションで囲む」というのが望ましい姿でしょうね。

関連するQ&A