2016-05-30 1 views
1

私はログイン検証機能を実行するために 'username'と 'password'を保持する配列を設定し、 'username'と 'password'が24行目の未定義インデックスであるというエラーが発生し続けます。phpログインアレイの問題

どうしたのですか?ありがとう!あなたが$error[$fieldm]を初期化しません

<?php require_once("redirect.php"); 
require_once("proj2Functions.php"); 

$errors = []; 
$message = ""; 

if (isset($_POST["submit"])) {//1 
    $username = trim($_POST["username"]); 
    $password = trim ($_POST["password"]); 

    $fieldsRequire = array("username", "password"); 
    foreach($fieldsRequire as $field) {//2 
     $value = trim($_POST[$field]); 
     if (!has_presence($value)) {//3 
      $errors[$field] = ucfirst($field) . " can't be blank"; 
     }//3 
    }//2 
    $fieldsMax = 5; 
    foreach($fieldsRequire as $fieldm) {//4 
     $value = trim($_POST[$fieldm]); 
     if (!has_max_length($value, $fieldsMax)) {//5 
      //Line 24 
      $errors[$fieldm] .= "<br>- can't be more then {$fieldsMax}  characters."; 
     }//5 
    }//4 

    foreach($fieldsRequire as $FIELD) { 
     $value1 = trim($_POST[$FIELD]); 
     if (!specialChar($value1)) { 
      $errors[$FIELD] .= "<br>- cannot have a $ sign."; 
     } 
    } 

    if (empty($errors)) {//6 
     if ($username == "zach" && $password == "zach") {//7 
      redirect_to("Homepage2.php"); 
     } else { 
      $message = "Username/password do not match."; 
     }//8 
    }//6 
}else { 
    $username = ""; 
    $message = "Please log in."; 
} 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html lang="en"> 
    <head> 
     <title>Start Collay Login(beginLogin)</title> 
    </head> 
    <body> 
     <?php echo $message; ?> 
     <?php echo formErrors($errors); ?> 
     <?php print_r($_POST); ?> 

     <form action="beginLogin.php" method="post"> 
      Username: <input type="text" name="username" value=""><br> 
      Password: <input type="text" name="password" value=""><br> 
      <input type="submit" name="submit" value="submit"> 
     </form> 
    </body> 
</html> 

答えて

1

は、ここに私のコードです。

あなたは$error[$fieldm] .= "..."でアクセスするときので、それは $error[$fieldm] = $error[$fieldm] + "..."

と同じだと最初の代入の前に、$error[$fieldm]は存在しません。

編集コメントに答えるために:

きれいな方法は、空の文字列でそれを初期化、フィールドが存在しない場合はどうかをチェックするために、次のようになります。

if(!isset($error[$fieldm])) { 
    $error[$fieldm] = ""; 
} 

ので、後であなたが追加することができますそれを確認せずに。

@オペレータで定義されていないインデックスエラーを単純に抑止するのは、ダーティーですが動作する方法です(推奨しません)。その場合、PHPは空の文字列を仮定します。しかし、私が言ったように、推奨されていません。非常に、非常に汚いです。

+0

これは意味があります。ありがとう!新しいエラーを元の配列 "errors [$ field]"にどのように追加できますか? – zach