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

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

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

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

Q&A

解決済

3回答

5171閲覧

php で入力画面で生年月日を取得→確認画面での Undefined index エラーの対処方法

singlestroke

総合スコア68

PHP

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

0グッド

0クリップ

投稿2016/03/30 06:37

編集2016/03/30 07:21

php にて申込みフォームを作っています。

■入力画面のコード(一部)
プルダウン形式で生年月日を選択させます

HTML

1<div class="form-inline form-group"> 2 <label for="birthyear" class="col-sm-2 control-label">生年月日</label> 3 <div class="col-sm-2"> 4 <select class="form-control" name="birthyear"> 5 <option value="1980">1980</option> 6 <option value="1981">1981</option> 7 <option value="1982">1982</option> 8 <option value="1983">1983</option> 9 <option value="1984">1984</option> 10 <option value="1985">1985</option> 11 </select> 年 12 </div> 13 <div class="col-sm-2"> 14 <select class="form-control" name="birthmonth"> 15 <option value="">▼選択</option> 16 <option value="1">1</option> 17 <option value="2">2</option> 18 <option value="3">3</option> 19 <option value="4">4</option> 20 <option value="5">5</option> 21 <option value="6">6</option> 22 <option value="7">7</option> 23 <option value="8">8</option> 24 <option value="9">9</option> 25 <option value="10">10</option> 26 <option value="11">11</option> 27 <option value="12">12</option> 28 </select> 月 29 </div> 30 <div class="col-sm-2"> 31 <select class="form-control" name="birthday"> 32 <option value="">▼選択</option> 33 <option value="1">1</option> 34 <option value="2">2</option> 35 <option value="3">3</option> 36 <option value="4">4</option> 37 <option value="5">5</option> 38 <option value="6">6</option> 39 <option value="7">7</option> 40 <option value="8">8</option> 41 <option value="9">9</option> 42 <option value="10">10</option> 43 <option value="11">11</option> 44 <option value="12">12</option> 45 <option value="13">13</option> 46 <option value="14">14</option> 47 <option value="15">15</option> 48 <option value="16">16</option> 49 <option value="17">17</option> 50 <option value="18">18</option> 51 <option value="19">19</option> 52 <option value="20">20</option> 53 <option value="21">21</option> 54 <option value="22">22</option> 55 <option value="23">23</option> 56 <option value="24">24</option> 57 <option value="25">25</option> 58 <option value="26">26</option> 59 <option value="27">27</option> 60 <option value="28">28</option> 61 <option value="29">29</option> 62 <option value="30">30</option> 63 <option value="31">31</option> 64 </select> 日 65 </div> 66</div>

■確認画面

php

1$birthyear = (isset($_POST["birthyear"])) ? $_POST["birthyear"] : null; 2$birthmonth = (isset($_POST["birthmonth"])) ? $_POST["birthmonth"] : null; 3$birthday = (isset($_POST["birthday"])) ? $_POST["birthday"] : null; 4 5// 以下で入力チェック及び日付の存在をチェック 6if ( empty($birthyear) || empty($birthmonth) || empty($birthday) ) { 7 $error["birth"] = "生年月日を選択してください。"; 8} else if ( !checkdate( $birthmonth, $birthday, $birthyear ) ) { 9 $error["birth"] = "生年月日の日付が存在しません。"; 10}

上記エラー内容をHTMLに表示させるため下記を記述すると

php

1 <div class="form-inline form-group"> 2 <label for="birthyear" class="col-sm-2 control-label">生年月日</label> 3 <div class="col-sm-6"> 4 <?php print "<p class=\"text-danger\">".$error["birth"]."</p>"; ?> 5 <?php print $birth; ?> 6 </div> 7 </div>

下記のエラーが出ます。

txt

1Notice: Undefined index: birth in ... on line 90

入力項目は他にもあり、エラーは$errorに連想配列で格納しています。このエラーの対処方法を教えていただけますでしょうか。

このところUndefined indexのエラー対処にばかり時間がかかってしまいます。毎度何かの拍子でエラーは出なくなるのですが、何か根本的に解決できる、解決する方法が理解できるサイトなど教えていただけましたら幸いです。

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

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

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

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

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

ao_love

2016/03/30 06:41

エラーの該当行にはどういった処理がありますか?
ao_love

2016/03/30 06:45 編集

あと、今気付いたのですがPOSTの値を変数に格納しているのにempty($_POST["birthyear"])してしまっては意味がないのでは…?
singlestroke

2016/03/30 07:23

そうですね。失礼しました。修正してみました。
guest

回答3

0

Notice: Undefined index: birth in ..

と出てるので、配列(ここでは「$error」)のキーに「birth」が登録されてないのでは?

php

1 <?php print "<p class=\"text-danger\">".$error["birth"]."</p>"; ?> 2

↑これをやる前に、array_key_existsでキー「birth」が存在してるか確認してからprintすればいいんじゃ?

投稿2016/03/30 06:48

編集2016/03/30 07:56
tkturbo

総合スコア5572

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

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

0

ベストアンサー

↓この部分でどちらもエラーにならなければ$error["birth"]へ値が設定されていません。

php

1// 以下で入力チェック及び日付の存在をチェック 2if ( empty($birthyear) || empty($birthmonth) || empty($birthday) ) { 3 $error["birth"] = "生年月日を選択してください。"; 4} else if ( !checkdate( $birthmonth, $birthday, $birthyear ) ) { 5 $error["birth"] = "生年月日の日付が存在しません。"; 6}

処理の一番最初に $error["birth"] = "";と空文字で初期化しておくか、
tkturboさんのおっしゃられているように、isset,empty,array_key_existsのいずれかでチェックしてから出力しましょう。

php

1//<?php print "<p class=\"text-danger\">".$error["birth"]."</p>"; ?> 2 3<p class="text-danger"><?php if (isset($error["birth"])){ print $error["birth"]; } ?></p>

投稿2016/03/30 23:47

rkojima

総合スコア421

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

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

singlestroke

2016/03/31 09:03

ありがとうございました。空文字で初期化でやってみます。 array_key_exists はまだ慣れていませんががんばってみます。
guest

0

毎度何かの拍子でエラーは出なくなるのですが

これから察するに、POSTデータがないときにそのエラーが出ているのだと思います。
何かを選択した場合にはPOSTデータがあるのでそのエラーがでないのでは。

「Notice: Undefined index」と表示されるとき
PHPで$_GETや$_POSTを取得した時にUndefined indexが出る時の対処法

このあたりを参考に、初回アクセス(つまりPOSTデータが存在しないとき)と処理を切り分けてみてください。

投稿2016/03/30 10:34

ao_love

総合スコア441

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問