前提
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/
よろしくお願いします。
何か参考にした記事があるならば明示された方が良いかと思います。
cotactform.php はこのソースコードのファイルでしょうか?
もしそうならば、追加した行をファイルの最後に持っていき、追加コードの手前に ?> を追加したらうまくいくかもしれません。
参考にしたサイトを質問欄に追加しました。
よろしくお願いします。
質問は編集できますので
プレビュー確認して編集完了してくださいね。
補足情報以下がコードブロックに含まれています
ご回答ありがとうございます。
閉じて開いてもメールは送信されませんでした。
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);
}
}
//一回閉じる。
以下のエラーメッセージに変わりました。
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);
}
}
これはエラーメッセージが出ないですがメールが送信されません。
<?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);
}
}
これは以下のエラーメッセージが表示されます。
"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);
}
}
回答2件