HTML_QuickForm  with  Smarty

■サンプル画面
 
こんな感じの動きです。


検索ボタンを押す




・編集処理
ラジオボタンで選択し、編集ボタンを押す



入力したら内容確認ボタンを押す



確認画面でOKなら登録ボタンを押す

・削除処理
ラジオボタンで選択し、編集ボタンを押す



削除確認画面でOKなら削除ボタンを押す
こんな感じの処理です。
■Form ・これは基底クラスです。
<?php
// QuickFormを使用したフォームの基底クラス
require_once "HTML/QuickForm.php";
require_once "HTML/QuickForm/Rule.php";

// 相性判定フォームクラス
class Okushin_QF_Form {
    var $_form;
    var $buttons = array();

    // コンストラクタ
    //      $argAction : 「送信」ボタンのリンク先
    function Okushin_QF_Form($frmName, $argAction) {
        $this->_form = new HTML_QuickForm($frmName, 'post', $argAction);
        $this->_form->registerRule('date_check', null, 'QF_Check_Date');
        $this->_form->registerRule('time_check', null, 'QF_Check_Time');
        $this->_form->registerRule('all_req', null, 'QF_Check_AllReq');
    }

    // ボタンを作る
    function createButton($argSubmitName, $argText) {
        $this->buttons[] = &HTML_QuickForm::createElement(
                               'submit', $argSubmitName, $argText);
    }

    // ボタン・グループを作る
    function addButtonGroup() {
        $this->_form->addGroup($this->buttons, "BTNG", null, '&nbsp;');
    }

    // 正しく入力されているかチェックする。
    function chkValidate() {
        return $this->_form->validate();
    }

    // 入力された値を取得する。
    //      戻り値:要素名と入力された値の連想配列
    function getVals() {
        $get_val = $this->_form->exportValues();
        while (list($key, $val) = each($get_val)) {
            $_SESSION["$key"] = mb_convert_kana($get_val["$key"], "KV");
        }
    }

    // 要素へ値を設定する
    //      $vals:要素名と設定する値の連想配列
    function setVals($vals) {
        $this->_form->setDefaults($vals);
    }

    // 画面を表示する
    function dispForm() {
        $this->_form->display();
    }

    // 画面をフリーズする
    function freezeForm() {
        $this->_form->freeze();
    }
}

class QF_Check_Date extends HTML_QuickForm_Rule {
    function validate($value) {
        if ($value[0] == "" && $value[1] == "" && $value[2] == "" ) {
            return true;
        }
        if (!ereg ("^[0-9]*$", $value[0])) {
            return false;
        }
        if (!ereg ("^[0-9]*$", $value[1])) {
            return false;
        }
        if (!ereg ("^[0-9]*$", $value[2])) {
            return false;
        }
        return(checkdate($value[1], $value[2], $value[0]));
    }
}

class QF_Check_Time extends HTML_QuickForm_Rule {
    function validate($value) {
        if (!ereg ("^[0-9]*$", $value[0])) {
            return false;
        }
        if (!ereg ("^[0-9]*$", $value[1])) {
            return false;
        }
        if (((0 <= $value[0] && $value[0] <= 23) || $value[0] == "") &&
            ((0 <= $value[1] && $value[1] <= 59) || $value[1] == "")) {
            return true;
        } else {
            return false;
        }
    }
}

?>
Okushin_QF_Form.php


・こちらは基底クラスを継承した今回のサンプル用のクラスです。
<?php
// QuickForm使用サンプル
require_once "Okushin_QF_Form.php";

