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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

解決済

2回答

1562閲覧

PHPメールフォーム実装 送信確認画面から送信ボタンを押すとエラー画面に飛んでしまう。

ema-material

総合スコア29

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

0クリップ

投稿2020/03/29 05:04

表題の通りです。送信確認画面から送信ボタンを押すとエラー画面に飛んでしまいます。
本来ならばdone.tmpl「送信完了」に飛んでほしいところです。。。

入力不備はないのですが、一番上位のエラーメッセージである
「チェックボックスが未選択です。一つ以上選択してください」と表示されます。

Warning: implode(): Invalid arguments passed in /Applications/XAMPP/xamppfiles/htdocs/fujisawa_international_university/contact/form/form_fujisawa.php on line 9

上記エラーメッセージに置ける9行めとは
$document = implode(' ',$_POST["document"]);

です。

アドバイスいただけますと助かります。
どうぞよろしくお願いします。

##送信画面側 index.html

html

1 <form method="post" action="form_fujisawa.php"> 2<!--1資料を選ぶチェックボックス--> 3 <dl class="form-area"> 4 <dt class="item01">希望する資料<span class="cap01">※複数回答可</span></dt> 5 <dd class="documentSelect"> 6 <label> 7 <input type="checkbox" name="document[]" class="checkbox-input" value="大学案内パンフレット"> 8 <span class="checkbox-parts">大学案内パンフレット<a class="pdf" href="#">(pdf版はこちら)</a></span> 9 </label> 10 <label> 11 <input type="checkbox" name="document[]" class="checkbox-input" value="大学募集要項"> 12 <span class="checkbox-parts">大学募集要項</span> 13 </label> 14 <label> 15 <input type="checkbox" name="document[]" class="checkbox-input" value="産業・地域連携成果報告"> 16 <span class="checkbox-parts">産業・地域連携成果報告</span> 17 </label> 18</dd> 19<!--1資料を選ぶチェックボックス--> 20 21<!--2名前記入欄--> 22 <dt class="item02"><label for="nameInput">お名前</label></dt> 23 <dd class="caitionDesign01">必須</dd> 24 <dd class="name"><input id="nameInput" type="text" name="name" placeholder="大学花子" oncopy="return false" onpaste="return false"></dd> 25<!--2名前記入欄--> 26 27<!--3郵便番号入力欄(7桁以上) --> 28 <dt class="item03"><label for="zipInput">郵便番号</label></dt> 29 <dd class="caitionDesign02">必須</dd> 30<dd class="zip"> 31 32 <input type="text" name="zip" maxlength="9" id="zipInput" placeholder="1000000" pattern="\d*" oncopy="return false" onpaste="return false" style="ime-mode:disabled"></dd> 33 <dd class="cap04">※ハイフン(-)は入力しないで下さい。</dd> 34 35<!-- 3郵便番号入力フィールド(7桁以上) --> 36 37<!-- 4住所入力欄(都道府県+以降の住所) --> 38 <dt class="item04"><label for="addInput">住所</label></dt> 39 <dd class="caitionDesign03">必須</dd> 40 <dd class="add"> 41 <input id="addInput" type="text" name="add" placeholder="東京都渋谷区渋谷1-1-1" oncopy="return false" onpaste="return false"></dd> 42<!-- 4住所入力欄(都道府県+以降の住所) --> 43 44<!-- 5電話番号記入欄--> 45 <dt class="item05"><label for="phoneInput">電話番号</label></dt> 46 <dd class="caitionDesign04">必須</dd> 47 <dd class="phoneNo"> 48 <input id="phoneInput" type="tel" name="tel" placeholder="0800000000" pattern="\d*" oncopy="return false" onpaste="return false" style="ime-mode:disabled"></dd> 49 <dd class="cap02">※ハイフン(-)は入力しないで下さい。</dd> 50 51 52<!-- 5電話番号記入欄--> 53 54<!-- 6メールアドレス記入欄 --> 55 <dt class="item06"><label for="mailInput">メールアドレス</label></dt> 56 <dd class="caitionDesign05">必須</dd> 57 <dd class="mailAdd"> 58 <input id="mailInput" type="email" name="email" placeholder="shiryou@daigaku.com" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$" oncopy="return false" onpaste="return false" style="ime-mode:disabled"></dd> 59 <dd class="cap03">※半角英数記号のみ</dd> 60<!-- 6メールアドレス記入欄 --> 61 62 <!-- 7お問い合わせ内容記入欄 --> 63 <dt class="item07"><label for="inquiry">お問い合わせ内容</label></dt> 64 <dd class="caitionDesign06">任意</dd> 65 <dd class="inquiryText"> 66 <textarea id="inquiry" name="inquiry"></textarea></dd> 67 <!-- 7お問い合わせ内容記入欄 --> 68 </dl> 69 <!-- 8送信ボタン --> 70 <button type="submit" class="btn11"><span>送信する</span></button> 71 <input type="hidden" name="mode" value="post"> 72<!-- 8送信ボタン --> 73 74</form> 75

##php form_fujisawa.php

php

1#入力情報の受け取りと加工 2$document = implode(' ',$_POST["document"]); 3$name = $_POST["name"]; 4$zip = $_POST["zip"]; 5$add = $_POST["add"]; 6$tel = $_POST["tel"]; 7$email = $_POST["email"]; 8$inquiry = $_POST["inquiry"]; 9 10 11#無効化 12$name = htmlentities($name,ENT_QUOTES, "UTF-8"); 13$zip = htmlentities($zip,ENT_QUOTES, "UTF-8"); 14$add = htmlentities($add,ENT_QUOTES, "UTF-8"); 15$tel = htmlentities($tel,ENT_QUOTES, "UTF-8"); 16$email = htmlentities($email,ENT_QUOTES, "UTF-8"); 17$inquiry = htmlentities($inquiry,ENT_QUOTES, "UTF-8"); 18 19#改行処理 20$name = str_replace("\r\n","", $name); 21$zip = str_replace("\r\n","", $zip); 22$add = str_replace("\r\n","", $add); 23$tel = str_replace("\r\n","", $tel); 24$email = str_replace("\r\n","", $email); 25$inquiry = str_replace("\r\n","\t", $inquiry); 26$inquiry = str_replace("\r","\t", $inquiry); 27$inquiry = str_replace("\n","\t", $inquiry); 28 29#入力チェック 30if ($document == ""){ error("チェックボックスが未選択です。一つ以上選択してください");} 31if ($name == ""){ error("お名前が未入力です");} 32if ($zip == ""){ error("郵便番号が未入力です");} 33if ($add == ""){ error("住所が未入力です");} 34if ($tel == ""){ error("電話番号が未入力です");} 35if (!preg_match("/\w+@\w+/",$email)){ error("メールアドレスが未入力であるか、不正です");} 36 37#分岐チェック 38if ($_POST["mode"] == "post"){ conf_form();} 39else if ($_POST["mode"] == "send"){ send_form();} 40#conf_form(); 41#確認画面 42function conf_form(){ 43 global $document; 44 global $name; 45 global $zip; 46 global $add; 47 global $tel; 48 global $email; 49 global $inquiry; 50 51#テンプレート読み込み 52 $conf = fopen("tmpl/verification.tmpl","r") or die; 53 $size = filesize("tmpl/verification.tmpl"); 54 $data = fread($conf, $size); 55 fclose($conf); 56 57#文字置き換え 58 $data = str_replace("!document!", $document, $data); 59 $data = str_replace("!name!", $name, $data); 60 $data = str_replace("!zip!", $zip, $data); 61 $data = str_replace("!add!", $add, $data); 62 $data = str_replace("!tel!", $tel, $data); 63 $data = str_replace("!email!", $email, $data); 64 $data = str_replace("!inquiry!", $inquiry, $data); 65 66#表示 67 echo $data; 68 exit; 69} 70 71#エラー画面 72function error($msg){ 73 $error = fopen("tmpl/error.tmpl","r"); 74 $size = filesize("tmpl/error.tmpl"); 75 $data = fread($error , $size); 76 fclose($error); 77 78#文字置き換え 79 $data = str_replace("!error!", $msg, $data); 80 81 82#表示 83 echo $data; 84 exit; 85} 86 87#CSV書き込み 88function send_form(){ 89 global $document; 90 global $name; 91 global $zip; 92 global $add; 93 global $tel; 94 global $email; 95 global $inquiry; 96 97 $user_input = array($document,$name,$zip,$add,$tel,$email,$inquiry); 98 mb_convert_variables("SJIS","UTF-8",$user_input); 99 $fh =fopen("user.csv","a"); 100 flock($fh,LOCK_EX); 101 fputcsv($fh, $user_input); 102 flock($fh,LOCK_UN); 103 fclose($fh); 104 105#メール送信 106 #send_mail(); 107 108#テンプレート読み込み 109 $conf = fopen("tmpl/done.tmpl","r") or die; 110 $size = filesize("tmpl/done.tmpl"); 111 $date = fread($conf, $size); 112 fclose($conf); 113#文字置き換え 114 global $topage; 115 $date = str_replace("!top!",$toppage, $date); 116#表示 117 echo $date; 118 exit; 119}

