2012-04-07 21 views
-1

未定義のインデックスで少し問題があります。 error_reporting(E_ALL);またはini_set('display_errors', '1');を使用してエラー報告を変更することで解決できることが分かっていますが、変更する必要はありません。ここにエラーをスローするコードブロックがあります。Notice:未定義インデックス:PHP

// print out errors 
       if (!empty($errors)){ 
       echo '<div class="form_errors">'; 
       foreach ($errors as $key => $value) { 
        var_dump($value); 
        if (isset($value) == null or empty($value)){ 
        $value = ' A blank value '; 
        } 
        echo '<p>Please check '. $key . ' for errors.' . $value . 'is not a valid entry.</p>'; 
       } 
       echo '</div>'; 
       } 

提出に私のフォームを処理する部分が

if(isset($_POST['Submit'])){ 
    //create the fields you would want required and what fields on form to check. 
    $fields = array(
     'required' => array(
      'name' => '^[a-zA-Z\`\-\s]{1,30}$', //only letters plus apostrophe and hyphens, and up to 30 characters 
      'Address1' => '^[a-zA-Z0-9\s\.]{1,50}$' // only letters plus numbers, spaces, periods, and up to 30 characters 
     ), 
     'fields' => array( 
      'name' => $_POST['name'], 
      'Address1' => $_POST['Address1'], 
      'Address2' => $_POST['address2'] 
     ), 
     'redirect' => 'thankyou.php' 
    ); 
    $errors = TForm::validate($fields); 
    // if no errors redirect 
    if (empty($errors)){ 
     TForm::redirect($fields); 
    } 
    } 

そして、私のTFormはクラスでは、この

class TForm { 
    //validation returns an error array when done. 
    public function validate($fields){ 
     $errors = array(); 
     foreach($fields['fields'] as $key=>$value) { 
      foreach ($fields['required'] as $req_key => $req_value) { 
       if ($key == $req_key){ 
        $req_key = '\''.$req_value.'\''; 
        if (preg_match($req_key , $value) == false) { 
         $errors[$key] = $value; 
        } 
       } 
      } 
     } 
     return $errors; 
    } 

    //redirect function 
    public function redirect($fields){ 
     header('Location: '. $fields['redirect']); 
    } 

} 

のように見えます。これはまた、誰場合は、私が今までにそう書いている最初のクラスです私がどこでより良い結果を出したり、標準を破ったかを指摘しています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~私はE_ALLのエラー報告について明確ではありませんでした申し訳ありません

@jordanは、私が現在だものですプロダクションマシンを使用して、0を使用しているため、このエラーは報告されません。私の解決策は、使用することでした!empty($_POST['Name']) ? $_POST['Name']:''私はそれが何かを使用している場合は、それが空でない場合は正しく考えている$_POST['Name']とそれが空の場合は''に値を設定します。

'fields' => array( 
      'Name' => !empty($_POST['Name']) ? $_POST['Name']:'', 
      'Address1' => !empty($_POST['Address1']) ? $_POST['Address1']:'', 
      'Address2' => !empty($_POST['Address2']) ? $_POST['Address2']:'' 
     ) 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~アップデート2〜 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~フィールドで使用してISSET結果@マイク

は常に失敗すなわち

このようフランクWiebengaとして名前が有効な変数に等しいときで
'fields' => array( 
      'Name' => !isset($_POST['Name']) ? $_POST['Name']:'', 
      'Address1' => !isset($_POST['Address1']) ? $_POST['Address1']:'', 
      'Address2' => !isset($_POST['Address2']) ? $_POST['Address2']:'' 
     ) 

結果、空のMETを使用して

Please check Name for errors. A blank value is not a valid entry. 
Please check Address1 for errors. A blank value is not a valid entry. 

名前は、あなたがより良いあなたを助けるが、あなたのスクリプトを形成するために、完全なエラーメッセージを追加する必要が正しく

Please check Address1 for errors. A blank value is not a valid entry. 
+2

インデックスが未定義完全なエラーメッセージは、何ですか? –

+0

error_reporting開発値: "E_ALL | E_STRICT"どの行にエラーがありますか? – ZiTAL

+0

また、エラーに関係なく、この行は意味をなさないことに注意してください: 'if(isset($ value)== nullまたはempty($ value))'。 'isset'はbooleanを返すので、文字通りnullにはなりませんが、== nullでチェックするとfalseと評価されますが、この全体の構造の代わりに' if(empty($ value)) ' – poncha

答えて

0

あなたの更新によると、あなたの代わりにemptyisset使用する必要がありますので、あなたは未定義のインデックスエラーを回避:isset

$name = (isset($_POST['Name'])) ? $_POST['Name'] : ''; 

詳細情報を。

- 更新 -

三割り当てを反転してみてください。

$name = (!isset($_POST['Name'])) ? '' : $_POST['Name']; 
+0

ありがとうございました。 – atrueresistance

1

を返すようにフランクWiebengaとして有効な変数を、等しいとき、私は唯一の外部変数が宣言されていないことに気づくHODは$_POST値であり、下記のコードを更新して、あなたがまだ持っている正確なエラーをお知らせください。

if(isset($_POST['Submit'])){ 
    //create the fields you would want required and what fields on form to check. 

    if(!isset($_POST['name']) || !isset($_POST['Address1']) || !isset($_POST['address2'])) 
    { 
     die("Empty POST NOt allowed "); 
    } 

おかげ

undefined index通知に
0

一般的な答え:myKey$myArray配列に存在しない場合

$myArray['myKey']は、未定義のインデックス通知を生成します。あなたはそれを使用する前に既存のものをチェックすることでこれを解決することができます。

if (array_key_exists($myArray, 'myKey')) { 
    echo $myArray['myKey']; 
} 
関連する問題