class Maint_Form extends Okushin_QF_Form {

// フォームの項目を定義
    function setItem() {
        $this->_form->addElement('text', 's_mail', 'E-mail',
                                 array('size' => 50, 'maxlength' => 80));
        $this->_form->addElement('text', 's_name', '名前',
                                 array('size' => 25, 'maxlength' => 25));
        $this->_form->addElement('text', 's_address',  '住所',
                                 array('size' => 30, 'maxlength' => 50));
        $this->_form->addElement('text', 's_b_year', '年',
                                 array('size' => 4, 'maxlength' => 4));
        $this->_form->addElement('text', 's_b_month', '月',
                                 array('size' => 4, 'maxlength' => 2));
        $this->_form->addElement('text', 's_b_day', '日',
                                 array('size' => 4, 'maxlength' => 2));

        $this->_form->addElement('text', 'name', '名前',
                                 array('size' => 25, 'maxlength' => 25));
        $this->_form->addElement('text', 'furi', 'ふりがな',
                                 array('size' => 25, 'maxlength' => 25));
        $this->_form->addElement('text', 'mail', 'E-mail',
                                 array('size' => 50, 'maxlength' => 80));
        $this->_form->addElement('text', 'passwd', 'パスワード',
                                 array('size' => 20, 'maxlength' => 20));
        $this->_form->addElement('text', 'zip', '〒',
                                 array('size' => 10, 'maxlength' => 8));
        // 都道府県
        $tdfk = array("北海道"=>"北海道", "青森県"=>"青森県",
                      "岩手県"=>"岩手県", "宮城県"=>"宮城県",
                      "秋田県"=>"秋田県", "山形県"=>"山形県",
                      "福島県"=>"福島県", "茨城県"=>"茨城県",
                      "栃木県"=>"栃木県", "群馬県"=>"群馬県",
                      "埼玉県"=>"埼玉県", "千葉県"=>"千葉県",
                      "東京都"=>"東京都", "神奈川県"=>"神奈川県",
                      "新潟県"=>"新潟県", "富山県"=>"富山県",
                      "石川県"=>"石川県", "福井県"=>"福井県",
                      "山梨県"=>"山梨県", "長野県"=>"長野県",
                      "岐阜県"=>"岐阜県", "静岡県"=>"静岡県",
                      "愛知県"=>"愛知県", "三重県"=>"三重県",
                      "滋賀県"=>"滋賀県", "京都府"=>"京都府",
                      "大阪府"=>"大阪府", "兵庫県"=>"兵庫県",
                      "奈良県"=>"奈良県", "和歌山県"=>"和歌山県",
                      "鳥取県"=>"鳥取県", "島根県"=>"島根県",
                      "岡山県"=>"岡山県", "広島県"=>"広島県",
                      "山口県"=>"山口県", "徳島県"=>"徳島県",
                      "香川県"=>"香川県", "愛媛県"=>"愛媛県",
                      "高知県"=>"高知県", "福岡県"=>"福岡県",
                      "佐賀県"=>"佐賀県", "長崎県"=>"長崎県",
                      "熊本県"=>"熊本県", "大分県"=>"大分県",
                      "宮崎県"=>"宮崎県", "鹿児島県"=>"鹿児島県",
                      "沖縄県"=>"沖縄県");
        $this->_form->addElement('select', 'tdfk', '都道府県', $tdfk);
        $this->_form->addElement('text', 'address1', '市区町村番地',
                                 array('size' => 50, 'maxlength' => 50));
        $this->_form->addElement('text', 'address2', 'マンション名',
                                 array('size' => 50, 'maxlength' => 50));
        $this->_form->addElement('text', 'tel', '電話番号',
                                 array('size' => 25, 'maxlength' => 25));
        // ラジオボタンのグループ 
        // 第二引数の「名称」が同じボタンの中から一つだけが選択できる。
        $sexAry[] = 
           &HTML_QuickForm::createElement('radio', null, null, '女性', '女性');
        $sexAry[] = 
           &HTML_QuickForm::createElement('radio', null, null, '男性', '男性');
        $this->_form->addGroup($sexAry, 'sex', '性別', '&nbsp;');

        $this->_form->addElement('text', 'b_year', '年',
                                 array('size' => 6, 'maxlength' => 4));
        $this->_form->addElement('text', 'b_month', '月',
                                 array('size' => 4, 'maxlength' => 2));
        $this->_form->addElement('text', 'b_day', '日',
                                 array('size' => 4, 'maxlength' => 2));
        $this->_form->addElement('text', 'b_hour', '時',
                                 array('size' => 4, 'maxlength' => 2));
        $this->_form->addElement('text', 'b_minute', '分',
                                 array('size' => 4, 'maxlength' => 2));
        $this->_form->addElement('text', 'job', '職業',
                                 array('size' => 25, 'maxlength' => 25));
        $this->_form->addElement('text', 'point', 'ポイント',
                                 array('size' => 10, 'maxlength' => 7));
    }

