循环使用表单元素并检查它们是否是必需的

时间:2012-02-08 11:59:29

标签: php html forms

我想循环遍历提交表​​单中的所有元素,为每个元素分配自己的变量,然后检查它们是否是必需的。如果需要,将检查它们是否为空。到目前为止,我的表单看起来像这样:

<form id="newitem" action="addnew.php" method="POST">
        <label for="title">Title: </label>
        <input type="text" name="title" id="title" required="required" /><br />
        <label for="description">Description: </label>
        <textarea name="description" id="website" cols="40" rows="5" ></textarea><br />
        <input type="hidden" name="formsubmit" value="true" /><!-- Option to know we've sumbited the form -->
        <input type="submit" value="Submit" id="submit" />
</form>

然后我使用它验证了它:

if (isset($_POST['formsubmit'])) {
    // form has been submitted
    $errors = Array();
    foreach($_POST as $key => $value) {
        $$key = $value;
        if (!$value) {
            array_push($errors, 'Please enter a value for ' . $key);
        }
    }
    if (count($errors) == 0) {
        echo 'Form validated';
    } else {
        showErrors($errors);
    }
}

目前检查元素是否具有值。但是,我希望使用HTML required="required"检查是否需要该字段 此外,虽然我觉得我确实理解这是如何工作的,但我不确定。我认为$$key = $value基本上意味着创建一个值为$key的变量,并为其赋值$value。因此,$key是元素的名称,而$value是其值。但是,我真的没有得到foreach($_POST as $key => $value) {。我知道它会循环所有的$_POST,但是我们真的不仅仅知道这一点。
谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

如果认为您正在寻找类似

的内容
$errors = Array();
foreach($_POST as $key => $value) {
    if (empty($value)) {
        $errors[] = 'Please enter a value for ' . $key;
    }
}

Foreach循环遍历关联数组,并为您提供数组中每个“元素”的键和值。在这种情况下,它将为您提供$ key中字段的名称和$ value中字段的值。

有关详细信息,请参阅http://php.net/manual/en/control-structures.foreach.php

但是,如果根本没有提交字段(即不从客户端发送到后端),则$ _FORM将不包含该字段 。因此,要检查是否填写了某些必填字段,您还需要在服务器端具有该列表..!然后代码就像:

$errors = Array();
$requiredfields = Array("somefield" => "...", "secondfield" => "...");
foreach($_POST as $key => $value) {
    unset($requiredfields[$key]); // The encountered field $key is present
    if (empty($value)) {
        $errors[] = 'Please enter a value for ' . $key;
    }
}
// Loop over all the required fields that are not found
foreach($requiredfields as $key => $val) {
    $errors[] = 'Please enter a value for ' . $key;
}

答案 1 :(得分:0)

我认为你在这里有点困惑......服务器只接收<input>字段的名称和值。 PHP根据<form>方法自动创建关联数组($ _POST和$ _GET)。因此,您无法知道哪个字段具有required属性,除非您插入一些业务逻辑

if (isset($_POST['formsubmit'])) {
    // form has been submitted
    $errors = Array();
    foreach($_POST as $key => $value) {
        $$key = $value;
        //check that title has a value
        if ($key === "title" && !$value) {
            array_push($errors, 'Please enter a value for ' . $key);
        }
    }
    if (count($errors) == 0) {
        echo 'Form validated';
    } else {
        showErrors($errors);
    }
}

答案 2 :(得分:0)

执行此操作的常用方法是实现双重验证:客户端和服务器端。客户端验证将使用JS来验证更基本级别的字段,因为它可能被欺骗(或JS禁用),您还需要实现服务器端验证。

使用jQuery很容易检查是否需要字段。 Willem Mulder指出了一些基本但无效的有效检查空值。