##テンプレートファイル 確認画面 tmpl/verification.tmpl

html

1 <section id="verificationBox"> 2 <h2>送信内容確認<br> 3<span>お問い合わせ内容はこちらで宜しいでしょうか?<br> 4よろしければ「送信」ボタンを押して下さい。</span></h2> 5 6 7 8 <dl class="verification-wrapper"> 9 10 <dt class="dtText">希望する資料</dt> 11 <dd class="ddText">!document!</dd> 12 13 14 <dt class="dtText">名前</dt> 15 <dd class="ddText">!name!</dd> 16 17 <dt class="dtText">郵便番号</dt> 18 <dd class="ddText">!zip!</dd> 19 20 <dt class="dtText">住所</dt> 21 <dd class="ddText">!add!</dd> 22 23 <dt class="dtText">電話番号</dt> 24 <dd class="ddText">!tel!</dd> 25 26 <dt class="dtText">E-mail</dt> 27 <dd class="ddText">!email!</dd> 28 29 <dt class="dtText">お問い合わせ内容</dt> 30 <dd class="ddText">!inquiry!</dd> 31 32 33</dl> 34 <ul class="verificationAfterBtn"> 35 <li> 36<a href="javascript:history.back();" class="btn05"><span>内容を修正する</span></a> 37 38 39<form action="form_fujisawa.php" method="post"> 40<button type="submit" class="btn06"><span>送信する</span></button> 41 <input type="hidden" name="mode" value="send"> 42 <input type="hidden" name="document" value="!document!"> 43 <input type="hidden" name="name" value="!name!"> 44 <input type="hidden" name="zip" value="!zip!"> 45 <input type="hidden" name="add" value="!add!"> 46 <input type="hidden" name="tel" value="!tel!"> 47 <input type="hidden" name="email" value="!email!"> 48 <input type="hidden" name="inquiry" value="!inquiry!"> 49</form> 50 51 </li> 52 </ul> 53 </section>

##テンプレートファイル エラー画面tmpl/error.tmpl

html

1 <section id="errorBox"> 2 3 <h2>入力内容に不備がありました</h2> 4 <ul class="errormessageWrapper"> 5 <li class="e_m">!error!</li> 6 7 </ul> 8 9 10 11<a href="javascript:history.back();" class="btn05"><span>内容を修正する</span></a> 12 13 14 </section>

##テンプレートファイル 送信完了画面tmpl/done.tmpl

html

1 <section id="doneBox"> 2 <h2>送信完了<br> 3<span>追って事務局よりご連絡差し上げます。<br> 4ご入力ありがとうございました。</span></h2> 5 6 7 8 9 10<a href="../index.html" class="btn07">お問い合わせ一覧</a> 11 12 13 </section>

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

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

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

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

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

guest

回答2

0

チェックボックスなどは未選択ならそもそも送信されないのでnullをimplodeしようとして提示のエラーになってます。

変数でエラーになっている場合、直前でvar_dump()で出力し、想定の内容がきているかデバッグしてください。

投稿2020/03/29 05:45

m.ts10806

総合スコア80850

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

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

ema-material

2020/03/29 08:46

コメントありがとうございます。 デバッグに慣れていないので、とりあえず仮に $document = implode(' ',$_POST["document"]); の後の行に var_dump($document); と打ってみました。 string(65) "大学案内パンフレット 産業・地域連携成果報告" と出まして、ここまでは合っています。 確認画面にも同様に「大学案内パンフレット 産業・地域連携成果報告」と記入されています。 その後送信ボタンを押すと Warning: implode(): Invalid arguments passed in /Applications/XAMPP/xamppfiles/htdocs/fujisawa_international_university/contact/form/form_fujisawa.php on line 10 NULL 上記のようなアラートとなり 「チェックボックスが未選択です。一つ以上選択してください」と本文中に記載されます。 確認画面からうまくデータが渡せてないということでしょうか?
guest

0

自己解決

この件、時間かかりましたが解決しました。
if(is_array...を記載しました。

投稿2020/04/14 13:27

編集2020/04/14 15:44
ema-material

総合スコア29

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

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

ema-material

2020/04/14 15:42

if(is_arrayを書き加えました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問