2016-05-30 14 views
1

Ich habe ein Array eingerichtet, das "Benutzername" und "Passwort" enthält, um Login-Validierungsfunktionen durchlaufen und ich bekomme den Fehler, dass "Benutzername" und "Passwort" ist ein undefinierter Index in Zeile 24.PHP-Login-Array Problem

Was habe ich falsch gemacht? Vielen Dank!

Hier ist mein Code:

<?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> 

Antwort

1

Sie nie $error[$fieldm] initialisiert.

so, wenn Sie es von $error[$fieldm] .= "..." zugreifen, es ist die gleiche wie $error[$fieldm] = $error[$fieldm] + "..."

und vor dem ersten Einsatz, ist $error[$fieldm] nicht vorhanden.

bearbeiten Kommentar zu beantworten:

die saubere Art und Weise wäre zu prüfen, ob das Feld vorhanden ist und wenn nicht, initialisiert es mit einem leeren String:

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

so danach können Sie anhängen dazu ohne zu prüfen.

der schmutzige, aber funktionierende Weg (nicht empfohlen) wäre, einfach den undefinierten Indexfehler mit dem @ -Operator zu unterdrücken, da in diesem Fall PHP eine leere Zeichenfolge annimmt. aber wie gesagt, nicht empfehlenswert. und sehr, sehr dreckig.

+0

Das macht Sinn. Vielen Dank! Wie kann ich die neuen Fehler zum ursprünglichen Array "errors [$ field]" hinzufügen? – zach