• 締切済み

concrete5の外部フォームの埋め込みについて

前提 phpでお問い合わせフォームをpostするときにエラーになります。 実現したいこと メール送信 concrete5の外部フォームの埋め込みについてエラーが発生します。 参考にしたサイトです。 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); } }

みんなの回答

回答No.1

"syntax error, unexpected '<'"というエラーは、action_update()関数内に、 <?php if($_POST ){ ?>のようにPHPのコードブロックが二重となっていることです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 //ここから追加

fujisawa33
質問者

お礼

ありがとうございました。質問し直します。

fujisawa33
質問者

補足

具体的にどう書けばいいですか? お願いします。

関連するQ&A

  • メールが送信されません。<phpを閉じて開いても

    メールが送信されません。<phpを閉じて開いても送信ボタンを押してメールが送信されません。 <?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); } }

    • 締切済み
    • PHP
  • フォームの入力チェック処理について

    確認ボタンを押しエラーがあればエラーメッセージを出力し なければ確認画面に移りたいと考えているのですがうまくいきません。 具体的には 1:入力フォームを表示 2-1:送信ボタンを押しエラーがあればメッセージ出力 2-2:送信ボタンを押しエラーがなければhiddenのname="mode" value="confirm"を渡す hiddenの値はswitchのcase文の値でconfirmで確認画面を表示します。 入力フォームを表示する段階にてhiddenを渡しているのが原因なのは わかるのですがエラーチェックを通す際の構文がわかりません・・・ また、hiddenを消すとエラーチェックが通るのですが例えば名前を入力 しメールを入力しない状態で 送信ボタンを押すとメールの入力を促すエラーメッセージが表示され名前の入力も消えてしまいます。 これは回避できるのでしょか? 見づらいかと思うのですが下記のソースです。宜しくお願い致します。 function input() { if(isset($_POST{"submit"})) { if (empty($_POST["name"])) { $error_message[] = "お名前を入力して下さい。"; } if (empty($_POST["email"])) { $error_message[] = "メールアドレスを入力して下さい。"; }if (count($error_message)) { echo "<p style=\"color: #ff0000\">入力内容にエラーがあります。</p>\n"; foreach ($error_message as $message) { echo "<p style=\"color: #ff0000\">" . "・$message" . "</p>\n"; } } } echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">\n"; echo "<table border=\"1\">\n"; echo "<tr>\n"; echo "<td>お名前</td>\n"; echo "<td><input type=\"text\" name=\"name\" size=\"20\"></td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td>メールアドレス</td>\n"; echo "<td><input type=\"text\" name=\"email\" size=\"20\"></td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td>メッセージ</td>\n"; echo "<td><textarea name=\"msg\" rows=\"5\" cols=\"40\"></textarea></td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"内容を確認\"></td>\n"; echo "</tr>\n"; echo "</table>\n"; echo "<input type=\"hidden\" name=\"mode\" value=\"confirm\" />\n"; echo "</form>\n"; }

    • 締切済み
    • PHP
  • メールフォームが動いてくれない。

    初心者ながら以下のようなメールフォームを書いたのですがうまく動いてくれません。どうしてなのでしょうか? ----hoge.php---- <?php $mail = $_POST['mail']; $address = $_POST['add']; if(empty($mail)){ $1 = "入力してください。"; }elseif(empty($address)){ $2 = "入力してください。"; }else{ //メール送信 echo("送信しました。"); exit; } ?> <form action="hoge.php" method="post"> E-mail <inputtype="text" name="add"><?=$1?> Message <input type="text" name="mail"><?=$2?> <input type="submit" value="send!!"> </form> ----- 一応、メールアドレスや本文が未入力の場合、エラーメッセージを出すようにしています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 複数のフォームから送信

    複数のフォームからtextの値を送信したいのですができますか?〒番号を入力して検索ボタンをおすと住所がでてきて最後に登録をしたいです。検索だけのプログラムはできてますがフォームを二つにすると両方のsubmitが登録になります・・・ 一応自分でいろいろためしましたがだめでした。。。 html,php,javascriptです。 二つともだめでした。。。。 rei1.php ------------------------- <html> <body <form method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> <br> <form method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> -------------------------------------- rei2.php -------------------------------------- <html> <head> <script language="javascript"><!-- function send() { document.nform.submit(); document.nform2.submit(); document.nform3.submit(); } //--></script> </head> <body> <form name="nform" method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> </form> <form name="nform2" method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> <form name="nform3" method="POST" action="1.php"> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> ------------------------------------

  • form変数の初期化

    <br /><b>Notice</b>: Undefined index: your_name in <b>C:\xampp\htdocs\test\index.php</b> on line <b >83</b><br /> 入力画面で上記のエラーが解決しません。 どうすればいいでしょうか? 入力画面 <?php $_POST = array(); ?> <form method="post" action="./form_check.php"> <div class="element_wrap"> <label>氏名</label> <input type="text" name="your_name" value="<?php echo $_POST["your_name"]?>"> </div> <div class="element_wrap"> <label>メールアドレス</label> <input type="text" name="email" value=""> </div> <input type="submit" name="btn_confirm" value="入力内容を確認する"> </form> 確認画面 <?php $your_name = $_POST["your_name"]; ?> <form method="post" action="./test.php"> <div class="element_wrap"> <label>氏名</label> <p><?php echo $your_name; ?></p> </div> <div class="element_wrap"> <label>メールアドレス</label> <p><?php echo $_POST['email']; ?></p> </div> <input type="submit" name="btn_submit" value="送信"> </form> <form method="post" action="./index.php"> <!--<input type="button" name="btn_back" onclick="history.back()" value="戻る">--> <input type="submit" name="btn_back" value="戻る"> <input type="hidden" name="your_name" value="<?php echo $_POST['your_name']; ?>"> <input type="hidden" name="email" value="<?php echo $_POST['email']; ?>"> </form>

    • 締切済み
    • PHP
  • javascript php フォームについて

    javascriptで作ったフォームをphpに送信したいのですが、上手く送信できません。 どのようにすれば上手く送信することができるでしょうか? 回答お願いします。 javascript側のソース <body> <form name="nform1" method="POST" action="./kaitou1.php" enctype="text/plain"> <p>問1</p> <p> (1)<input type="text" name="kaitouran11" size="20"> (2)<input type="text" name="kaitouran12" size="20"> (3)<input type="text" name="kaitouran13" size="20"> (4)<input type="text" name="kaitouran14" size="20"> </p> </form> <form name="nform2" method="POST" action="./kaitou1.php" enctype="text/plain"> <p>問2</p> <p> (1)<input type="text" name="kaitouran21" size="20"> (2)<input type="text" name="kaitouran22" size="20"> (3)<input type="text" name="kaitouran23" size="20"> (4)<input type="text" name="kaitouran24" size="20"> </p> </form> <form name="nform3" method="POST" action="./kaitou1.php" enctype="text/plain"> <p>問3</p> <p> (1)<input type="text" name="kaitouran31" size="20"> (2)<input type="text" name="kaitouran32" size="20"> (3)<input type="text" name="kaitouran33" size="20"> (4)<input type="text" name="kaitouran34" size="20"> </p> </form> <input type="button" value="送信" onClick="send()"> </body> php側のソース <body> <p>問1</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran11'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran12'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran13'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran14'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問2</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran21'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran22'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran23'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran24'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問3</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran32'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran33'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran34'], ENT_QUOTES, 'UTF-8')); ?> </p> </body>

    • 締切済み
    • PHP
  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • PHPでのクッキー

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 直接form2.phpへ飛ぶと、クッキーの値がなくなってしまいます。 setcokkieが、何の値もないのを上書きしていることは理解できるのですが、これを上書きせず回避?する方法はありますでしょうか? よろしくお願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • 問い合わせフォームからPHPを使って、、、、、

    問い合わせフォームからPHPを使って指定のアドレスにメールを送ろうとしているのですが、届きません、、、、、、 原因が分かりません。助けていただけないでしょうか。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>お問い合わせページ</title> <link rel="stylesheet" href="styles.css"> </head> <body> <h1>お問い合わせページ</h1> <form action="send_email.php" method="post"> <label for="name">お名前:</label> <input type="text" id="name" name="name" required><br><br> <label for="email">メールアドレス:</label> <input type="email" id="email" name="email" required><br><br> <label for="message">お問い合わせ内容:</label><br> <textarea id="message" name="message" rows="4" cols="50" required></textarea><br><br> <input type="submit" value="送信"> </form> </body> </html> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 以下がPHPのプログラムです。 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST["name"]; $email = $_POST["email"]; $message = $_POST["message"]; // 送信先のメールアドレス $to = "***@gmail.com"; // 件名 $subject = "お問い合わせがありました"; // 本文 $body = "お名前: $name\n"; $body .= "メールアドレス: $email\n\n"; $body .= "お問い合わせ内容:\n$message"; // メールを送信 mail($to, $subject, $body); // 送信後のリダイレクト header("Location: thank_you.html"); exit; } ?>

    • 締切済み
    • PHP
  • 「PHP初心者」入力フォームの件

    フォームから名前を入力して 送信後、その名前を表示させ 未入力だとエラーの言葉を表示させるサンプルになります。 ------------------------------------------- <html> <body> <form action="" method="post"> <p>【お名前】<input type="text" name="name"></p> <p><input type="submit" value="送信"></p> </form> </body> </html> <?php function Aa($str){ return htmlspecialchars($str, ENT_QUOTES, "UTF-8"); } if($_POST["name"] == ""){ echo "名前を入力してください。"; }else{ $name = Aa(@$_POST["name"]); echo $name; } ?> ------------------------------------------- 上記は正しい例になりますが 最初に頭に浮かんで書いてみたのは 「isset」を使った以下の構文でした。 ------------------------------------------- if(isset($_POST["name"])){ $name = Aa(@$_POST["name"]); echo $name; }else{ echo "名前を入力してください。"; } ------------------------------------------- この構文では名前が未入力の場合でも エラーメッセージの「名前を入力してください。」が出力されず 表示されません。 (もしnameが入力されていればnameを出力。 入力されていなければechoの「名前を入力してください」を 出力という「==」と同じような解釈で 「isset」を使ってみたのですが間違いでした。 この場合「isset」はどうして使えないのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう