- ベストアンサー
メタタグを使わないリフレッシュ方法
こんにちは。 メールフォームをPHP1ページで作りました。 フォーム→確認画面→送信完了(ありがとう)画面という流れです。 質問は、最後の送信完了10秒後に自動的に画面をリフレッシュさせる方法についてです。 <meta http-equiv='refresh' content='10;url=.....'>で出来ますが、 知っての通りメタタグは、Head間に書くのが普通です。 ですが、現在はやむを得ず、Body間に書いています。 そこで、JavaScriptか何かで同様な事ができないか、教えて下さい。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#4 です。 #123 行目から、 > }elseif($_POST['action'] == "send"){ > //フォームデータの取得 と書かれている行がありますね。これが、メール送信ページへの遷移を決定している条件です。ですので、この条件と同一条件の時、meta タグを表示して挙げれば良いでしょう。 こんな感じになると思います。 > <HTML> > <HEAD> > <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis"> > <TITLE>KOMOメール</TITLE> > </HEAD> の部分を、 > <HTML> > <HEAD> > <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis"> > <?php > if ($_POST['action'] == "send") { > ?> > <meta http-equiv='refresh' content='10;url=.....'> > <?php > } > ?> > <TITLE>KOMOメール</TITLE> > </HEAD> の様に変更してください。これでOKだと思います。 > function echo_foot(){ > print<<<EOD > <td>$name........</td></tr></table></body></html> > EOD; > }//本当はもっと長いコードです。 > というのを、使いまわすために、echo_foot()という関数化したのですが、 > それをprintするときは、どうやって呼び出せば良いのでしょうか? > echo "echo_foot()"; > こんなので良いのでしょうか? > 各場所に、print<<<EOD(中略)EOD;って書けばいいだけなんですが、 > なるべくコードを短くしたいんです。 関数として定義しているので、 echo_foot(); と書けば、定義された関数が呼び出されます。表示と言う意味では、関数の中で > print<<<EOD の部分で表示しています。 <<<EOD と書くと(別に、EODである必要は無いのですが。)EODがでてくる迄の内容を<<<の前に指定した処理などに引き渡します。この場合、 > print<<<EOD となっているので、EODがでてくるまでの全ての文字列をprintへ引き渡す。と読みます。
その他の回答 (4)
- Dpop
- ベストアンサー率51% (279/544)
#3 です。 スクリプトの所在などを教えて頂ければ、どの様に記述したら良いのか。(いや、どの当たりを見れば良いのか。の方が良いのかな?)アドバイスすることもできますが。。。 まぁ、取敢えず当初の目的を達することができたらしいので、良いのかな?!
お礼
どうも色々とお世話になります。
補足
スクリプトは、KOMONETさんの「フォームメール」のタイプ1(PHP4.2.0)を改造してつくっています。 http://www.komonet.ne.jp/script.htm ちょっとその他の事で教えてもらいたいのですが、例えば、 function echo_foot(){ print<<<EOD <td>$name........</td></tr></table></body></html> EOD; }//本当はもっと長いコードです。 というのを、使いまわすために、echo_foot()という関数化したのですが、 それをprintするときは、どうやって呼び出せば良いのでしょうか? echo "echo_foot()"; こんなので良いのでしょうか? 各場所に、print<<<EOD(中略)EOD;って書けばいいだけなんですが、 なるべくコードを短くしたいんです。 よろしくお願いします。
- Dpop
- ベストアンサー率51% (279/544)
#1 です。 まず。根本的な条件なのですが。僕は、waterclockさんの使われているスクリプトを知らないので、*こう言う方法で処理できるハズ*と言うレベルの話ししかできません。 なるべく丁寧に説明しますが、不明な部分があったら、良く整理して再度質問してくださいね。 > ちょっとわからないのですが、$mode == "completion"とは > 何でしょうか? コメントとして記述したのですが、 > // 送信完了ページの時 と言う条件のチェックです。1本のスクリプトで、 > フォーム→確認画面→送信完了(ありがとう)画面 の各画面を作成していると言うことなので、スクリプトの中では、現在どの画面の状態なのか。と言う情報を持っています。示した例では「$mode」と言う変数にそれが入っている物と見なし、「completion(完成する。って言う意味。)の文字列が入っていたら、送信完了の画面へ遷移するのだな。と見なしてみました。 実際のスクリプトの内容とは当然違っているハズです。waterclockさんのレベルが分からなかったので、このレベルの説明は省略してしまいました。 > <html><head></head><body>ここにPHP</body></html>としています。 ですよね。 まず。 > フォーム→確認画面→送信完了(ありがとう)画面 の各画面へ遷移させるための遷移条件を探してください。<form>タグの近くを探せば見つかるハズです。多くのスクリプトでは $mode なんて変数が良く利用されますが。。。スクリプトを丹念に見ていると、<form>タグの付近に、それらしい変数が利用されることを見つけられると思います。特に、<input type="hidden"~ を丹念に確認してみてください。 次に、 > <html><head></head><body>ここにPHP</body></html>としています。 を > <html><head> と > </head><body>ここにPHP</body></html> に分離してください。その上で、 <?php // 送信完了ページの時 if ($mode == "completion") { ?> <meta http-equiv='refresh' content='10;url=.....'> <?php } ?> この様なコードわ追加してください。 当然。$mode の部分には、探して頂いた遷移を決定している変数名が入りますし、"completion"の部分には、送信完了(ありがとう)画面へ遷移されるための条件(これから、送信完了(ありがとう)画面を作成するための条件。)が入ります。 要するに。送信完了(ありがとう)画面へ遷移する時だけ、<meta>タグを挿入する様に、スクリプトを改造して挙げれば良いのです。 多分。ポイントを掴めば、それほど難しい作業ではないと思います。頑張ってくださいね(^_^) 始めにも書きましたが、不明な部分があれば、整理して再度質問して頂けると良いと思います。既存のプログラムを改造することは、プログラミングのテクニックを身に付ける一つの方法です。始めは大変かも知れませんが、徐々に自分なりのプログラム(スクリプト)が書ける様になると思います。PHPは決して難しい言語ではありませんから。ぜひ頑張ってくださいね(^_^)
お礼
どうも丁寧にありがとうございます。 本当は、JavaScriptより、Dpopさんのような事がしたいのですが、 レベルが違いすぎるような(^^;) ちょっと、やってみますが、かなり時間がかかりそうで。 取りあえず、お礼しておきます。
- todo36
- ベストアンサー率58% (728/1234)
キーワードだけ javascript タイマ reload
お礼
情報、ありがとうございます。 JavaScriptでは、おかげさまで動作しました。
補足
setTimeout()しか浮かばなかったのですが、まだ他にあるのでしょうか? <script type='text/javascript'> setTimeout(\"location.href='$PHP_SELF'\",10000); </script>
- Dpop
- ベストアンサー率51% (279/544)
JavaScrip じゃ無いのですが。。。 mataタグではダメな理由ってなんでしょうか? PHPで作られているのなら、別にmetaタグを使えば良いのに。。。 と思うのです。 headは<?php~?>の外にあるから。って言う理由じゃ無いかな?と言う想像なのですが、例えば、 <?php // 送信完了ページの時 if ($mode == "completion") { ?> <meta http-equiv='refresh' content='10;url=.....'> <?php } ?> なんて書くのではダメですか?
お礼
情報ありがとうございます。
補足
PHPの初心者でフリーPHPをカスタマイズしているものですから、 ちょっとわからないのですが、$mode == "completion"とは 何でしょうか? フォーム→確認画面→送信完了(ありがとう)画面という3つの ステージを、ヘッダとフッタを関数化せずに、ただ、 <html><head></head><body>ここにPHP</body></html>としています。 ですから、3つのステージでは、 echo "</body>\n"; echo "</html>\n"; exit; を入れています。その中の最後のステージで、 echo "<meta http-equiv='refresh' content=\"10;url=$PHP_SELF\" />\n"; echo "</div>\n"; echo "</body>\n"; echo "</html>\n"; exit; } ?> としているので、どうしてもbodyの中にメタタグが入ってしまうんです。 もう少し教えて下さい。よろしくお願いします。
お礼
どうも、色々とありがとうございました。 おかげさまで、完全に解決しました。 内部で、少々$_PHP_SELPを使うために、ソーズの順番を変更して、 <?php if ($_POST['action'] == "send") { echo "<meta http-equiv='refresh' content=\"10;url=$PHP_SELF\" />\n"; } ?> これで、問題なく動作しました。 それから、print<<<EOD.........EOD; //EODていうのは、PHPマニュアルサイトで見てみると、 そういった決めは特にないんですね。 echo "......\n";を書かなくてもHTMLタグそのままで、 結構使えそうで、おもしろくなりそうです。 また、お願いします。ありがとう。