似乎无法附加到PHP中的数组

时间:2012-06-15 21:50:02

标签: php

这个简单的脚本理论上应该检查表单中的错误,然后打印它找到的任何错误。

formValidate函数接受表单数组,表单中的每个字段都有一个经过验证的值。该字段还有一个错误键,其值为空数组。我试图将我发现的任何错误追加到特定字段的错误数组中。然后,当我完成后,我返回表单数组。

我稍后打印出字段的所有错误。不幸的是,错误从未出现过。

我现在已经打破了这个问题好几个小时了,我不知道为什么我的生活中的表格错误没有出现。

非常感谢任何帮助!

# get value from array
function array_get(array $array, $key, $default = null)
{
    return (array_key_exists($key, $array)) ? $array[$key] : $default;
}

# get string value from array
function array_get_string(array $array, $key, $default = '', $trim = true)
{
    $val = array_get($array, $key);
    if (is_string($val)) {
        return ($trim) ? trim($val) : $val;
    }
    return $default;
}

function validateForm($form)
{
    // validateField each field
    foreach ($form as $field)
    {
        foreach ($field['validation'] as $validate)
        {
            switch($validate)
            {
                case 'email':
                    if(!filter_var($field['value'], FILTER_VALIDATE_EMAIL)) {
                        $field['errors'][] = $field['value'] . ' is an invalid email address.';
                    }
                break;
                case 'number':
                    if(!preg_match('/^[0-9 ]+$/', $field['value'])) {
                        $field['errors'][] = $field['value'] . ' is an invalid number.';
                    }
                break;
                case 'alpha':
                    if(!preg_match('/^[a-zA-Z ]+$/', $field['value'])) {
                        $field['errors'][] = $field['value'] . ' contains invalid characters. This field only accepts letters and spaces.';
                    }
                break;
            }
        }
    }

    return $form;
}

// $post = filter_input_array( INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS );
$post = $_POST;
$ajax = array_get_string($post, "request_method") == 'ajax';

# select data that needs validation
$form = array(
    'fullname' => array(
        'value' => array_get_string($post, "full-name"),
        'validation' => array('alpha', 'required'),
        'errors' => array(),
    ),
    'emailaddress' => array(
        'value' => array_get_string($post, "email-address"),
        'validation' => array('email'),
        'errors' => array(),
    ),
    'activites' => array(
        'value' => array_get_string($post, "activites"),
        'validation' => array('default'),
        'errors' => array(),
    ),
    'country' => array(
        'value' => array_get_string($post, "country"),
        'validation' => array('default'),
        'errors' => array(),
    ),
    'contactpreference' => array(
        'value' => array_get_string($post, "contact-preference"),
        'validation' => array('default'),
        'errors' => array(),
    ),
    'message' => array(
        'value' => array_get_string($post, "message"),
        'validation' => array('alpha'),
        'errors' => array(),
    ),
);

// validate the form
$form = validateForm($form);

foreach ($form as $field)
{
    foreach ($field['errors'] as $error)
    {
        echo $error . '<br />';
    }
}

1 个答案:

答案 0 :(得分:5)

foreach创建数组的副本并对其进行处理。如果您需要对原始数组进行更改,请通过引用传递它,如下所示:

foreach($form as &$field) {
    ...
}