    // サーバ側でチェックするルール
    function setServerRule() {
        // 必須入力項目を設定
        $this->_form->addRule('name', '入力してください', 'required');
        $this->_form->addRule('furi', '入力してください', 'required');
        $this->_form->addRule('mail', '入力してください', 'required');
        $this->_form->addRule('mail', '入力内容が不正です', 'email');
        $this->_form->addRule('passwd', '入力してください', 'required');
        $this->_form->addRule('zip', '入力してください', 'required');
        $this->_form->addRule('tdfk', '入力してください', 'required');
        $this->_form->addRule('address1', '入力してください', 'required');
        $this->_form->addRule('tel', '入力してください', 'required');
        $this->_form->addRule(array('b_year', 'b_month', 'b_day'),
                      '日付エラー', 'date_check');
        $this->_form->addRule(array('b_hour', 'b_minute'),
                      '時間エラー', 'time_check');
    }

    // クライアント側でチェックするルール
    function setClientRule() {
        // 必須入力項目が入力されていない時のエラーメッセージ表示
        $this->_form->setJsWarnings('下記の項目が不正です。','');
        $this->_form->addRule('name', 
               '名前を入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('furi', 
               'ふりがなを入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('mail', 
               'E-mailを入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('passwd', 
               'パスワードを入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('zip', 
               '郵便番号を入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('tdfk', 
               '都道府県を入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('address1', 
               ' 市区町村番地を入力して下さい。', 'required', '', 'client');
        $this->_form->addRule('tel', 
               '電話番号を入力して下さい。', 'required', '', 'client');
    }

}
?>
Maint_Form.php
■Templates Smartyのテンプレートです。今回は2画面の処理なので、テンプレートは2つです。

・検索用のテンプレート
<HTML>
<HEAD>
<!--京-->
<TITLE>会員情報管理</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC_JP">
<link href="../css/def.css" rel="stylesheet" type="text/css">
<!--{$form.javascript}-->
</HEAD>
<BODY BGCOLOR=#FFFFFF
      LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<center>
<br>
<form <!--{$form.attributes}-->
<table width="764" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="center" bgcolor="#FFFFFF">
      <table width="762" border="0" cellspacing="0" cellpadding="0">
        <tr bgcolor="#FFFFFF">
          <td colspan="2" align="center">
          <table width="730" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="center">■ 会員情報検索 ■</td>
            </tr>
            <tr>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td align="center" bgcolor="#FFFFFF"><div align="left">
                  <table width="730" border="1" cellspacing="0" cellpadding="1">
                    <tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.s_mail.label}--></span></td>
                      <td bgcolor="#FFFFFF"><!--{$form.s_mail.html}--></td>
                    </tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.s_name.label}--></span></td>
                      <td bgcolor="#FFFFFF"><!--{$form.s_name.html}--></td>
                    </tr>
                    <tr>
                      <td align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.s_address.label}--></span></td>
                      <td bgcolor="#FFFFFF"><!--{$form.s_address.html}--></td>
                    </tr>
                    </tr>
                    <tr>
                      <td align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx">生年月日</span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx">西暦
                      <!--{$form.s_b_year.html}-->
                      <!--{$form.s_b_year.label}-->
                      <!--{$form.s_b_month.html}-->
                      <!--{$form.s_b_month.label}-->
                      <!--{$form.s_b_day.html}-->
                      <!--{$form.s_b_day.label}--></span>
                      </td>
                    </tr>
                  </table>
                </div>
              </td>
            </tr>
            <tr>
              <td align="center"><br><!--{$form.BTNG.html}-->&nbsp;&nbsp;
                <span class="fs10fx"><!--{$message}--></span>
              </td>
            </tr>
          </table>
          </td>
        </tr>
      </table><br>
    </td>
  </tr>
  <tr>
    <td align="center">
      <table width="762" border="1" cellspacing="0" cellpadding="1">
        <tr>
          <td align="center"><span class="fs10fx">選択</span></td>
          <td align="center"><span class="fs10fx">名 前</span></td>
          <td align="center"><span class="fs10fx">メールアドレス</span></td>
          <td align="center"><span class="fs10fx">〒</span></td>
          <td align="center"><span class="fs10fx">都道府県</span></td>
          <td align="center"><span class="fs10fx">市区町村番地</span></td>
          <td align="center"><span class="fs10fx">マンション名</span></td>
          <td align="center"><span class="fs10fx">性別</span></td>
          <td align="center"><span class="fs10fx">生年月日</span></td>
        </tr>
