php登录表单显示数组错误

时间:2018-01-06 19:26:20

标签: php

我在登录表单上显示错误时遇到了一些问题。

登录有效,但我无法弄清楚如何显示这些错误。

我只需要在登录字段和页脚之间显示它们。我想问题应该是foreach的最后一部分,它应该成为错误数组。

<!DOCTYPE html>
<html lang="en">
    <body>
    <?php
    include ('includes/header.php');
    ?>
        <div class="nav">
            <?php
            include ('includes/menu.php');
            $error= logInData();
            ?>
        </div>
        <section role="main">
            <div class="logIn">
                     <h3>Intranet Login</h3>
            </div>
            <form action="" method="post">
                        <fieldset>
                            <legend>Student Log in</legend>
                            <div>
                                <label for="username">Enter username: </label>
                                <input type='text' id="userN" name="userN" value = "<?php if (isset($error['usern'])){echo $error['usern'];} ?>">
                            </div>
                            <div>
                                <label for="password">Enter password: </label>
                                <input type='password' id="pass" name="pass" value = "">
                            </div>
                            <div>
                                <p class="red"><?php if (isset($error['both'])) {
                                    echo $error['both'];
                                } ?></p>
                            </div>
                            <div>
                                <input type="submit" name="submit" value="Log-In">
                            </div>
                        </fieldset>
            </form>
        </section>
<?php

function logInData (){        
    $error = array();
    $validated = array();
    $clean = array();

    $pass = false;

    if (isset($_POST['submit']) && $pass == true) {
        $inputPass = ($_POST['pass']);
        $trimPass = trim($inputPass);
        $inputUsern = ($_POST['userN']);
        $trimUsern = trim($inputUsern);
        if(!empty($trimPass)){
            if (!ctype_alpha($trimPass)) {
                $error['passw'] = 'No special characters allowed on password';
                $pass = false;
            }else{
                if(empty($trimPass)){
                    $error['passw'] = 'password field empty';
                    $pass = false;
                }else{
                    $clean['passw'] = $trimUsern;
                    $pass = true;
                }
            }
        }if ($pass == true) {
            return $clean;
        }else {
            return $error;
        }
        if(!empty($trimUsern)){
            if (!ctype_alpha($trimUsern)) {
                $error['userN'] = 'No special characters allowed on username';
                $pass = false;
            }else{
                if(empty($trimPass)){
                    $error['userN'] = 'username field empty';
                    $pass = false;
                }else{
                    $clean['userN'] = $trimUsern;
                    $pass = true;
                }
            }
        }if ($pass == true) {
            return $clean;
        }else {
            return $error;
        }
        $dir = '/home/sbau01/public_www/php/fma/data';
        if (is_dir($dir)){
            $handleDir = opendir('/home/sbau01/public_www/php/fma/data');
            $path = "/home/sbau01/public_www/php/fma/data/data.txt";
            if(is_file($path)){
                $handle =  fopen($path, 'r');
                while(!feof($handle)){
                    $dataRow = fgets($handle);
                    if(!empty($dataRow)){
                        $separate = explode(' ',$dataRow);
                        $storedUsern = trim($separate[3]);
                        $storedPassword = trim($separate[4]);;
                        if (($clean['userN'] == $storedUsern) && ($clean['passw'] && $storedPassword)){
                            $match = true;
                            header('location: intranet.php');
                        }else{
                            $error['match']='<span >Username/Password is incorrect!!</span>';
                            $pass = false;
                        }
                    }
                }fclose($handle);
            }else{
                $error['data']='<span >Data not found</span>';
                $pass = false;
            }closedir($HandleDir);
        }else{
            $error['data']='<span >Data not found</span>';
            $pass = false;
        }
    }else {
    $errmsg = '';
    foreach($error as $key => $value){
            echo "ERROR: $value<br />\n";                   
        }   
    } 
}    


?>
        <footer>
            <?php include ('includes/footer.php');?>
        </footer>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

它是一个简单的括号错误:

$errmsg = '';
foreach($error as $key => $value){
        echo "ERROR: $value<br />\n";                   
}

上面的部分是if (isset($_POST['submit']) && $pass == true) {

的else条件

这就是为什么它永远不会执行。只需取下此部件上方的支架,然后将其添加到foreach之后。

  

在文本文件中保存密码不是一个好主意!

在第101行你可能有一点错误: 您只需检查是否存在变量,就不要检查它们是否相等($clean['passw'] && $storedPassword)){

答案 1 :(得分:0)

确定了几个问题。

您是否打开了显示错误? https://stackoverflow.com/a/21429652/1246494

您在顶部呼叫Set,但在下方创建了您的功能$error= logInData();

我认为你想要做的就把整个函数放在顶部的包含文件中,如:

logInData() { ... }

然后,您想要在身体中调用include ('includes/header.php'); include ('includes/logInFunction.php');

另一个问题是你的函数将数据放入数组和回声数据中。如果您要在页面顶部放置logInData();,请尝试将其移出您的功能并进入您想要输出错误的正文。

$error= logInData();