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

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

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

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

Q&A

解決済

2回答

1868閲覧

PHP ウォーニング(警告)を解消したい

takasports

総合スコア5

PHP

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

0グッド

0クリップ

投稿2021/05/31 09:00

編集2021/05/31 11:26

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/31 09:35

再現方法を、丁寧に説明してくださいね、質問文中に。単にこのphpファイルをwebブラウザからアクセスしただけでしょうか?
takasports

2021/05/31 09:57

ご連絡ありがとうございます。 はい。その通りです。htmlのフォームを作成し、PHP、tmplのconf,error,sendのファイルをそれぞれ作成しています。その上で、xamppのhtdocsにて、ファイルの確認を行いました。 回答につき、不備な点がありましたらご連絡お願いいたします。 よろしくお願いいたします。
m.ts10806

2021/05/31 10:07

「完成」というのでしたら詳細に仕様説明が必要に思います。 そうでないなら個別問題をタイトル、内容に記載されたほうが良いです
m.ts10806

2021/05/31 10:08

質問は編集できます、
takasports

2021/05/31 11:15

ご連絡ありがとうございます。 質問を編集いたしました。ファイル構成及びすべてのファイルのプログラミングを記載しました。 不備な点がありましたら、ご教示いただければ幸いです。 よろしくお願いします。
m.ts10806

2021/05/31 11:17 編集

いえあの、タイトル。これだと作業依頼みたいな感じになるので、 直面している問題にフォーカスあてた内容にしてください。 https://teratail.com/help/question-tips
takasports

2021/05/31 11:26

ご指摘ありがとうございます。 変更いたしました。よろしくお願いします。
itagagaki

2021/05/31 16:20

Undefined array key "mode" を再現できませんね。 再現手順の説明が足りません。 まず最初に開くのはどのファイルですか? そして、どう入力して、どう進んだとき、どの時点で警告が出ますか? あと、form.php がありませんので補充してください。
guest

回答2

0

ベストアンサー

htmlのフォームから確認画面に行って、
確認画面で再度フォーム送信する時、
<input type="hidden" name="mode" value="なんとかかんとか">に相当するものが含まれていないんじゃないかと。
図で示すと、こういうところ。
イメージ説明

htmlソース上は
<input type="hidden" name="mode" value="なんとかかんとか">
は含まれているので、
確認画面から先の処理で、modeを詰めるのを忘れている可能性を指摘しています。

掲載されているphpファイル内にはそれらしい記述がないので、
なにかテンプレートファイル上で詰め忘れているような気がします。
明らかにされていない情報はこちらでも感知できませんので、
質問者さんが情報を開示するか、自身でしっかりデバッグするかしかやりようがないかと。

投稿2021/05/31 09:41

編集2021/06/01 01:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

itagagaki

2021/05/31 09:56

あ、それですね、きっと
takasports

2021/05/31 10:10

ご回答ありがとうございます。 すみません。初心者のため、ご指摘が理解できません。すみません。 確認画面まで行かずに、フォームにそれぞれ入力して送信ボタンを押した後、警告の画面がでます。 回答になっているか、不安ですがよろしくお願いします。
takasports

2021/06/01 04:00

ご回答ありがとうございます。 ご指摘の通りtmpl/conf.tmplにmodeを記載しましたら確認画面までは行けました。ありがとうございます。 また、新たな問題点が出ましたが、自身で再考したいと思います。 ありがとうございました。
guest

0

エラーメッセージは、$_POST["mode"]の参照に関して、$_POST[]という配列にmodeというキーが存在していないことを示しています。
正確にはこれはエラーではなくWarning ウォーニング(警告)です。
しかし、フォームを送信するHTMLには<input type="hidden" name="mode" value="post">という要素があるので、このHTMLから送信されたのなら$_POST["mode"]はあるはずです。
もしかして、HTMLからフォームを送信した結果なのではなくて、そのPHPコードを単体で実行した結果なのではないですか?

投稿2021/05/31 09:54

itagagaki

総合スコア8402

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

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

takasports

2021/05/31 10:05

ご回答ありがとうございます。 PHP単体でなく、htmlのフォームを作成し、PHP、tmplのconf,error,sendのファイルをそれぞれ作成しています。その上で、xamppのhtdocsにて、ファイルの確認を行いました。 回答につき、不備な点がありましたらご連絡お願いいたします。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問