<!--{section name=i loop=$db_rows}-->
        <tr>
          <td align="center"><!--{html_radios name="member_no" values=$db_rows[i].member_no selected=$chk_no}--></td>
          <td><span class="fs10fx"><!--{$db_rows[i].name}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].mail}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].zip}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].tdfk}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].address1}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].address2}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].sex}--></span></td>
          <td><span class="fs10fx"><!--{$db_rows[i].birthday}--></span></td>
        </tr>
<!--{/section}-->
      </table>
    </td>
  </tr>
</table>
</form>
</center>
</BODY>
</HTML>
member_search.tpl


・編集、削除用のテンプレート
<HTML>
<HEAD>
<!--京-->
<TITLE>会員情報管理</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC_JP">
<link href="../css/def.css" rel="stylesheet" type="text/css">
<!--{$form.javascript}-->
</HEAD>
<BODY BGCOLOR=#FFFFFF 
      LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<center>
<br>
<table width="764" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="center" bgcolor="#FFFFFF">
      <table width="762" border="0" cellspacing="0" cellpadding="0">
        <tr bgcolor="#FFFFFF">
          <td colspan="2" align="center"><form <!--{$form.attributes}-->
          <table width="730" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="center">■ 会員情報変更 ■</td>
            </tr>
            <tr>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td align="center" bgcolor="#FFFFFF"><div align="left">
                  <table width="730" border="1" cellspacing="0" cellpadding="4">
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.name.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.name.html}-->
                      <font color="#FF0000"><!--{$form.name.error}--></font></span>
                      </td>
                    </tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.furi.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.furi.html}-->
                      <font color="#FF0000"><!--{$form.furi.error}--></font></span>
                      </td>
                    </tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.mail.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.mail.html}-->
                      <font color="#FF0000"><!--{$form.mail.error}--></font></span>
                      </td>
                    </tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.passwd.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.passwd.html}-->
                      <font color="#FF0000"><!--{$form.passwd.error}--></font></span>
                      </td>
                    </tr>
                    <tr>
                      <td align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx">住  所</span></td>
                      <td bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$add_com1}-->
                      <!--{$form.zip.html}-->
                      <font color="#FF0000"><!--{$form.zip.error}--></font></span>
                      <span class="fs10REDfx"><font color="#FF3366">
                      <!--{$zip_com}--></font></span><br>
                      <span class="fs10fx"> <!--{$add_com2}-->
                      <!--{$form.tdfk.html}-->
                      <font color="#FF0000"><!--{$form.tdfk.error}--></font></span><br>
                      <span class="fs10fx"><!--{$add_com3}-->
                      <!--{$form.address1.html}-->
                      <font color="#FF0000"><!--{$form.address1.error}--></font></span><br>
                      <span class="fs10fx"> <!--{$add_com4}-->
                      <!--{$form.address2.html}-->
                      <font color="#FF0000"><!--{$form.address2.error}--></font></span><br>
                      <span class="fs10REDfx"><font color="#FF3366">
                      <!--{$address1_com}--></font><font color="#FF3366">
                      <!--{$address2_com}--></font></span></td>
                    </tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.tel.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.tel.html}-->
                      <font color="#FF0000"><!--{$form.tel.error}--></font></span>
                      </td>
                    </tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.sex.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.sex.html}-->
                      <font color="#FF0000"><!--{$form.sex.error}--></font></span>
                      </td>
                    </tr>
                    <tr>
                      <td align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx">生年月日</span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx">西暦
                      <!--{$form.b_year.html}-->
                      <font color="#FF0000"><!--{$form.b_year.error}--></font>
                      <!--{$form.b_year.label}-->
                      <!--{$form.b_month.html}-->
                      <font color="#FF0000"><!--{$form.b_month.error}--></font>
                      <!--{$form.b_month.label}-->
                      <!--{$form.b_day.html}-->
                      <font color="#FF0000"><!--{$form.b_day.error}--></font>
                      <!--{$form.b_day.label}-->
                      <!--{$form.b_hour.html}-->
                      <font color="#FF0000"><!--{$form.b_hour.error}--></font>
                      <!--{$form.b_hour.label}-->
                      <!--{$form.b_minute.html}-->
                      <font color="#FF0000"><!--{$form.b_minute.error}--></font>
                      <!--{$form.b_minute.label}--><br></span>
                      <span class="fs10REDfx"><font color="#FF3366">
                      <!--{$bir_com}--></font></span></td>
                    </tr>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.job.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.job.html}--> 
                      <font color="#FF0000"><!--{$form.job.error}--></font></span>
                      </td>
                    <tr>
                      <td width="150" align="center" bgcolor="#FFFFFF">
                      <span class="fs10fx"><!--{$form.point.label}--></span></td>
                      <td bgcolor="#FFFFFF"><span class="fs10fx"><!--{$form.point.html}-->
                      <font color="#FF0000"><!--{$form.point.error}--></font></span>
                      </td>
                    </tr>
                  </table>
                </div>
              </td>
            </tr>
            <tr>
              <td align="center"><br>
                <span class="fs10fx"><!--{$ok_com1}--><br><!--{$ok_com2}--></span>
                <br><!--{$form.BTNG.html}--></td>
            </tr>
          </table>
          </form></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
