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

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

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

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

Smarty

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

解決済

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

kotona
kotona

総合スコア2

PHP

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

Smarty

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

1回答

0評価

0クリップ

455閲覧

投稿2021/04/22 09:54

PHP初心者です。
sublimeTextを使用してフォームを作成しています。
元々構築してあったものを手探りで追加しているのですが、
// セレクト項目設定の箇所がフォームに反映されません。
確認画面を押すとエラー文字がでるページへ移行されますが、その時はフォームに反映され選択できるようになります。(添付画像参照)
初歩的なご質問となり申し訳ございませんが
ご回答よろしくお願い致します。

発生している問題

最初のページには選択項目が表示されない。(真っ白)
その後確認画面へを押すと文字が選択できるようになる。

php

<?php // 設定ファイル呼び出し require_once __DIR__ . '/../../formbuilder/config/config.php'; // 必要モジュール require_once \Config::$set_lib_page; require_once \Config::$set_lib_util; require_once \Config::$set_lib_session; require_once \Config::$set_lib_form; require_once \Config::$set_controller_baseform; require_once \Config::$set_service_constans; require_once \Config::$set_phpmailer; class Sample_ContactForm extends BaseForm { protected $controller = 'Sample'; protected $formTemplateDirectory = 'Sample/'; public function __construct() { parent::__construct(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { // POSTデータを取得 $this->arrForm = $this->_objForm->getForm($_POST); $this->setFormItem(); $this->setSelectItem(); // ページ切り替え switch ($this->arrForm['mode']) { case 'confirm': // 確認画面 $this->confirm(); break; case 'complate': // 完了画面 $this->complate(); break; case 'back': // 確認画面から戻ってきた場合 $this->getSessionData($this->arrForm['mode']); $this->_objPage->setAssign("key", $this->arrForm['key']); $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; break; default: $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; break; } } else { // 入力画面 $this->index(); } // フォームをSmartyにアサイン $this->_objPage->setAssign("arrForm", $this->arrForm); } // 入力画面 private function index () { // CSRFトークンをセットする $this->setCsrfToken(); // 初期値を格納する $this->setDefaultData(); $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; } // 確認画面 private function confirm () { // CSRFトークンをチェックする $this->checkCsrfToken($this->arrForm['key']); // エラーチェック $arrErr = $this->getErrCheck(); if (count($arrErr) > 0) { // エラーあり $this->arrForm['mode'] = "confirm"; $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; $this->_objPage->setAssign("arrErr", $arrErr); } else { // エラーなし // Sessionへ入力値を格納する $this->setSessionData(); // 確認画面表示 $this->arrForm['mode'] = "complate"; $this->_tpl = $this->formTemplateDirectory . $this->controller . "_confirm.tpl"; } } // 完了画面 private function complate () { $error_flag = false; // CSRFトークンをチェックする $this->checkCsrfToken($this->arrForm['key']); // Sessionから入力値を取得する $this->getSessionData(); // エラーチェック $arrErr = $this->getErrCheck(); if (count($arrErr) > 0) { // 入力エラー $error_flag = true; $this->createLog('complate Function getErrCheck Error'); $this->arrForm['mode'] = "confirm"; $arrErr['complate_error'] = "validation"; $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; $this->_objPage->setAssign("arrErr", $arrErr); } else { // エラーなし // contactdate 文字化け修正 $contactdate = date('Y年n月j日 H時i分'); $this->_objPage->setAssign("arrForm", $this->arrForm); $this->_objPage->setAssign("arrGenre", $this->_arrGenre); $this->_objPage->setAssign("contactdate", $contactdate); // 管理者宛てメール送信 try { \Util::sendmail( \Service\Constans::$admin_mail_to[$this->controller], \Service\Constans::$admin_mail_cc[$this->controller], \Service\Constans::$admin_mail_bcc[$this->controller], \Service\Constans::$admin_mail_from_addr[$this->controller], \Service\Constans::$admin_mail_from_name[$this->controller], \Service\Constans::$admin_mail_title[$this->controller], $this->_objPage->getHtml($this->formTemplateDirectory . "mail/" . $this->controller . "_mail.tpl"), false // SMTP ); } catch (Exception $ex) { // 送信エラー $error_flag = true; $this->createLog($ex); $this->createLog('complate Function sendmail admin Error'); $arrErr['send'] = "送信に失敗しました。"; $arrErr['complate_error'] = "sendmail"; $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; $this->_objPage->setAssign("arrErr", $arrErr); } // ユーザー宛てメール送信 try { \Util::sendmail( array($this->arrForm['mail'] => $this->arrForm['name']), null, // ユーザーメール CC null, // ユーザーメール BCC \Service\Constans::$customer_mail_from_addr[$this->controller], \Service\Constans::$customer_mail_from_name[$this->controller], \Service\Constans::$customer_mail_title[$this->controller], $this->_objPage->getHtml($this->formTemplateDirectory . "mail/" . $this->controller . "_mail_return.tpl"), false // SMTP ); } catch (Exception $ex) { // 送信エラー $error_flag = true; $this->createLog($ex); $this->createLog('complate Function sendmail customer Error'); $arrErr['send'] = "送信に失敗しました。"; $arrErr['complate_error'] = "sendmail"; $this->_tpl = $this->formTemplateDirectory . $this->controller . "_input.tpl"; $this->_objPage->setAssign("arrErr", $arrErr); } } if (!$error_flag) { // Session削除 \Session::destroy('', true); // 完了画面へ遷移 header("Location: thanks.html#thanks"); exit(); } } function getErrCheck() { $arrErr = $this->_objForm->getFormCheck($this->arrForm); return $arrErr; } // フォーム項目設定 function setFormItem() { $this->_objForm->addParam("type", "お問合せ内容", array("require")); $this->_objForm->addParam("name", "お名前", array("require")); $this->_objForm->addParam("tel", "電話番号", array("require")); $this->_objForm->addParam("mail", "メールアドレス", array("require", "mail")); $this->_objForm->addParam("contents", "お問い合わせ内容", array()); } // セレクト項目設定 function setSelectItem($arrForm) { $arrItem = array(); $arrItem["type"] = array( ""=>"お選び下さい", "選択項目1"=>"選択項目1", "選択項目2"=>"選択項目1", "選択項目3"=>"選択項目3" ); // Smartyにアサイン $this->_objPage->setAssign("arrItem", $arrItem); } // フォーム画面設定 function getFormDisplay() { return $this->_objPage->getHtml($this->_tpl); } /* * 初期値を格納する */ function setDefaultData() { $this->arrForm = array( 'type' => '', 'name' => '', 'tel' => '', 'mail' => '', 'contents' => '', // csrfのキーは格納しない ); } /* * Sessionへ入力値を格納する */ function setSessionData() { \Session::set('type', $this->arrForm['type']); \Session::set('name', $this->arrForm['name']); \Session::set('tel', $this->arrForm['tel']); \Session::set('mail', $this->arrForm['mail']); \Session::set('contents', $this->arrForm['contents']); // csrfのキーは格納しない } /* * Sessionから入力値を取得する */ public function getSessionData() { $this->arrForm['type'] = \Session::get('type'); $this->arrForm['name'] = \Session::get('name'); $this->arrForm['tel'] = \Session::get('tel'); $this->arrForm['mail'] = \Session::get('mail'); $this->arrForm['contents'] = \Session::get('contents'); $this->arrForm['key'] = \Session::get('key'); } } ?>

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

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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は撤去しても問題ないでしょうか?

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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

Smarty

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