2016-05-30 94 views
1

我设置了一个数组,其中包含'用户名'和'密码'以通过登录验证函数,并且我不断收到第24行的'用户名'和'密码'是未定义索引的错误。php登录阵列问题

我做错了什么?谢谢!

这里是我的代码:

<?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] + "..."

和第一任务之前,$error[$fieldm]不存在。

编辑回答评论:

的清洁方法是检查字段存在,如果没有,用一个空字符串初始化它:

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

这样以后可以追加到它没有检查。

肮脏,但工作方式(不推荐)将简单地抑制与@运营商的未定义索引错误,因为在这种情况下,PHP假定一个空字符串。但是,正如我所说,不推荐。非常非常脏

+0

这很有道理。谢谢!如何将新错误添加到原始数组“错误[$ field]”? – zach