</center>
</BODY>
</HTML>
member_maint.tpl
■Smarty設定
<?php

// Smartyライブラリを読み込む
require('Smarty.class.php');

class Smarty_Setup extends Smarty {

   function Smarty_Setup()
   {
        $this->Smarty();

// test
        $this->template_dir = './templates/';
        $this->compile_dir = './templates_c/';
        $this->config_dir = './configs/';
        $this->cache_dir = './cache/';

        $this->caching = false;
        $this->left_delimiter = '<!--{';
        $this->right_delimiter = '}-->';
        $this->assign('app_name','Smarty_test');
   }

}
?> 
Smarty_Setup.php
■PHP本体
<?php
header("Content-Type: text/html; charset=euc-jp");

session_start();

require_once "HTML/QuickForm/Renderer/ArraySmarty.php";
require_once "Smarty_Setup.php";
require_once "Maint_Form.php";

// ===== Smarty 設定 =====
$smarty = new Smarty_Setup();

// ===== QuickForm設定 =====
$form_obj = new Maint_Form("maint_member", "maint_member.php");
$form_obj->setItem();

// ===== 一覧画面 (検索画面で「検索」クリック時 または    =====
// =====           編集画面、確認画面で「取消」クリック時) =====
if ( isset($_POST["BTNG"]["SEARCH"]) ||
     isset($_POST["BTNG"]["CANCEL"]) ) {
    list_fnc(& $form_obj, & $smarty);

// ===== 編集画面 (一覧画面で「編集」クリック時 または    =====
// =====           確認画面で「戻る」クリック時)           =====
} elseif ( isset($_POST["BTNG"]["EDIT"]) ||
           isset($_POST["BTNG"]["RETURN"]) ) {
    edit_fnc(& $form_obj, & $smarty);

// ===== 確認画面 (入力画面で「内容確認」クリック時)       =====
} elseif ( isset($_POST["BTNG"]["CONF"]) ) {
    conf_fnc(& $form_obj);

// ===== 削除確認画面 (一覧画面で「削除確認」クリック時)   =====
} elseif ( isset($_POST["BTNG"]["DELCONF"]) ) {
    delconf_fnc(& $form_obj);

// ===== 最終画面 (確認画面で「登録」クリック時 または    =====
// =====           削除確認画面で「削除」クリック時)       =====
} elseif ( isset($_POST["BTNG"]["OK"]) ||
           isset($_POST["BTNG"]["DEL"]) ) {
    ok_fnc(& $form_obj, & $smarty);

// ===== 検索画面 (初期のみ) =====
} else {
    srch_fnc(& $form_obj);

}

