[PHP-users 20931]Re: POSTとGETの値を次のソースに引き継ぐ方法
PHPユーザー
php_user_desu @ yahoo.co.jp
2004年 3月 23日 (火) 17:11:24 JST
こんにちわ。
> 入力フォームで入力後「登録」で、php を呼び出します。そこで
> 入力チェックを行い、エラーがあれば、入力フォームに戻って再入力を
> 出来るようにしようと思っています。
>
> input.php ---(登録)---> check.php ---(OK:登録)---> db.php
> -(ERR:再入力)---> input.php
>
> そこでPOSTやGETの値ですが、db.phpやinput.phpに引継ぐ方法はありま
> すか。出来れば、check.phpが受取内容と全く同じように引継げればと
> 考えています。
ファイルを「input.php」「check.php」「db.php」と処理単位で分割して
いるのは、そもそも何が目的でしょうか?
おそらく、後々のメンテナンス性等を考慮しての事だと思うのですが、も
しそうだとしたら、以下のような感じにすれば楽ではないかと思います。
hidden・クッキー・セッションのいずれも使いません。
※■はそれぞれ別ファイル
■main.php
require('input.php');
require('check.php');
require('db.php');
switch($_POST['mode']) { //$_POST['mode']をそのまま使うのは×だけど
case 'form_input':
check_hoge($_POST);
break;
default:
input_hoge();
}
■input.php
function input_hoge($p_post_value = '', $p_err_message = '') {
if ($post_value && $p_err_message) { //エラー時
//$p_err_messageをエラーメッセージとして表示
//$post_valueの中身をフォームの値として格納
} else { //初回表示時
}
print<<<__HTML__ //HTMLはこんな感じで
<form action="main.php" method="post">
<input type="hidden" name="mode" value="form_input">
フォームの中身色々(エラー時は$post_valueの中身を表示)
<input type="submit">
</form>
__HTML__;
}
■check.php
function check_hoge($p_post_value) {
$err_ary = array(); //エラーメッセージを格納する配列
$p_post_value = convert_post_value($p_post_value); //POSTの中身を必要に応じて変換
// $p_post_valueをチェックする処理諸々割愛 //
if ($err_ary) { //エラー発生時エラーメッセージとPOSTの値をinput_hoge()に返す
input_hoge($p_post_value, implode('<br>', $err_ary));
} else { //エラーなしならDB処理
db_hoge($p_post_value);
}
}
■db.php
function db_hoge(&$p_post_value) {
// DBに関する処理 //
}
main.phpが本体で、hiddenで渡される$_POST['mode']の中身に従い、処理
を分岐させています。
上記の方法であれば、$_POSTはスーパーグローバル変数ですので、フォー
ムの値は各関数で参照渡ししていけばいいだけです。簡単なテンプレート
的なものを作っておけば、使いまわしも効いて便利ですよ。
もちろん、上記程度の処理であればファイルを分割する必要性は全くあり
ませんが、どんどん処理が増えていっても簡単に対応できるのも、この方
法の利点です。
私はperlをやってた時代から上の方法でやってますが、何か問題点があり
ましたら、ご指摘お願いします。
--
php_user_desu @ yahoo.co.jp
__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/
PHP-users メーリングリストの案内