2012-02-08 50 views
1

我想遍历提交表​​单中的所有元素,为每个元素分配自己的变量,然后检查它们是否是必需的。如果他们需要,他们将被检查,如果他们是空的。到目前为止,我的形式如下:通过表单元素循环并检查是否需要

<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,但除此之外我不知道。
感谢您的帮助!

+1

PHP不知道'required'属性。它只接收表单输入'name'和相应的'value'。您可以将整个HTML标记保存在一个字符串中,并使用解析库解析出它们以获取这些属性,但这似乎是不必要的复杂。 – 2012-02-08 12:02:51

回答

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; 
} 
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); 
    } 
} 
0

常见的方式做,这是实现双重验证:客户端和服务器端。客户端验证将使用JS来验证更基础级别的字段,并且因为它可能被愚弄(或JS禁用),您还需要实现服务器端验证。

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

相关问题