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

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

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

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

Q&A

解決済

2回答

841閲覧

phpのお問い合わせフォームについて

believe

総合スコア91

PHP

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

0グッド

1クリップ

投稿2023/01/13 21:39

編集2023/01/14 05:22

前提

phpでお問い合わせフォームをpostするときにエラーになります。

参考にしたサイトです。
https://qiita.com/s79ns/items/62ce69fef20258f35534

https://ginneko-atelier.com/blogs/entry236/

実現したいこと

メール送信

発生している問題・エラーメッセージ

"syntax error, unexpected '<'"

該当のソースコード

<?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm1 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 //ここから追加しました。 <?php if($_POST ){ ?> <!-- 確認画面 --> <form action="./cotactform.php" method="post"> 名前 <?php echo $_POST["fullname"] ?> Eメール <?php echo $_POST["email"] ?> 本文 <?php echo nl2br($_POST["message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> <?php } else { ?> <!-- 入力画面 --> <form action="./contactform.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php } ?> //ここまで $c = Page::getCurrentPage(); header('location: '.Core::make('helper/navigation')->getLinkToCollection($c, true).'/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section','complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }

補足情報(FW/ツールのバージョンなど)

concrete5の外部フォームの埋め込みについてエラーが発生します。

参考にしたサイトです。
https://qiita.com/s79ns/items/62ce69fef20258f35534

https://ginneko-atelier.com/blogs/entry236/

よろしくお願いします。

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

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

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

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

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

devneko64bit

2023/01/14 01:00

何か参考にした記事があるならば明示された方が良いかと思います。 cotactform.php はこのソースコードのファイルでしょうか? もしそうならば、追加した行をファイルの最後に持っていき、追加コードの手前に ?> を追加したらうまくいくかもしれません。
believe

2023/01/14 04:52 編集

参考にしたサイトを質問欄に追加しました。 よろしくお願いします。
m.ts10806

2023/01/14 04:47

質問は編集できますので
m.ts10806

2023/01/14 05:03

プレビュー確認して編集完了してくださいね。
m.ts10806

2023/01/14 05:18

補足情報以下がコードブロックに含まれています
believe

2023/01/19 04:33

ご回答ありがとうございます。 閉じて開いてもメールは送信されませんでした。
believe

2023/01/19 07:21

Arguments "syntax error, unexpected 'else' (T_ELSE), expecting function (T_FUNCTION) or const (T_CONST)" のエラーメッセージが表示されました。 <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { } ?>//一回閉じる。 //ここから追加しました。 <?php if ($_POST) { ?> //<!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["fullname"] ?> Eメール <?php echo $_POST["email"] ?> 本文 <?php echo nl2br($_POST["message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> <?php } else { ?> // <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php }?> //ここまで <?php $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } } //一回閉じる。
believe

2023/01/19 07:54

以下のエラーメッセージに変わりました。 Arguments "Call to a member function action() on null" <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 // if ($this->validate()) { // } // } //一回閉じる。 //ここから追加しました。 if ($_POST) { //<!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["p_name"] ?> Eメール <?php echo $_POST["p_email"] ?> 本文 <?php echo nl2br($_POST["p_message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> } else { // <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> } //ここまで $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }
believe

2023/01/19 09:02

これはエラーメッセージが出ないですがメールが送信されません。 <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 ?>//一回閉じる。 //ここから追加しました。 <?php if ($_POST) { ?> <!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["p_name"] ?> Eメール <?php echo $_POST["p_email"] ?> 本文 <?php echo nl2br($_POST["p_message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> } else { // <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php } ?> //ここまで <?php //もう一回開ける $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }
believe

2023/01/19 09:04

これは以下のエラーメッセージが表示されます。 "syntax error, unexpected 'else' (T_ELSE), expecting function (T_FUNCTION) or const (T_CONST)" <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 // public function action_send($bID = false) { $error_message = []; $token = \Core::make('token'); if ($this->bID == $bID && $token->validate('complete')) { $validation = Core::make('helper/validation/strings'); if (!$validation->email($this->post('email'))) { $error_message[] = h('メールアドレスが正しくありません'); } if (!$validation->notempty($this->post('radio')) || !$validation->notempty($this->post('nickname'))) { $error_message[] = h('必須項目を入力してください'); } if (!empty($error_message)) { $this->set('errorMsg', $error_message); } else { /** * メール送信後の処理 */ } } else { $error_message[0] = '送信に失敗しました'; $this->set('errorMsg', $error_message); } } } ?>//一回閉じる。 //ここから追加しました。 //ここまで <?php //もう一回開ける $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }
guest

