ここまで、表示部は順調に製作してきたつもりですがひとつ問題点が出てきました。
Perlなどで今まで作ってきたプログラムは、1つのファイルでGETやPOSTから受け取った値を
使用して処理を分岐するように作っていました。
しかし、今回はなんとなく役割ごとにファイルを分けてしまったのです。
何が問題かというと、投稿した後にどうやってトピックのページやメッセージのページを
表示させるかということです。
1つのファイルで(includeやrequireは除く)実行している場合は、テンプレートを切り替えて
などと考えられるのですが・・・
そこで、いろいろ調べてみたところリダイレクトという方法が使えそうです。
ステータスコード301と302といわれるもので、ほとんどのWebブラウザは自動的に
このコードを認識し、リダイレクト先のURLを読みに行きます。
phpでこれを実現するには、header関数を使用します。
header関数は、生のHTTPヘッダを送信します。この関数を使ってLocationヘッダを
送信することでリダイレクト(ステータスコード302)が実現できます。
それでは、ソースです。
if($_POST['pid'] != ''){ header("Location: http://localhost:80/msg.php?fid=" . $_POST['fid'] . "&tid=" . $_POST['tid'] . "&pid=" . $_POST['pid']); } else{ header("Location: http://localhost:80/topic.php?fid=" . $_POST['fid'] . "&tid=" . $_POST['tid']); }
このリダイレクトは、後々使えそうなので関数としてまとめてもよさそうですね。
$_POSTというスーパーグローバル変数が登場しています。
これは、投稿部分はメッセージなどの大きな情報を受け取るためPOSTメソッドでデータをやり取りしています。
その際、HTMLのhiddenを使用して必要なID情報を受け渡すようにしています。
例:テンプレート(hidden)
<form name="post" method="post" action="post.php"> <table bgcolor=#FFFFFF cellspacing=0 cellpadding=0> <tr><td> <table width=700> <tr bgcolor=#7B9FB6> <td colspan=2 align=center>新規投稿</td> </tr> <tr bgcolor=#E7EFF0> <td valign=top><b>subject:</b></td><td><input type="text" name="subject" size="50"> <input type="hidden" name="fid" value={$getdata.fid}> <input type="hidden" name="tid" value={$getdata.tid}> <input type="hidden" name="pid" value={$getdata.pid}> <input type="hidden" name="pg" value={$getdata.pg}> </td> </tr> <tr bgcolor=#E7EFF0> <td valign=top><b>name:</b></td><td><input type="text" name="name" size="50"></td> </tr> <tr bgcolor=#E7EFF0> <td valign=top><b>message:</b></td><td><textarea name="message" cols="70" rows="15"></textarea></td> </tr> <tr bgcolor=#E7EFF0> <td> </td><td><input type=submit value="投稿"></td> </tr> </table> </td></tr> </table> </form>
これで、リダイレクトはできるようになりました。
Copyright 1997-2010 BBB All rights reserved.