我想循环遍历提交表单中的所有元素,为每个元素分配自己的变量,然后检查它们是否是必需的。如果需要,将检查它们是否为空。到目前为止,我的表单看起来像这样:
<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
,但是我们真的不仅仅知道这一点。
谢谢你的帮助!
答案 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指出了一些基本但无效的有效检查空值。