PHP函数错误没有显示

时间:2018-03-09 16:46:21

标签: php arrays function

我不完全确定如何搜索这个问题,所以如果之前有人询问过,请将我发送到正确的方向。

我有一个带数组的验证函数。在我的数组中,如果其中一个表单字段没有验证,我会设置错误。如果用户填写错误的字段,他们应该得到哪个字段错误的错误,并且表单应该仍然存在。但是,它们只有一般错误(我调用函数时回显的那个)而不是特定于字段的错误。有人可以告诉我哪里出错了吗?

$output_form = 1; //control if form displays - yes
$error_text = ''; 

//declare form elements (empty first load)
$fname = '';
$valid_fname = 0;
$fname_regex = '/^([A-Z]|[a-z]){2,15}$/';
$fname_error_message = 'First name must be 2-15 alphabetic characters only.<br>';

$lname = '';
$valid_lname = 0;
$lname_regex = '/^([A-Z]|[a-z]){2,15}$/';
$lname_error_message = 'Last name must be 2-15 alphabetic characters only.<br>';

$phone = '';
$valid_phone = 0;
$phone_regex = '/^\(\d{3}\)\d{3}-\d{4}$/';
$phone_error_message = 'Phone number must be in (xxx)xxx-xxxx format.<br>';


$city = '';
$valid_city = 0;
$city_regex = '/^([A-Z]|[a-z]){2,15}$/';
$city_error_message = 'City must be 2-15 alphabetic characters only.<br>';

$state = '';
$valid_state = 0;
$state_regex = '/^([A-Z]|[a-z]){2}$/';
$state_error_message = 'State must be 2 alphabetic characters only.<br>';

//data posted
if (isset($_POST['submit'])) {

    if ($debug) {
        echo "<pre>";
        print_r($_POST);
        echo "</pre>";
    }//end debug

    $fname = trim($_POST['fname']);
    $lname = trim($_POST['lname']);
    $phone = trim($_POST['phone']);
    $city = trim($_POST['city']);
    $state = trim($_POST['state']);

    $phone_replace = preg_replace('/[\(\)\-\s]/', '', $phone);

    function validate_form($fields, &$errors = []) {
        $errors = [];
        foreach ($fields as $name => $field) {
            if (!preg_match ($field['regex'], $field['value'])) {
                $errors[$name] = $field['error'];
                $output_form = 1;
            }
        }
        return empty($errors); //returns true/false
    }

    $fields = [
        'fname' => ['regex' => $fname_regex, 'value' => $fname, 'error' => $fname_error_message],
        'lname' => ['regex' => $lname_regex, 'value' => $lname, 'error' => $lname_error_message],
        'phone' => ['regex' => $phone_regex, 'value' => $phone, 'error' => $fname_error_message],
        'city' => ['regex' => $city_regex, 'value' => $city, 'error' => $city_error_message],
        'state' => ['regex' => $state_regex, 'value' => $state, 'error' => $state_error_message],
    ];
    $errors = [];
    if (!validate_form($fields, $errors)) {
        echo "<p>One of your fields is invalid. Please check and re-submit.</p>";
        $output_form = 1;
        return (false);
    }
    else {
        $output_form = 0;
    }

1 个答案:

答案 0 :(得分:0)

foreach($errors as $error) echo "<p>$error</p>";

实际输出东西通常有帮助;)