回答2

0

自己解決

メール送信できませんでした。

投稿2023/01/20 09:03

believe

総合スコア91

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

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

0

一回閉じて開けたらどうかなぁと思って回答してみます。
※動作確認していないので、間違っている可能性大です。

PHP

1<?php 2 3namespace Application\Block\ExternalForm\Form\Controller; 4 5use Concrete\Core\Controller\AbstractController; 6use Core; 7use Page; 8 9class TForm1 extends AbstractController 10{ 11 12 // action を指定しなかった場合、view が実行されると思われる。初期表示。 13 public function view() 14 { 15 16 // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 17 18 $input['p_name'] = ''; 19 $input['p_email'] = ''; 20 $input['p_message'] = ''; 21 22 $this->set('isvalid', true); 23 24 $this->set('input', array()); 25 $this->set('error', array()); 26 27 $this->set('section', 'edit'); 28 } 29 30 // 入力値の検証処理 31 private function validate() 32 { 33 34 // バリデーション結果を成功に設定 35 $isvalid = true; 36 37 // 入力値を取得 38 $input['p_name'] = trim($this->post('p_name')); 39 $input['p_email'] = trim($this->post('p_email')); 40 $input['p_message'] = trim($this->post('p_message')); 41 42 // 検証実行 43 if ($input['p_name'] == '') { 44 $isvalid = false; 45 $error['p_name'] = 'お名前は、必ず入力してください。'; 46 } 47 48 if ($input['p_email'] == '') { 49 $isvalid = false; 50 $error['p_email'] = 'メールアドレスは、必ず入力してください。'; 51 } 52 53 if ($input['p_message'] == '') { 54 $isvalid = false; 55 $error['p_message'] = 'メッセージは、必ず入力してください。'; 56 } 57 58 // View に値を渡す 59 $this->set('isvalid', $isvald); 60 61 $this->set('input', $input); 62 $this->set('error', $error); 63 64 return $isvalid; 65 } 66 67 public function action_confirm() 68 { 69 // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 70 if ($this->validate()) { 71 $section = 'confirm'; 72 } else { 73 $section = 'edit'; 74 } 75 $this->set('section', $section); 76 } 77 78 public function action_update() 79 { 80 // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 81 if ($this->validate()) { 82 83 //ここの部分でエラーが発生します。 84 85 86?>//一回閉じる。 87 88 89//ここから追加しました。 90 91 92<?php if ($_POST) { ?> 93 <!-- 確認画面 --> 94 <form action="./cotactform.php" method="post"> 95 名前 <?php echo $_POST["fullname"] ?> 96 Eメール <?php echo $_POST["email"] ?> 97 本文 <?php echo nl2br($_POST["message"]) ?> 98 <input type="submit" name="back" value="戻る" /> 99 <input type="submit" name="send" value="送信" /> 100 </form> 101<?php } else { ?> 102 <!-- 入力画面 --> 103 <form action="./contactform.php" method="post"> 104 名前 <input type="text" name="fullname" value=""> 105 Eメール <input type="email" name="email" value=""> 106 本文 <textarea name="message" id="" cols="" rows=""></textarea> 107 <input type="submit" name="confirm" value="確認" class="button"> 108 </form> 109<?php } ?> 110 111//ここまで 112 113<?php //もう一回開ける 114 115 116 $c = Page::getCurrentPage(); 117 header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); 118 exit; 119 } else { 120 $this->set('section', 'edit'); 121 } 122 } 123 124 public function action_complete() 125 { 126 $this->set('section', 'complete'); 127 } 128 129 public function action_back() 130 { 131 // 戻るボタンで、編集(edit)セクションを表示します。 132 $section = 'edit'; 133 $this->set('section', $section); 134 } 135} 136

投稿2023/01/19 04:09

penguin520

総合スコア345

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問