phpの定義していない変数について

このQ&Aのポイント
  • phpを使用してwebページ作成を勉強中。
  • モードによってphpの内容を変えるページを作成。
  • 空のデータ受け取り時にNotice:Undefined indexエラーが表示される問題に悩んでいる。
回答を見る
  • ベストアンサー

phpの定義していない変数について

phpを使用してwebページの作成を勉強しています。 モードによってphpの内容を変えるページを作成したのですが、 ページを開いた際、モードの変数が入力されていなかったり(最初に開いたとき等)、 前のページのフォーム画面で、 セレクトボックスを何も選択せず送信した空のデータを受け取ると、 Notice:Undefined indexエラーが表示されます。 Noticeエラーを非表示にすれば表示はされなくなるとは思いますが、 根本の解決にはなっていないので後々問題にならないか心配です。 どうしたら空のデータ受け取り時に Notice:Undefined indexエラーが表示されなくなるでしょうか? ご回答、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

以下で詳しく説明しています。issetを使って解決する人が多いのですが、記述が冗長になりやすいため、個人的にはfilter_input関数を使う方が短く、且つ美しくまとまってお勧めです。 http://qiita.com/mpyw/items/2f9955db1c02eeef43ea

mmm5orz
質問者

お礼

ご回答ありがとうございます! filter_input関数というのがあるのは知りませんでした。 検索して出てきたページがissetでの解決法ばかりで、私のような初心者が説明を見ても少しややこしく感じてしまい、いまいち理解ができなかったのですが、filter_input関数は初心者にもわかりやすい関数な気がします! 記述も簡単なのでこちらを使いうことにしました! とはいえissetを使って解決する人も多いと仰っていただいていますので、issetについてもちゃんと理解ができるようにし、issetとfilter_input関数、どちらを使うのが自分として使いやすいのか改めて判断して選択したいと思います。 個人的にfilter_input関数の方が理解しやすかったのでベストアンサーにさせて頂きました。

その他の回答 (1)

回答No.1

https://www.google.co.jp/search?q=Notice%3AUndefined+index エラーメッセージでググるといくらでも解決方法が示されています。 配列の添字が未定義のときに発生するエラーですね。 エラーが出る例 $mode  = $arr['mode']; if (1 === $mode) { } else { } エラーが出ない例 $mode  = (isset($arr['mode'])) ? $arr['mode']: null; if (1 === $mode) { } else { } 蛇足ですが、 Notice:Undefined index -> 「未定義の添字」 Notice: Undefined variable -> 「未定義の変数」

mmm5orz
質問者

お礼

ご回答ありがとうございます! なるほど、issetですか、 http://php.net/manual/ja/function.isset.php を閲覧しましたが、私のような初心者には少し理解がしづらいですね・・・ しかし、検索するとissetでの解決法が沢山でてますのできちんと理解して使えるようになれるよう頑張ります! また、添字を変数と記述していた旨、ご訂正頂き、ありがとうございます!

