[mysql]php 登录阵列问题

标签: sql MySQL PHP
发布时间: 2017/4/9 23:46:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

设置保存 '用户名' 和 '密码' 去通过登录验证函数的数组,我不断收到错误用户名和密码第 24 行未定义的索引。

做了什么我做错了?谢谢你 !

这里是我的代码︰

<?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 假定为空的字符串。 但正如我所说的不推荐.和非常,非常脏。

官方微信
官方QQ群
31647020