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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

2回答

1280閲覧

フォームのInput内にUnidentified indexのエラーが表示される。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2020/07/16 23:46

実現したい事

お問合せフォームで、各項目を入力して『内容確認』ボタンを押した際に入力ミスの項目があった場合に、他の項目で入力された値がそのまま保持されるようにしたいです。

たにぐち まことさんのYouTube動画(URL:https://youtu.be/tHLnMiRXzNw)を見ながら作成しましたが、なぜか以下のようなエラーが表示されてしまいます。

この原因は何なのでしょうか?

ちなみに、項目に入力した後には、入力された値が保持されるようにはなっています。
なので、実装したい機能は実現できているのですが、画面にアクセス時にエラーが表示されているのを解消したいです。

表示されるエラー

以下の内容が、フォーム入力画面にアクセス時に、Inputの中にすでに入力されている状態になってしまっています。

<br /><b>Notice</b>: Undefined index: email in <b>C:\xampp\htdocs\contactform2\index.php</b> on line <b>51</b><br />

コード

PHP

1<?php 2$error = ['name'=> '', 'email'=> '', 'comments'=> '']; 3 4if ($_SERVER['REQUEST_METHOD'] === 'POST') { 5 $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 6 7 // フォームの送信時にエラーをチェックする 8 if ($post['name'] === '') { 9 $error['name'] = 'blank'; 10 } 11 if ($post['email'] === '') { 12 $error['email'] = 'blank'; 13 } 14 if ($post['comments'] === '') { 15 $error['comments'] = 'blank'; 16 } 17} 18?> 19 20<!doctype html> 21<html lang="ja"> 22 <head> 23 <!-- Required meta tags --> 24 <meta charset="utf-8"> 25 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 26 27 <!-- Bootstrap CSS --> 28 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> 29 30 <link rel="stylesheet" href="style.css"> 31 32 <title>お問合せフォーム</title> 33 </head> 34 <body class="bg-light"> 35 <div class="container"> 36 <div class="row"> 37 <div class="card my-5 col-md-6 offset-3"> 38 <h2 class="mx-auto mt-3">お問合せフォーム</h2> 39 <form action="" method="POST" novalidate> 40 <div class="formfroup mt-3"> 41 <label for="name"><span class="hissu">必須</span>名前</label> 42 <input type="text" name="name" class="form-control" required autofocus> 43 <?php if (isset($_POST['name'])) { 44 if ($error['name'] === 'blank'){ 45 echo "<p class='error-msg'>※お名前をご記入ください。</p>"; 46 }; } 47 ?> 48 </div> 49 <div class="formfroup mt-3"> 50 <label for="email"><span class="hissu">必須</span>メールアドレス</label> 51 <input name="email" type="text" class="email form-control" id="email" value="<?php echo htmlspecialchars($_POST['email']); ?>" required> 52 <?php if (isset($_POST['email'])) { 53 if ($error['email'] === 'blank'){ 54 echo "<p class='error-msg'>※メールアドレスをご記入ください。</p>"; 55 }; } ?> 56 </div> 57 <div class="formfroup mt-3"> 58 <label for="age"><span class="hissu">必須</span>年齢</label> 59 <select name="age" name="age" class="form-control" id="age" value="<?php echo htmlspecialchars($post['age']); ?>" required> 60 <option>年齢を選んでください</option> 61 <?php 62 for ($i = 18; $i <=60; $i++){ 63 echo "<option value=".$i.">".$i."</option>"; 64 } 65 ?> 66 </select> 67 </div> 68 <div class="formfroup mt-3"> 69 <label for="comments"><span class="hissu">必須</span>コメント</label> 70 <textarea name="comments" class="form-control" name="comments" id="comments" cols="40" rows="7" value="<?php echo htmlspecialchars($post['comments']); ?>" required></textarea> 71 <?php if (isset($_POST['comments'])) { 72 if ($error['comments'] === 'blank'){ 73 echo "<p class='error-msg'>※コメントをご記入ください。</p>"; 74 }; } ?> 75 </div> 76 <div class="formfroup mt-3"> 77 <input type="submit" class="submit_button my-3" value="内容確認へ"> 78 </div> 79 </form> 80 </div> 81 </div> 82 </div> 83 84 85 86 <!-- Optional JavaScript --> 87 <!-- jQuery first, then Popper.js, then Bootstrap JS --> 88 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> 89 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> 90 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> 91 </body> 92</html>

###エラーの対象コード

Line51は以下のコードです。

value="<?php echo htmlspecialchars($_POST['email']); ?>"

試したこと

現在、$_POSTとなっている箇所はもともと$postとしていてエラーに「Unidentified index: post」となっていたので$_POSTに変更しましたが、上記のエラーが表示されるようになりました。

利用環境

XAMPPのMySQLを利用しています。

まだPHPの勉強を始めて数日でわからないことが多いですが、このエラーを解消するための方法をご教授いただけると幸いです。

よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

POST送信されてなければ$_POSTは空です。
なので、当然、配列も参照できません。
初期値を設定するか$_POST内容により分岐させるかいずれかですが、
そもそもfilter_input_array()をなんのために使うのか?というところは考えた方が良いかと思います。

$errorという配列もエラーのためだけに使うのは勿体ないかなと思います。
キーだけを定義した変数をもっておき、filter_input(arrayではない)と組み合わせて
うまく使えばエラーもinputの初期値も同時に制御可能になると思います。

投稿2020/07/17 00:11

編集2020/07/17 00:13
m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2020/07/17 01:06

ご回答いただきありがとうございます! 初期値の設定は「$_POST['email']=null;」で良いのでしょうか? このコードを頭のPHPに入れると、エラー表示が消えましたが、値を入力して送信ボタンを押すと値が残らなかったり、空で送信ボタンを押してもエラーメッセージが出てこなくなってしまいました。 他に教えていただいた方法も試してみます。ありがとうございました!
m.ts10806

2020/07/17 01:08

$_POSTなどグローバル変数の値を上書きしてはいけません。 そもそも、filter_inputの機能を使うのであれば$_POSTは使いません。実装にブレが出ます。
退会済みユーザー

退会済みユーザー

2020/07/17 01:13

そうだったのですね。ありがとうございます! filter_inputの機能を調べて試してみます。 ありがとうございました!
guest

0

$_POSTが空だからではないでしょうか

<?php echo htmlspecialchars($_POST['email']); ?

この処理だとアクセスしたとき必ず$_POST['email']が入ってきます。
$_POST['email']に値が入るときは、確認ボタンを押下したときにミスがあって同じ画面に戻したときですよね。

なので最初のアクセス時は$_POSTが入っていないです。

PHP側でvar_dumpしてみましょう

var_dump($_POST);exit; // $_POSTの中身だけ出力されます。

投稿2020/07/17 01:00

maxmm

総合スコア54

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

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

退会済みユーザー

退会済みユーザー

2020/07/17 01:12

maxmmさん、ご回答いただきありがとうございます! var_dumpのコードはどこに挿入すれば良いのでしょうか? 頭のPHPもしくは、該当している箇所のPHP(emailの箇所)でしょうか? よろしくお願い致します。
maxmm

2020/07/17 01:18

エラーが発生する前であればどこでもいいです! 今回は<?phpのすぐ下で書いてみましょう。
退会済みユーザー

退会済みユーザー

2020/07/18 00:05

ありがとうございます。 試してみましたが、表示がすべて消えてしまい、うまくいきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問