PHP初心者です。
sublimeTextを使用してフォームを作成しています。
元々構築してあったものを手探りで追加しているのですが、
// セレクト項目設定の箇所がフォームに反映されません。
確認画面を押すとエラー文字がでるページへ移行されますが、その時はフォームに反映され選択できるようになります。(添付画像参照)
初歩的なご質問となり申し訳ございませんが
ご回答よろしくお願い致します。
発生している問題
最初のページには選択項目が表示されない。(真っ白)
その後確認画面へを押すと文字が選択できるようになる。
php
1<?php 2 3// 設定ファイル呼び出し 4require_once __DIR__ . '/../../formbuilder/config/config.php'; 5 6// 必要モジュール 7require_once \Config::$set_lib_page; 8require_once \Config::$set_lib_util; 9require_once \Config::$set_lib_session; 10require_once \Config::$set_lib_form; 11require_once \Config::$set_controller_baseform; 12require_once \Config::$set_service_constans; 13require_once \Config::$set_phpmailer; 14 15class Sample_ContactForm extends BaseForm { 16 17 protected $controller = 'Sample'; 18 protected $formTemplateDirectory = 'Sample/'; 19 20 public function __construct() { 21 parent::__construct(); 22 23 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 24 // POSTデータを取得 25 $this->arrForm = $this->_objForm->getForm($_POST); 26 $this->setFormItem(); 27 $this->setSelectItem(); 28 // ページ切り替え 29 switch ($this->arrForm['mode']) { 30 case 'confirm': 31 // 確認画面 32 $this->confirm(); 33 break; 34 case 'complate': 35 // 完了画面 36 $this->complate(); 37 break; 38 case 'back': 39 // 確認画面から戻ってきた場合 40 $this->getSessionData($this->arrForm['mode']); 41 $this->_objPage->setAssign("key", $this->arrForm['key']); 42 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 43 break; 44 default: 45 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 46 break; 47 } 48 } else { 49 // 入力画面 50 $this->index(); 51 } 52 // フォームをSmartyにアサイン 53 $this->_objPage->setAssign("arrForm", $this->arrForm); 54 55 } 56 57 // 入力画面 58 private function index () { 59 // CSRFトークンをセットする 60 $this->setCsrfToken(); 61 // 初期値を格納する 62 $this->setDefaultData(); 63 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 64 } 65 66 // 確認画面 67 private function confirm () { 68 // CSRFトークンをチェックする 69 $this->checkCsrfToken($this->arrForm['key']); 70 // エラーチェック 71 $arrErr = $this->getErrCheck(); 72 if (count($arrErr) > 0) { 73 // エラーあり 74 $this->arrForm['mode'] = "confirm"; 75 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 76 $this->_objPage->setAssign("arrErr", $arrErr); 77 } else { 78 // エラーなし 79 // Sessionへ入力値を格納する 80 $this->setSessionData(); 81 // 確認画面表示 82 $this->arrForm['mode'] = "complate"; 83 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_confirm.tpl"; 84 } 85 } 86 87 // 完了画面 88 private function complate () { 89 $error_flag = false; 90 // CSRFトークンをチェックする 91 $this->checkCsrfToken($this->arrForm['key']); 92 // Sessionから入力値を取得する 93 $this->getSessionData(); 94 // エラーチェック 95 $arrErr = $this->getErrCheck(); 96 if (count($arrErr) > 0) { 97 // 入力エラー 98 $error_flag = true; 99 $this->createLog('complate Function getErrCheck Error'); 100 $this->arrForm['mode'] = "confirm"; 101 $arrErr['complate_error'] = "validation"; 102 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 103 $this->_objPage->setAssign("arrErr", $arrErr); 104 } else { 105 // エラーなし 106 // contactdate 文字化け修正 107 $contactdate = date('Y年n月j日 H時i分'); 108 $this->_objPage->setAssign("arrForm", $this->arrForm); 109 $this->_objPage->setAssign("arrGenre", $this->_arrGenre); 110 $this->_objPage->setAssign("contactdate", $contactdate); 111 112 // 管理者宛てメール送信 113 try { 114 \Util::sendmail( 115 \Service\Constans::$admin_mail_to[$this->controller], 116 \Service\Constans::$admin_mail_cc[$this->controller], 117 \Service\Constans::$admin_mail_bcc[$this->controller], 118 \Service\Constans::$admin_mail_from_addr[$this->controller], 119 \Service\Constans::$admin_mail_from_name[$this->controller], 120 \Service\Constans::$admin_mail_title[$this->controller], 121 $this->_objPage->getHtml($this->formTemplateDirectory . "mail/" . $this->controller . "_mail.tpl"), 122 false // SMTP 123 ); 124 } catch (Exception $ex) { 125 // 送信エラー 126 $error_flag = true; 127 $this->createLog($ex); 128 $this->createLog('complate Function sendmail admin Error'); 129 $arrErr['send'] = "送信に失敗しました。"; 130 $arrErr['complate_error'] = "sendmail"; 131 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 132 $this->_objPage->setAssign("arrErr", $arrErr); 133 } 134 135 // ユーザー宛てメール送信 136 try { 137 \Util::sendmail( 138 array($this->arrForm['mail'] => $this->arrForm['name']), 139 null, // ユーザーメール CC 140 null, // ユーザーメール BCC 141 \Service\Constans::$customer_mail_from_addr[$this->controller], 142 \Service\Constans::$customer_mail_from_name[$this->controller], 143 \Service\Constans::$customer_mail_title[$this->controller], 144 $this->_objPage->getHtml($this->formTemplateDirectory . "mail/" . $this->controller . "_mail_return.tpl"), 145 false // SMTP 146 ); 147 } catch (Exception $ex) { 148 // 送信エラー 149 $error_flag = true; 150 $this->createLog($ex); 151 $this->createLog('complate Function sendmail customer Error'); 152 $arrErr['send'] = "送信に失敗しました。"; 153 $arrErr['complate_error'] = "sendmail"; 154 $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; 155 $this->_objPage->setAssign("arrErr", $arrErr); 156 } 157 } 158 159 if (!$error_flag) { 160 // Session削除 161 \Session::destroy('', true); 162 // 完了画面へ遷移 163 header("Location: thanks.html#thanks"); 164 exit(); 165 } 166 } 167 168 function getErrCheck() { 169 $arrErr = $this->_objForm->getFormCheck($this->arrForm); 170 171 172 173 return $arrErr; 174 } 175 176 // フォーム項目設定 177 function setFormItem() { 178 $this->_objForm->addParam("type", "お問合せ内容", array("require")); 179 $this->_objForm->addParam("name", "お名前", array("require")); 180 $this->_objForm->addParam("tel", "電話番号", array("require")); 181 $this->_objForm->addParam("mail", "メールアドレス", array("require", "mail")); 182 $this->_objForm->addParam("contents", "お問い合わせ内容", array()); 183 } 184 185 // セレクト項目設定 186 function setSelectItem($arrForm) { 187 $arrItem = array(); 188 189 $arrItem["type"] = array( 190 ""=>"お選び下さい", 191 "選択項目1"=>"選択項目1", 192 "選択項目2"=>"選択項目1", 193 "選択項目3"=>"選択項目3" 194 ); 195 // Smartyにアサイン 196 $this->_objPage->setAssign("arrItem", $arrItem); 197 } 198 199 200 // フォーム画面設定 201 function getFormDisplay() { 202 return $this->_objPage->getHtml($this->_tpl); 203 } 204 205 /* 206 * 初期値を格納する 207 */ 208 function setDefaultData() { 209 $this->arrForm = array( 210 'type' => '', 211 'name' => '', 212 'tel' => '', 213 'mail' => '', 214 'contents' => '', 215 // csrfのキーは格納しない 216 ); 217 } 218 219 /* 220 * Sessionへ入力値を格納する 221 */ 222 function setSessionData() { 223 \Session::set('type', $this->arrForm['type']); 224 \Session::set('name', $this->arrForm['name']); 225 \Session::set('tel', $this->arrForm['tel']); 226 \Session::set('mail', $this->arrForm['mail']); 227 \Session::set('contents', $this->arrForm['contents']); 228 // csrfのキーは格納しない 229 } 230 231 /* 232 * Sessionから入力値を取得する 233 */ 234 public function getSessionData() { 235 $this->arrForm['type'] = \Session::get('type'); 236 $this->arrForm['name'] = \Session::get('name'); 237 $this->arrForm['tel'] = \Session::get('tel'); 238 $this->arrForm['mail'] = \Session::get('mail'); 239 $this->arrForm['contents'] = \Session::get('contents'); 240 $this->arrForm['key'] = \Session::get('key'); 241 } 242} 243 244?>
回答1件
あなたの回答
tips
プレビュー