[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 メーリングリストの案内