関連するQ&A

  • PHPでエラーが出る

    PHPでNotice: Undefined indexとエラーが出ます。 <?php $data1=$_POST["data1"]; echo $data1; ?> でエラーが出ます。  @$_POSTでやるとエラーは消えるのですが、これでは解決してないので他のやりかたを教えてください。

    • ベストアンサー
    • PHP
  • phpのクラスにて別ファイルの変数について

    PHPのクラス内で別ファイルで定義した変数を呼び出したく "require_once"でそのファイルを読みこみその変数を呼び出したのですが 「Notice: Undefined variable:」のエラーが表示されました。 他のクラスではないphpプログラムでは正常に表示されましたが クラスでは別の方法で表示する必要があるのでしょうか。 可能であればその手段もご提示頂ければ幸いです。 どなたかご教示頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの変数未定義エラー

    <p>PHPのテストです。</p> <p> <?php print $name.'さん<br />'; ?> </p> と入れてみましたが僕の場合は ------------------------------------------------------------------------ PHPのテストです。 Notice: Undefined variable: name in C:\Program Files\Apache\Apache24\htdocs\sample3-1.php on line 17 さん ------------------------------------------------------------------------- となってしまいました。$name = NULL;をあらかじめ入れておけばこのページのように ------------------------------------------------------------------------- PHPのテストです。 さん ------------------------------------------------------------------------ となってくれます。この違いはバージョンなどの違いでしょうか?

    • ベストアンサー
    • PHP
  • Smartyのテンプレートで未定義の変数がエラーになってしまいます。

    Smartyでテンプレートで、存在しない変数が書かれていてもUndefined indexのエラーを表示しないように したいのですが、Smartyの設定で可能でしょうか?

    • 締切済み
    • PHP
  • 「未定義の変数」の定義について(PHP)

    ●質問の主旨 添付画像の左端に Notice: Undefined index: page in C:\xampp\htdocs\shop\index.php on line 3 ということで、未定義の変数ということでおしらせが出ています。 この表示を消すためにはどうすれば良いでしょうか? ご存知のかた、ご教示願います。 ●質問の補足 下記のコードで言えば、 $page =$_REQUEST['page']; のうち、pageが定義されていないことが、表示の原因である気がします。 しかし、どこをどう書き換えれば、表示が消えるのかが分かりません。 ●参考文献 たにぐちまこと「よくわかるPHPの教科書」(P210)の index.phpファイル ●開発環境 windows8 xammp1.8.1 ●コード <?php require('dbconnect.php'); $page =$_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); //最終ページを取得する $sql = 'SELECT COUNT(*) AS cnt FROM my_items'; $recordSet = mysql_query($sql); $table = mysql_fetch_assoc($recordSet); $maxPage = ceil($table['cnt'] / 5); $page = min($page, $maxPage); $start = ($page - 1) * 5; $recordSet = mysql_query('SELECT m.name, i. * FROM makers m, my_items i WHERE m.id=i.maker_id ORDER BY id DESC LIMIT ' . $start .',5'); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="style.css" /> <title>Webシステムをつくる</title> </head> <body> <div id="wrap"> <div id="head"> <h1>トップページ</h1> </div> <div id="content"> <p style="margin-top: 20px"> <table width="100%"> <tr> <th scope="col">ID</th> <th scope="col">メーカー</th> <th scope="col">商品名</th> <th scope="col">価格</th> </tr> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></td> <td><?php print(htmlspecialchars($table['name'])); ?></td> <td><?php print(htmlspecialchars($table['item_name'])); ?></td> <td><?php print(htmlspecialchars($table['price'])); ?></td> </tr> <?php } ?> </table> <ul class="paging"> <?php if ($page > 1) { ?> <li><a href="index.php?page=<?php print($page - 1); ?>">前のページへ</a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if ($page < $maxPage) { ?> <li><a href="index.php?page=<?php print($page + 1); ?>">次のページへ</a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> </ul> </p> </div> <div id="foot"> <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O Space. MYCOM" /></p> </div> </div> </body> </html>

    • ベストアンサー
    • PHP
  • 【PHP】Googleアドセンスが出力されない! $_SERVERのせい?

    こんにちわ。PHP でエラーが出てしまって困っています。質問させてください。 サイトに、Googleアドセンスを使ったテキスト広告が出力されません。 もしかすると、$_SERVERで、データを取得できてないからかな? エラーレポートは、こうです。 Notice: Undefined index: HTTPS in (サイトのルートディレクトリ)g_adsense.php on line 7 Notice: Undefined index: HTTP_REFERER in (サイトのルートディレクトリ)m/g_adsense.php on line 13 Notice: Undefined index: HTTP_UA_PIXELS in (サイトのルートディレクトリ)m/g_adsense.php on line 35 Notice: Undefined index: HTTP_X_UP_DEVCAP_SCREENPIXELS in (サイトのルートディレクトリ)m/g_adsense.php on line 38 エラーは全て、$_SERVER['HTTPS'] とか $_SERVER['HTTP_REFERER'] とか、サーバー環境変数の行です。 もしかして、どこかで設定されててだめなのかな?PHPコードについて、サーバー内でどんな設定がされているのかわかっていません。 設定を初期化する方法あったら教えてください。 ・Movable Type4.01で吐き出してます。 ・ケータイキットというプラグインを使ってます。 ・携帯向けのサイト ・PHP Version 4.4.7 ・サーバー=アパッチ。なにか良い方法ありますか?

    • ベストアンサー
    • PHP
  • PHP5.2.2について

    はじめまして、こんばんは。 PHPを触り始めて間もない者ですが、困り果てて投函させて頂くことにいたしました。 先日、OS(WinXPsp2)を再インストールした際、PHP(5.2.2)、Apache(2.0.59)、MySQL(4.1.22)を以前利用していたものより新しいバージョンをインストールしたのですが、以前作成したスクリプトを表示させたところ、これまで何ら問題ないところでエラーが出てきて、その対処が分からずご指導いただければ・・と思っております。 index.php <?php session_start(); require_once("./auth.php");  ・  ・ auth.php <?php session_start();//Notice: A session had already been started - ignoring session_start() $mail = $_POST['mail'];//Notice: Undefined index: mail $passwd = $_POST['passwd'];//★ if($mail != "" || $passwd != ""){  ・  ・ 上記、コメントの箇所にエラーが出てしまうのですが、これまでは同じソースでも問題がなかったための質問です。説明不足名ところがあるかとは思いますが、上記エラーはインストール時の設定が間違っているのか?それともバージョンによるものなのか?(その場合は対処法など・・)を知りたく投函させていただきました。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP 未定義の変数について

    以前にも質問しましたが、新たに壁にぶつかってしまったので再度投稿させていただきます。 ToDoリストを作っており、予定を入力フォームからデータベースへ登録、表示することまではできました。 現在は、表示されている全ての予定レコードの右端に"更新"と"削除"のボタンを設置し、それぞれの動作を行いたいと考えております。 それぞれのボタンに<input type=hidden name=No value='.$row[No].'>と記述し、更新箇所を入力するフォームを別ファイルで用意してあります。 しかし"更新"ボタンを押しても、 Notice: Undefined variable: No in C:\××××××××××\input_update.php on line 17 データは削除済か、もしくは存在しません。 というエラーメッセージが出てしまいます。(※"データは削除済みか~"は自分で記述したメッセージです。)実際にデータはあるので、変数の受け渡しがうまくいってないと思うのですが・・・ 調べると、「未定義の変数があるよ」という事なのでしょうが、未定義の変数というものが分かりません。 all_todo.php <?php $conn = mysql_connect("localhost","root","×××"); if($conn == false) {die("MySQL 接続エラー");} mysql_set_charset("sjis"); mysql_select_db("todo"); $sql="SELECT * FROM `todo`"; $todo_list=mysql_query($sql); while($row=mysql_fetch_array($todo_list)) { echo("<tr id='honbun'>"); echo("<td>"."<input id='c_change' type='checkbox' name='check' value='check'>".$row["済"]."</td>"); echo("<td id='No'>".$row["No"]."</td>"); echo("<td id='title'>".$row["タイトル"]."</td>"); echo("<td id='todo'>".$row["内容"]."</td>"); echo("<td id='limit'>".$row["期限"]."</td>"); echo("<td id='priority'>".$row["優先度"]."</td>"); echo("<form action=input_update.php method=post>"); echo("<input type=hidden name=No value='.$row[No].'>"); echo("<td><input type=submit value=更新></td>"); echo("</form>"); echo("<form action=input_update.php method=post>"); echo("<input type=hidden name=No value='.$row[No].'>"); echo("<td><input type=submit value=削除></td>"); echo("</form>"); echo("</tr>\n"); } mysql_free_result($todo_list); mysql_close(); ?> input_update.php <?php $conn = mysql_connect("localhost","root","×××"); if($conn == false) {die("MySQL 接続エラー");} mysql_set_charset("sjis"); mysql_select_db("todo"); $sql="SELECT `No`,`タイトル`,`内容`,`期限`,`優先度` FROM `todo` WHERE `No`='$No'"; $todo_list=mysql_query($sql); if(!$row=mysql_fetch_array($todo_list)) {die("データは削除済か、もしくは存在しません。");} echo "<form action=update.php method=post>"; echo "タイトル<input type=text name=タイトル value=\"" . $row["title"] . "\"> "; echo "内容<input type=text name=内容 value=\"" . $row["todo"] . "\"> "; echo "期限<input type=text name=期限 value=\"" . $row["limit"] . "\"> "; echo "優先度<input type=text name=優先度 value=" . $row["priority"] . "> "; echo "<input type=hidden name=id value=" . $id . ">"; echo "<input type=submit value=更新>"; echo "</form>"; mysql_free_result($todo_list); mysql_close(); ?> というコードです。 私の推測では、 >{die("データは削除済か、もしくは存在しません。");} というメッセージが表示されていることから、フォームからデータの受け渡しは出来ているのだと思います。ただ、意図した変数が渡されていないと思うのですが、フォームのvalue='.$row[No].'という記述に問題があるのか、はたまたname=Noの部分か、SELECT文の記述が悪いのかまったく分かりません。 どなたか知恵をお貸しください。 お願いいたします。

    • ベストアンサー
    • PHP
  • エラーログの意味と対処方法を教えてください

    http://www.mt312.com/のフリースクリプトの携帯対応掲示板 REP-BBSでエラーログが大量に放出されました。 その一部を書きます。 PHP Notice: Undefined index: HEAD in xxx/model.php on line 158 PHP Notice: Undefined index: page in xxx/model.php on line 793 PHP Notice: Undefined variable: nStart in xxx/model.php on line 1088 PHP Notice: Undefined index: mode in xxx/model.php on line 547 PHP Notice: Undefined index: mode in xxx/index.php on line 15 PHP Notice: Undefined index: page in xxx/model.php on line 480 まだまだあります。 サーバーから数十ギガバイトのエラーログがあると指摘されました。 どれかひとつでもいいです。対処方法教えてください。

    • 締切済み
    • PHP
  • 変数の返し方

    index.phpのデータをPOSTで送ってkakunin.phpでチェックして変数$aに入れてindex.phpに戻すにはどうしたらいいですか?

    • ベストアンサー
    • PHP