HTML_QuickForm と Smarty のフォームで MYSQLに保存
なんだかタイトルが良く分からんですが HTML_QuickForm でフォーム作って Smarty でレンダリングして MYSQL にデータをインサートするフォーム。PEAR と Smarty の連携ってあまり解説している所が少ないのよね…。で。あれやこれや試して簡単な入力フォームを作成。最初に DB のテーブルは作っておくこと。PEAR::DB も使用。
form.php
< ?php //ライブラリとSmartyの読み込み require_once("HTML/QuickForm.php"); require_once("HTML/QuickForm/Renderer/ArraySmarty.php"); require_once("Smarty.class.php"); //色々と文字処理(これは全角英数を半角英数に) function constForm($values){return mb_convert_kana($values,"a");} //DBに書き込み処理 function insertDB($values) { require_once("DB.php"); $db=DB::connect("mysql://USER:PASSWORD@SERVER/DBNAME"); $db->query("INSERT INTO TABLE(name,old,address,email) VALUES(?,?,?,?)",array($values[name],$values[old],$values[address],$values[email])); $db->disconnect(); } //フォーム作成 $form=new HTML_QuickForm("myForm"); $form->addElement("header",NULL,"フォームサンプル"); $form->addElement("text","name","本名:",array("size"=>14,"maxlength"=>256)); $form->addElement("text","old","年齢:",array("size"=>3,"maxlength"=>10)); $form->addElement("text","address","住所:",array("size"=>14,"maxlength"=>256)); $form->addElement("text","email","e-mail:",array("size"=>14,"maxlength"=>256)); $form->addElement("submit","sbm","送信"); //検証ルールとエラー表示 $form->addRule("name","<font color='#FF0000'>名前は必須項目です</font>","required",NULL,"client"); $form->addRule("email","<font color='#FF0000'>アドレスが無効です</font>","email",NULL,"client"); //文字処理 $form->applyFilter("__ALL__","constForm"); //送信された内容が検証ルールを満たしている場合の処理 if($form->validate()) { //DBの書き込み処理の呼び出し $form->process("insertDB",FALSE); } else { //Smarty設定 $smarty = new Smarty; $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->cache_dir = "./cache"; //フォーム表示 $renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept($renderer); $smarty->assign('form',$renderer->toArray()); $smarty->display("form.tpl"); } ?>
form.tpl
<html><body> <form {{$form.attributes}}> {{$form.errors.name}} {{$form.errors.email}} {{$form.name.label}} {{$form.name.html}} {{$form.old.label}} {{$form.old.html}} {{$form.address.label}} {{$form.address.html}} {{$form.email.label}} {{$form.email.html}} {{$form.sbm.html}} </form> </body></html>
すっごい簡単だけどこんな感じ。項目テキトー。このままだと投稿後は真っ白な画面なので $form->validate() の部分に「応募ありがとうございました」とか include。