質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

1回答

772閲覧

【PHP】phpで打ち込んだ項目がフォームに反映されない。

kotona

総合スコア2

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2021/04/22 09:54

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?>

最初にサイトにアクセスしたとき(何も表示されない)
最初にサイトにアクセスしたとき

その後入力内容の確認(画面移行後)
選択表示が出現して選択しメールが飛ぶようになる。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/04/22 10:09

tplファイルのコードも提示してください。
kotona

2021/04/22 10:18

<form action="./#confirm" method="post" name="contact_confirm"> <dl> <dt><label for="type">内容<span class="req">必須</span></label></dt> <dd> <select name="type" class="job_form" /> {html_options options=$arrItem.type selected=$arrForm.type} </select> <p class="error">{$arrErr['type']['error_message']}</p> </dd> <dt><label for="name">お名前<span class="req">必須</span></label></dt> <dd><input type="text" id="name" name="name" placeholder="例:サンプル" value="{$arrForm['name']}"> {if isset($arrErr['name']['error_message']) }<p class="error">{$arrErr['name']['error_message']}</p>{/if}</dd> <dt><label for="tel">電話番号<span class="req">必須</span></label></dt> <dd><input type="tel" id="tel" name="tel" placeholder="例:000-000-0000" value="{$arrForm['tel']}"> {if isset($arrErr['tel']['error_message']) }<p class="error">{$arrErr['tel']['error_message']}</p>{/if}</dd> <dt><label for="email">メールアドレス<span class="req">必須</span></label></dt> <dd><input type="email" id="email" name="mail" placeholder="例:example" value="{$arrForm['mail']}"> {if isset($arrErr['mail']['error_message']) }<p class="error">{$arrErr['mail']['error_message']}</p>{/if}</dd> <dt><label for="contents">お問合わせ内容</label></dt> <dd><textarea name="contents" placeholder="例:〇月〇日" id="contents">{$arrForm['contents']}</textarea>{if isset($arrErr['contents']['error_message']) }<p class="error">{$arrErr['contents']['error_message']}</p>{/if}</dd> </dl> <div class="submit"><input value="入力内容のご確認へ" type="submit"></div> <input type="hidden" id="key" name="key" value="{$key}" /> <input type="hidden" name="mode" value="confirm" /> </form> こちらでよろしいでしょうか? どうぞよろしくお願いいたします。
m.ts10806

2021/04/22 10:31

質問は編集できますので。
kotona

2021/04/22 13:09

編集して追加しようと思うと、文字数を超えてしまうので、一旦phpは撤去しても問題ないでしょうか?
guest

回答1

0

自己解決

無事解決いたしました。
ありがとうございました。

投稿2021/04/26 05:57

kotona

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問