首页 > 解决方案 > 无法将值分配给错误数组以处理 PHP 中的错误

问题描述

我试图在 PHP 中创建一个 POST 请求表单。当用户提交表单时,代码应该验证输入并将其放入称为错误的数组中。之后,系统会检查该数组是否为空。如果它有东西,它会撞到一个警告框。

我面临的问题是无论我如何尝试分配值,错误数组仍然为空。以下是完整代码。

<?php

    $errors = array('name' => '', 'age' => '' ); // array containing errors

    // check get request. The GET will be an array storing data to be transfered to server as GET. 
    // _ is global var. GET belows will take the value when the submit button pressed
    if(isset($_POST['submit'])){  // when user submit POST request
        errCheck();
        if(!empty($errors['name'])) {
            phpAlert($errors['name']);

        };   // check if errors exist
        if(!empty($errors['age'])) {
            phpAlert($errors['age']);

        };
    }

    function errCheck() {               // validate user input
        if(empty($_POST['name'])) {
            $errors['name'] = 'Name can\'t be emty';

        }
        elseif(!preg_match('/^[a-zA-Z\s]+$/', $_POST['name'])){ 
            $errors['name'] = 'Only letters available for name.';

        };
        if(empty($_POST['age'])) {
            $errors['age'] = 'Age can\'t be empty';

        } 
    }

    function phpAlert($msg){    // in case errors exist
        echo $msg;
        echo '<script type="text/javascript">alert("' . $msg . '")</script>';
    };

?>

<!DOCTYPE html> 
<html>
    <head>
        <title> my PHP </title>
    </head>

    <body>
        <h4 class="center">Add a Person</h4>
        <form class="white" action="15.php" method="POST">           <!-- GET request form -->
            <label>Name: </label>
            <input type="text" name="name">                            <!-- name is the key for http request -->
            <label>Age: </label>
            <input type="number" name="age">
            <div class="center">
                <input type="submit" name="submit" value="submit">
            </div>
        </form>


    </body>
</html>

预期结果:当用户没有输入任何内容或在“名称”输入中写入非字母内容时,会出现警告框。

当前问题:代码运行,但无论我在输入中输入什么,它总是会碰到 2 个空白警报框。错误数组始终为空。

我尝试过的(但不起作用):制作错误全局数组,重新排列代码,print_r 一切($_POST 有值但没有 $errors),重新制作函数 phpAlert。

已编辑:使代码更易于阅读。

标签: phparrays

解决方案


在函数 errCheck 中定义错误并返回。

// check get request. The GET will be an array storing data to be transfered to server as GET. 
        // _ is global var. GET belows will take the value when the submit button pressed
        if(isset($_POST['submit'])){  // when user submit POST request

            $errors = errCheck();
            if(!empty($errors['name'])) {phpAlert($errors['name']);};   // check if errors exist
            if(!empty($errors['age'])) {phpAlert($errors['age']);};
        }

        function errCheck() {               // validate user input. Throw errors into errors array
            //Define the array of error within this function 
            $errors = array('name' => '', 'age' => '' ); // array containing errors
            if(empty($_POST['name'])) {$errors['name'] = 'Name can\'t be emty';}
            elseif(!preg_match('/^[a-zA-Z\s]+$/', $_POST['name'])){ $errors['name'] = 'Only letters available for name.';};
            if(empty($_POST['age'])) {$errors['age'] = 'Age can\'t be empty';} 

            //Return the errors
            return $errors;
        }

        function phpAlert($msg){    // in case errors exist
            echo $msg;
            echo '<script type="text/javascript">alert("' . $msg . '")</script>';
        };

推荐阅读