// === 画面設定 ===
$form_obj->setVals($_SESSION);

switch ($_SESSION["mode"]) {
    case "SEARCH":
        $form_obj->createButton("SEARCH", "検索");
        break;
    case "LIST":
        $form_obj->createButton("SEARCH",  "検索");
        $form_obj->createButton("EDIT",    "編集");
        $form_obj->createButton("DELCONF", "削除確認");
        break;
    case "EDIT":
        cmmnt_fnc(& $smarty);       // === フォームコメント ===
        $form_obj->createButton("CONF",   "内容確認");
        $form_obj->createButton("CANCEL", "取消");
        break;
    case "CONF":
        $form_obj->createButton("RETURN", "戻る");
        $form_obj->createButton("OK",     "登録");
        $form_obj->createButton("CANCEL", "取消");
        $form_obj->freezeForm();    // 要素を凍結
        break;
    case "DELCONF":
        $form_obj->createButton("DEL",    "削除");
        $form_obj->createButton("CANCEL", "取消");
        $form_obj->freezeForm();    // 要素を凍結
        break;
    case "OK":
        $form_obj->createButton("SEARCH", "検索");
        $form_obj->freezeForm();    // 要素を凍結
        break;
    default:
}

$form_obj->addButtonGroup();

// ===== QuickForm renderer for Smarty templates の取得 =====
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$form_obj->_form->accept($renderer);
$smarty->assign('form', $renderer->toArray());

// ===== 表示 =====
$smarty->display($_SESSION["template"]);

// =========================================================
// ===== 検索画面 (最初のみ)                           =====
// =========================================================
function srch_fnc($form_obj) {
    $_SESSION["mode"]     = "SEARCH";

    $_SESSION["template"] = "member_search.tpl";
}

// =========================================================
// ===== 一覧画面 (検索、再検索、編集取消クリック時)   =====
// =========================================================
function list_fnc($form_obj, $smarty) {
    // === セッション変数に代入 ===
    $form_obj->getVals();

    // ===== DB処理 =====
    require_once "Maint_DB.php";
    $db_obj = new Maint_DB();
    if ($db_obj->member_search()) {
        $smarty->assign('db_rows', $db_obj->member_rows);
        $smarty->assign('chk_no',  $db_obj->member_rows[0]["member_no"]);

        $_SESSION["mode"] = "LIST";
    } else {
        $smarty->assign('message', $db_obj->err_msg);

        $_SESSION["mode"] = "SEARCH";
    }

    $_SESSION["template"] = "member_search.tpl";
}

// =============================================================
// ===== 編集画面 (一覧画面で「編集」、確認画面で「戻る」) =====
// =============================================================
function edit_fnc($form_obj, $smarty) {
    $form_obj->setClientRule();

    // === セッション変数に代入 ===
    $form_obj->getVals();

    if (isset($_POST["BTNG"]["EDIT"])) {
        $_SESSION["member_no"] = $_POST["member_no"];

        // ===== DB処理 =====
        select_fnc(& $form_obj);
    }

    $_SESSION["mode"] = "EDIT";

    $_SESSION["template"] = "member_maint.tpl";
}

// ===================================================
// ===== 確認画面 (入力画面で「送信」クリック時) =====
// ===================================================
function conf_fnc($form_obj) {
    $form_obj->setServerRule();

    // ===== 入力内容チェック =====
    if ($form_obj->chkValidate()) {

        // === セッション変数に代入 ===
        $form_obj->getVals();

        $_SESSION["mode"] = "CONF";
    } else {
        $_SESSION["mode"] = "EDIT";
    }

    $_SESSION["template"] = "member_maint.tpl";
}

