前提・実現したいこと
PHPで、お問合せフォームを作っています。
ごくシンプルなものですが、ラジオボタンがあります。
完成させたいのですが、ご教示お願いします。
ファイル構成は、index.html,sample.php,user.csvと
tmplのフォルダ。その中に、comf.tmpl,error.tmpl,send.tmpl
があります。
csvファイルに顧客データを記録するためのシステム構築を考えております。
発生している問題・エラーメッセージ
Warning: Undefined array key "mode" on line 43 Warning: Undefined array key "mode" on line 44
該当のソースコード
sample.php <?php # 送信先アドレス $mailto = "ta@air.email.ne.jp"; # 送信後画面からの戻り先 $toppage = "./form.html"; #=========================================================== # 入力情報の受け取りと加工 #=========================================================== $name = $_POST["name"]; $email = $_POST["email"]; $tel = $_POST["tel"]; $zipcode = $_POST["zipcode"]; $address = $_POST["address"]; $attribute = $_POST["attribute"]; $comment = $_POST["comment"]; # 無効化 $name = htmlentities($name,ENT_QUOTES, "UTF-8"); $email = htmlentities($email,ENT_QUOTES, "UTF-8"); $tel = htmlentities($tel,ENT_QUOTES, "UTF-8"); $zipcode = htmlentities($zipcode,ENT_QUOTES, "UTF-8"); $address = htmlentities($address,ENT_QUOTES, "UTF-8"); $comment = htmlentities($comment,ENT_QUOTES, "UTF-8"); # 改行処理 $name = str_replace("\r\n", "", $name); $email = str_replace("\r\n", "", $email); $tel = str_replace("\r\n", "", $tel); $zipcode = str_replace("\r\n", "", $zipcode); $address = str_replace("\r\n", "", $address); $comment = str_replace("\r\n", "\t", $comment); $comment = str_replace("\r", "\t", $comment); $comment = str_replace("\n", "\t", $comment); # 入力チェック if ($name == "") { error("名前が未入力です"); } if (!preg_match("/\w+@\w+/",$email)){ error("メールアドレスが不正です"); } if ($comment == "") { error("コメントが未入力です"); } # 分岐チェック if ($_POST["mode"] == "post") { conf_form(); } else if($_POST["mode"] == "send") { send_form(); } #----------------------------------------------------------- # 確認画面 #----------------------------------------------------------- function conf_form(){ global $name; global $email; global $tel; global $zipcode; global $address; global $attribute; global $comment; # テンプレート読み込み $conf = fopen("tmpl/conf.tmpl","r") or die; $size = filesize("tmpl/conf.tmpl"); $data = fread($conf , $size); fclose($conf); # 文字置き換え $data = str_replace("!name!", $name, $data); $data = str_replace("!email!", $email, $data); $data = str_replace("!tel!", $tel, $data); $data = str_replace("!zipcode!", $zipcode, $data); $data = str_replace("!address!", $address, $data); $data = str_replace("!attribute!", $attribute, $data); $data = str_replace("!comment!", $comment, $data); # 表示 echo $data; exit; } #----------------------------------------------------------- # エラー画面 #----------------------------------------------------------- function error($msg){ $error = fopen("tmpl/error.tmpl","r"); $size = filesize("tmpl/error.tmpl"); $data = fread($error , $size); fclose($error); #文字置き換え $data = str_replace("!message!", $msg, $data); #表示 echo $data; exit; } #----------------------------------------------------------- # CSV書込 #----------------------------------------------------------- function send_form(){ global $name; global $email; global $tel; global $zipcode; global $address; global $attribute; global $comment; $user_input = array($name,$email,$tel,$zipcode,$address,$attribute,$comment); mb_convert_variables("SJIS","UTF-8",$user_input); $fh = fopen("user.csv","a"); flock($fh,LOCK_EX); fputcsv($fh, $user_input); flock($fh,LOCK_UN); fclose($fh); # テンプレート読み込み $conf = fopen("tmpl/send.tmpl","r") or die; $size = filesize("tmpl/send.tmpl"); $data = fread($conf , $size); fclose($conf); #文字置き換え global $toppage; $data = str_replace("!top!", $toppage, $data); #表示 echo $data; exit; } html index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> </title> </head> <body> <div id="headerLogo"> <a href="../index.html"><div id="kjsLogo"><img src="../images/kjslogo.png" alt="カトウジュニアスポーツロゴ" width="80px" /></div></a> <div id="kjsNameLogo"> <a href="../index.html"><p><img src="../images/kjs-name-eigo.png" width="300px" /></p> <p><img src="../images/kjs-name-katakana.png" width="300px" height="22px" /></div></a> </p> </div> <div> <nav id="annai-left"> <h1>お問い合わせ</h1> <p> のホームページにアクセスありがとうございます。<br>お問い合わせいただきました件につきましては、原則メールにて回答申し上げます。<br>尚、お電話での回答をご希望の方は、電話番号のご入力をお願いいたします。</p> <p>よろしくお願いいたします。</p> </nav> <nav id="annai-right"> <p>電話でのお問い合わせ</p> <p id="phone">8</p> <p>FAXでのお問い合わせ</p> <p id="fax">3</p> <p>受付時間 平日9時~17時30分</p> </nav> </div> <form action="sample.php" method="post"> <table id="otoiawaseform" cellspacing="0" cellpadding="20" > <tr> <th>お名前 <span class="hissu">(必須)</span></th> <td><input type="text" name="name" placeholder="(例)山田太郎" size="40" required></td> </tr> <tr> <th>メールアドレス <span class="hissu">(必須)</span></th> <td> <input type="email" name="email" placeholder="(例)ooo@×××" size="40" required></td> </tr> <tr> <th>電話番号 <span class="hissu">(ご希望の方)</span></th> <td><input type="tel" name="tel" placeholder="(例)09011112222 ハイフンなし" size="25" ></td> </tr> <tr> <th>郵便番号</th> <td><input type="text" name="zipcode" placeholder="(例)1500031 ハイフンなし" size="20" pattern="\d{7}" ></td> </tr> <tr> <th>住所</th> <td><input type="text" name="address" placeholder="都道府県、市区町村、番地、建物名" size="50" ></td> </tr> <tr> <th>お客様の属性</th> <td> <input type="radio" name="attribute" value="wholesaling">卸業関係の方 <input type="radio" name="attribute" value="company">法人の方 <input type="radio" name="attribute" value="person">個人の方 </td> </tr> <tr> <th>お問い合わせ内容 <span class="hissu">(必須)</span></th> <td> <textarea name="comment" cols="70" rows="10"></textarea> </td> </tr> </table> <input type="submit" name="submit" value="送信します" class="sousinbtn"> <input type="hidden" name="mode" value="post"> </form> <a href="../index.html #sec0" ><p id="return-top">メインページに戻る</p></a> </body> </html> tmpl/conf.tmpl <!doctypr html> <html> <head> <meta charset="utf-8"> <style type="text/css"> <!-- span { color:green; } --> </style> <title>確認フォーム</title> </head> <body> <p>次の内容でよろしければ、送信ボタンを押してください。</p> <p> ■お名前 : <span>!name!</span> </p> <p> ■メールアドレス : <span>!email!</span> </p> <p> ■電話番号 : <span>!tel!</span> </p> <p> ■郵便番号 : <span>!zipcode!</span> </p> <p> ■住所: <span>!address!</span> </p> <p> ■お客様の属性 : <span>!attribute!</span> </p> <p> ■コメント : <span>!comment!</span> </p> <form action="form.php" method="post"> <input type="hidden" name="mode" value="send"> <input type="hidden" name="name" value="!name!"> <input type="hidden" name="email" value="!email!"> <input type="hidden" name="tel" value="!tel!"> <input type="hidden" name="zipcode" value="!zipcode!"> <input type="hidden" name="address" value="!address!"> <input type="hidden" name="attribute" value="!attribute!"> <input type="hidden" name="comment" value="!comment!"> <input type="button" value="前に戻る" onclick="history.back()"> <input type="submit" value="送信する"> </form> </body> </html> tmpl/error.tmpl <!doctype html> <html> <head> <meta charset="utf-8"> <style type="text/css"> p.msg{ color:red; } </style> <title>エラー</title> </head> <body> <p><b>エラーが発生しました。</b></p> <p class="msg">!message!</p> <form> <input type="button" value="前画面に戻る" onclick="history.back()"> </form> </body> </html> tmpl/send.tmpl <!doctype html> <html> <head> <meta charset="utf-8"> <title>送信完了</title> </head> <body> <p>ありがとうございました。</p> <form> <input type="button" value="トップへ戻る" onclick="location.href='!top!';"> </form> </body> </html>
試したこと
初心者のため、何もできずにおります。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
再現方法を、丁寧に説明してくださいね、質問文中に。単にこのphpファイルをwebブラウザからアクセスしただけでしょうか?
ご連絡ありがとうございます。
はい。その通りです。htmlのフォームを作成し、PHP、tmplのconf,error,sendのファイルをそれぞれ作成しています。その上で、xamppのhtdocsにて、ファイルの確認を行いました。
回答につき、不備な点がありましたらご連絡お願いいたします。
よろしくお願いいたします。
「完成」というのでしたら詳細に仕様説明が必要に思います。
そうでないなら個別問題をタイトル、内容に記載されたほうが良いです
質問は編集できます、
ご連絡ありがとうございます。
質問を編集いたしました。ファイル構成及びすべてのファイルのプログラミングを記載しました。
不備な点がありましたら、ご教示いただければ幸いです。
よろしくお願いします。
いえあの、タイトル。これだと作業依頼みたいな感じになるので、
直面している問題にフォーカスあてた内容にしてください。
https://teratail.com/help/question-tips
ご指摘ありがとうございます。
変更いたしました。よろしくお願いします。
Undefined array key "mode" を再現できませんね。
再現手順の説明が足りません。
まず最初に開くのはどのファイルですか?
そして、どう入力して、どう進んだとき、どの時点で警告が出ますか?
あと、form.php がありませんので補充してください。
回答2件
あなたの回答
tips
プレビュー