PHP表单数据验证问题

时间:2014-02-08 17:35:23

标签: php forms validation

我正在制作一个基本的内容管理系统,而且我已经陷入了对输入表单的数据的验证。

例如,一种形式是编辑主题的名称(在导航菜单中)。表单包含一些不同的数据,但主要关注的是“menu_name”字段(主题名称)。

在表单提交中,应检查“menu_name”中的数据以确保它不为空,如果是,则给出错误。发生的事情是表单验证似乎没有工作,因为当我输入任何内容时,脚本继续编辑主题名称,在这种情况下将其设置为空白。

这是在表单提交时执行的脚本:

if (isset($_POST['submit']))
{
    // Process the form

    // Validations
    $required_fields = array("menu_name", "position", "visible");
    validate_presences($required_fields);

    $fields_with_max_lengths = array("menu_name" => 30);
    validate_max_lengths($fields_with_max_lengths);

    // If errors occured, redirect
    if(empty($errors))
    {
        // Perform update

        // Assign POST data to variables
        $id = $current_subject["id"];
        $menu_name = mysql_prep($_POST["menu_name"]);
        $position = (int) $_POST["position"];
        $visible = (int) $_POST["visible"];

        // 2. Perform database query
        $query = "UPDATE subjects SET ";
        $query .= "menu_name = '{$menu_name}', ";
        $query .= "position = '{$position}', ";
        $query .= "visible = '{$visible}' ";
        $query .= "WHERE id = {$id} ";
        $query .= "LIMIT 1";
        $result = mysqli_query($connection, $query);

        if ($result && mysqli_affected_rows($connection) >= 0) 
        {
            // Success
            $_SESSION["message"] = "Subject updated.";
            redirect_to("manage_content.php");
        }
            else
        {
            // Failure
            $message = "Subject update failed.";
        }
    }

}

然后,您可以看到两个自定义验证函数检查数据,第二个不是我关注的问题,而是第一个函数validate_presences(),这里是函数:

function validate_presences($requried_fields)
{
    GLOBAL $errors;

    foreach($required_fields as $field)
    {
        $value = trim($_POST[$field]);
        if (!has_presence($value))
        {
            $errors[$field] = fieldname_as_text($field) . " can't be blank";
        }
    }
}

你可以看到它引用了has_presence()函数,它是:

function has_presence($value)
{
    return isset($value) && $value !== "";
}

如果有人对错误有任何想法,欢迎任何帮助! 只是询问您是否需要更多信息。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

为什么不直接返回错误数组而不是将其设为全局?我认为它会立即解决你的问题;)

function validate_presences($requried_fields)
{
    $errors = array();

    foreach($required_fields as $field)
    {
        $value = trim($_POST[$field]);
        if (!has_presence($value))
        {
            $errors[$field] = fieldname_as_text($field) . " can't be blank";
        }
    }
    return $errors;
}

现在设置$errors = validate_presences($required_fields);并准备好了!

答案 1 :(得分:0)

不建议以这样的全局方式使用变量。而是通过引用验证函数来传递errors变量。

$errors = array();

function validate_presences($requried_fields, &$errors)
{
    foreach($required_fields as $field)
    {
        $value = trim($_POST[$field]);
        if (!has_presence($value))
        {
            $errors[$field] = fieldname_as_text($field) . " can't be blank";
        }
    }
}

$required_fields = array("menu_name", "position", "visible");
validate_presences($required_fields, $errors);

$fields_with_max_lengths = array("menu_name" => 30);
validate_max_lengths($fields_with_max_lengths, $errors);

// If errors occured, redirect
if(empty($errors))
{