-1

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

// 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']);
    }

}

これは私が今までに書いた最初のクラスでもあるので、誰かが私がより良いパフォーマンスを発揮したり、標準を破ったりすることができた場所を指摘してくれると感じたら. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~更新~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~

@jordan申し訳ありませんが、エラー報告E_ALLが現在使用しているものであり、実稼働マシンでは使用しているため、このエラーは報告されません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']:''
        )

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~update2~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~

@mike isset を使用すると、フィールドは常に失敗します。

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

name が Frank Wiebenga などの有効な変数と等しい場合の結果

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.
4

3 に答える 3

1

あなたはあなたをより良くするために完全なエラーメッセージを追加する必要がありますが、スクリプトを形成します私は宣言されていない唯一の外部変数が$_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 ");
    }

ありがとう

于 2012-04-07T22:10:30.423 に答える
0

アップデートによると、issetの代わりにを使用する必要emptyがあるため、未定義のインデックスエラーを回避できます。

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

issetの詳細。

- アップデート -

三項代入を反転してみてください。

$name = (!isset($_POST['Name'])) ? '' : $_POST['Name'];
于 2012-04-07T23:36:33.240 に答える
0

undefined index通知に対する一般的な回答:

$myArray['myKey']配列myKeyに存在しない場合、未定義のインデックス通知が生成されます。$myArrayこれは、使用する前に既存のものを確認することで解決できます。

if (array_key_exists($myArray, 'myKey')) {
  echo $myArray['myKey'];
}
于 2012-04-07T22:10:32.773 に答える