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

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

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

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

Q&A

解決済

4回答

809閲覧

値の入力後にUnidentified indexのエラーが表示される

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/07/16 08:11

編集2020/07/16 08:16

前提・実現したいこと

Unidentified indexのエラーが出てきます。
たにぐち まことさんのYouTube動画を見ながらお問合せフォームを作成している最中にエラーが表示されました。
動画URL(https://www.youtube.com/watch?v=tHLnMiRXzNw&t=81s)

入力項目が空欄の際にエラーメッセージを出力する機能を実装しているのですが、値が入力された際に「Unidentified index」のエラーが出てしまいます。

もともと、このファイルにアクセスした際に同じ「Unidintified index」のエラーが表示されていたので、現在のコードのように「isset」を付けました。するとそのエラー表示が消えたので一安心していましたが、値を入力してEnterを押すと、このエラーが出るようになってしまいました。

動画内では、issetすら使っておらず、それでもエラー表示はされていません。

動画内のコードもGitHubに掲載されているので、それと比べてみましたが、異なるところはありません(最後まで完成していないので、その部分は異なっています。)

何が原因なのでしょうか?

発生している問題・エラーメッセージ

Notice: Undefined index: name in C:\xampp\htdocs\contactform2\index.php on line 44 Notice: Undefined index: email in C:\xampp\htdocs\contactform2\index.php on line 53

該当のソースコード

PHP

1<?php 2$error = []; 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" 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>

試したこと

Unidentified indexのエラー表示はissetやemptyで解消することが多いようですが、値の入力時に出てしまうのはナゾです。

ちなみに、Line44は「if ($error['name'] === 'blank'){」の部分で、53は「if ($error['email'] === 'blank'){」の部分です。

補足情報(FW/ツールのバージョンなど)

プログラミング学習を初めて1か月ほどなので、いろいろと基本的なところが抜けているかもしれませんが、そういった点もご指摘いただけると幸いです。

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

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

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

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

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

guest

回答4

0

$error['name']と$error['email']が未定義で判定に使用されているからですね。
$error変数を使用せずに例えば

<?php if (isset($_POST['name']) && $_POST['name']=='') { echo "<p class='error-msg'>※お名前をご記入ください。</p>"; } ?>

にするとか。

投稿2020/07/16 09:11

tokio-sawada

総合スコア12

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

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

0

ベストアンサー

最初の$errorの宣言を

PHP

1$error = ['name'=>'','email'=>'','comments'=>''];

にするとか。

投稿2020/07/16 08:31

yambejp

総合スコア114572

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

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

yambejp

2020/07/16 08:32

ifの中で$error[・・・]を設定しているので、ifに合致しない indexが設定されませんね
退会済みユーザー

退会済みユーザー

2020/07/16 09:15

ご回答いただき有難うございます。 こちらの方法で解決することができました!! 解消はしましたが、このコードの意味が何なのかが分かっていないので、自分で調べて、ちゃんと理解します。 ありがとうございました!
guest

0

Unidentified indexのエラー表示はissetやemptyで解消することが多いようですが

エラー箇所は**if ($error['name'] === 'blank')**なのでissetやemptyは関係ないですね。。。

$errorをdumpしてみてください。おそらく**$error['name']$error['email']**がnullなのではないでしょうか。

投稿2020/07/16 08:31

maxmm

総合スコア54

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

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

退会済みユーザー

退会済みユーザー

2020/07/16 09:08

ご回答いただきありがとうございます。 dumpするとは、var_dump(変数)のことですよね? どこに入れれば良いのでしょうか? お手数をおかけ致しますが、ご教授いただけると幸いです。
maxmm

2020/07/16 09:19 編集

その通りです! <?php if (isset($_POST['name'])) { var_dump($error); 例えばこれで実行して['name']がなかったら下のif文はエラーとなります。
退会済みユーザー

退会済みユーザー

2020/07/17 01:08

ありがとうございます! 試してみます!!
guest

0

値を入力してEnterを押すと

Enterキー押下でsubmitされているものと思われます。
つまり「入力」だけしてると思っていたら「送信」もしてしまっているわけですね。

ひとまず、ボタンのタイプをbuttonにして、JavaScriptでsubmitするようにしては如何でしょうか。

あとは「Enterキー submit 無効」などキーワードで調べていろいろ試してみてください。

投稿2020/07/16 08:30

m.ts10806

総合スコア80765

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

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

退会済みユーザー

退会済みユーザー

2020/07/16 09:05

ご回答いただきありがとうございます。 すみません、私の書き方が悪かったです。 Enterを押して送信をするのは意図的にやっています。 ただ、空白の項目があると次に行かず、入力した項目はそのままになる(そのプログラムは書いていません)はずなのに、Unidentified indexが表示されるのです。 なので、値が入力された場合にそういったエラーが表示されるのはなぜなのかなと悩んでいます。
m.ts10806

2020/07/16 09:15

なるほど。前提や背景は記載するようにお願いします。 全ての人が同じ動画で同じ操作を学ぶわけではないですしね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問