// ===========================================================
// ===== 削除確認画面 (一覧画面で「削除確認」クリック時) =====
// ===========================================================
function delconf_fnc($form_obj) {
    $form_obj->setServerRule();

    // === セッション変数に代入 ===
    $form_obj->getVals();
    $_SESSION["member_no"] = $_POST["member_no"];

    // ===== DB処理 =====
    select_fnc(& $form_obj);

    $_SESSION["mode"] = "DELCONF";

    $_SESSION["template"] = "member_maint.tpl";
}

// ===================================================
// ===== 最終画面 (確認画面で「送信」クリック時) =====
// ===================================================
function ok_fnc($form_obj, $smarty) {
    $form_obj->setServerRule();

    // ===== 入力内容チェック =====
    if ($form_obj->chkValidate()) {

        // === セッション変数に代入 ===
        $vals = $form_obj->getVals();

        // ===== DB処理 =====
        require_once "Maint_DB.php";
        $db_obj = new Maint_DB();

        if (isset($_POST["BTNG"]["OK"])) {
            $db_obj->member_update();
            $messege = "会員情報を変更いたしました。";
        } else {
            $db_obj->member_delete();
            $messege = "会員情報を削除いたしました。";
        }
        $guide = 
            "検索画面へ戻るには「検索」ボタンを押してください。<br><br>";
        $smarty->assign('ok_com1', $messege);
        $smarty->assign('ok_com2', $guide);

        $_SESSION["mode"] = "OK";
    } else {
        $_SESSION["mode"] = "CONF";
    }

    $_SESSION["template"] = "member_maint.tpl";
}

// ========================================
// ===== 会員情報取得 & formへ設定 =====
// ========================================
function select_fnc($form_obj) {
    require_once "Maint_DB.php";

    $db_obj = new Maint_DB();
    $db_obj->member_select($_SESSION["member_no"]);
}

// ========================================
// ===== フォーム コメント設定       =====
// ========================================
function cmmnt_fnc($smarty) {
    $smarty->assign('add_com1',     "〒");
    $smarty->assign('add_com2',     "都道府県");
    $smarty->assign('add_com3',     "市区町村番地");
    $smarty->assign('add_com4',     "マンション名");
    $smarty->assign('zip_com',      "※半角数字「-」を付けてご記入下さい。");
    $smarty->assign('address1_com', "※全角でご記入下さい");
    $smarty->assign('address2_com',
        "<br>※マンションにお住まいの方は必ず号室までご記入下さい。");
    $smarty->assign('bir_com',      "※半角数字でご記入下さい。");
    $smarty->assign('ok_com1',      "※ご登録内容に間違いはございませんか?");
    $smarty->assign('ok_com2',
        "無ければ、下記の「内容確認」ボタンを押して下さい。<br><br>");
}
?>
maint_member.php



インフォメーションへ戻る 第1回 PHPのコードとHTMLタグ コラム
  第2回 HTML_QuickFormを使ってみよう
  第3回 HTML_QuickFormを使ってみよう(パート2) HTML_QuickForm Memo
  第4回 Smartyを使ってみよう HTML_QuickForm Menu
  第5回 HTML_QuickFormとSmartyを使ってみよう HTML_QuickForm Smarty Tips
  第6回 HTML_QuickFormとSmartyを使ってみよう(パート2) Mojavi Memo
  第7回 実践編 HTML_QuickFormとSmartyを使ってみてどうよ? Ajax Memo
  第8回 HTML_QuickForm_Controller大好き!
  第9回 Mojaviのまとめ
  第10回 Ajax使ってみました
  第11回 PHPEclipse開発環境設定
  第12回 Eclipse+PHPIDEインストール記
  第13回目 PHPIDEによるデバック
  第14回目 Selenium IDEを使ってみました
  第15回目 PDT(旧 PHPIDE)のインストール、デバック