• 締切済み

$error配列がUndefined indexに

簡単な入力フォームを初心者用の本に沿って作成しているのですが、 入力フォームのチェックで$error配列を使う部分で、 nameがblankかどうか確認する部分で、なぜかnameがNotice: Undefined indexとなってしまいます。 お詳しい方、下記のコードを見て何か原因をお分かりになりますでしょうか? <?php session_start(); if(!empty($_POST)){ if($_POST['name']==''){ $error['name']='blank'; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Upload</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <p>次のフォームに必要事項をご記入下さい。</p> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>" /> <?php if ($error['name'] == 'blank'): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> </dd> </dl> </form> </body> </html>

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>$errorを''にしてしまうと、POSTした内容が送信したときに消えてしまわないのでしょうか? 単に初期化しているだけなので大丈夫だと思います >if(!empty($_POST)){ >if($_POST['name']==''){ チェック要素としては上記は微妙 エンプティチェックをして文字列''と半端なチェック(=2つでチェック)しているので たとえば$_POST['name']が「0」でもヒットします。 ロジック的には$_POST['name']がセットされているかどうかだけチェックすれば よいはずなので、ご提示したソースとしました。 まぁほとんどの想定でかわらないと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>初心者用の本に沿って 初心者の方には若干わかりにくいかもしれませんが phpではいろんなエラーが裏で発生していて、それをレベルわけして 軽微なものはエラーを無視してすすんでいきます。 今回は$errorという変数に設定されていない添え字のnameを 参照したために表示されたエラーです。 対処方法は以下どちらか (1)想定されるものはすべて初期設定する <?PHP $error=Array(); $error['name']=''; if(isset($_POST['name'])){ $error['name']='blank'; } print_r($error); ?> のように$errorは配列であり、$error['name']の初期値は空であることを 宣言しておけばエラーは出ません。 (2)エラーレポートのレベルをさげる おそらくphpの設定が解説書のものと異なるのが今回の原因です。 E_NOTICEレベルのエラーは無視する設定にすればよいでしょう <?PHP error_reporting(E_ALL ^ E_NOTICE); if(isset($_POST['name'])){ $error['name']='blank'; } print_r($error); ?> php.iniで設定するなら error_reporting = E_ALL & ~E_NOTICE のような設定になるかと思います。

参考URL:
http://www.php.net/manual/ja/function.error-reporting.php
noname#189749
質問者

お礼

非常に分かり易いご説明ありがとうございます。 少し理解出来たような気がします。 もう少し突っ込んだ質問をさせて頂けるとありがたいのですが、 今回の場合だと、(1)でアドバイスいただいたように、 formで入力した内容をaction=''で同じファイルを読み込みに行くように設定していますので、その場合、$errorを''にしてしまうと、POSTした内容が送信したときに消えてしまわないのでしょうか? また、 if(!empty($_POST)){ if($_POST['name']==''){ $error['name']='blank'; } の代わりに if(isset($_POST['name'])){ $error['name']='blank'; とされているのにはやはり何か理由があるのでしょうか??

関連するQ&A

専門家に質問してみよう