我希望这与标题和我想要达到的目标有关,所以这里有......
我有一个表单,显示要输入的1到30个字段 - 字段数由用户在前一阶段确定(它不会总是相同的数量)。
如果用户有5个要填写的字段,则它们必须全部包含数据 - 如果他们设置了15个字段或30个字段,则相同。
我希望能够做的是遍历表单中的POST变量,确保它们都已设置并将数据插入数据库,或显示错误。
我打算使用嵌套的if语句执行30个if语句:
if ($numberOfFields == 1){
if (!$_POST["field1_text"]){$error = 1;}
};
if ($numberOfFields == 2){
if (!$_POST["field1_text"]){$error = 1;}
if (!$_POST["field2_text"]){$error = 1;}
};
但这似乎是一个非常漫长的方式,我想知道是否有人有任何建议或指示。
我想知道这样的事情是否有效:
for ($q = 1; $q <= $numberOfFields; $q ++){
if (!$_POST["field'".$q."'_text"]){
$error = 1;
}
}
但是我在使用$ q引用变量/字段名称时遇到错误。这应该是[$ q]还是其他什么?
我很难找到任何答案,但可能没有问正确的问题,但任何帮助都会受到赞赏。
由于
答案 0 :(得分:4)
可以这样做,使用foreach
代替for
:
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$error = false;
foreach($_POST as $key => $value)
{
if(strpos($key, 'field') === 0)
{
if($value == '')
{
$error = true;
break;
}
}
}
if($error)
{
// not all fields have a value - show message
}
}
如果在表单上使用输入数组,而不是使用连接的数字手动填充输入名称,则会容易得多。例如:
<input type="text" name="field[]" />
<input type="text" name="field[]" />
<input type="text" name="field[]" />
在PHP方面,只需循环遍历它们:
foreach($_POST['field'] as $field)
{
if($field == '')
{
// error - doesn't have a value
}
}
答案 1 :(得分:2)
使用此:
for ($q = 1; $q <= $numberOfFields; $q++){
if (!$_POST["field".$q."_text"]){
$error = 1;
}
}
在你自己的代码中,你有一些奇怪的额外'