2013-01-08 23 views
0

我希望这是有道理相对于标题和我想要实现的,所以这里去...遍历多个POST变量使用动态命名

我有一个介于1至30显示一个表单要输入的字段 - 字段数由用户在前一阶段确定(它不总是相同的数量)。

如果用户有5个字段要填写,他们必须都包含数据 - 如果他们设置了15个字段或30个字段,则它们都是相同的。

我希望能够做的是通过表单中的POST变量循环,确保它们都已设置并将数据插入到数据库或显示错误。

我打算做30 if语句嵌套的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

除了,你不必要添加(有害)单引号串联'$ q'。另外,我只是使用简单的“双引号插值”就像这样:'if(!$ _ POST [“field {$ q} _text”]){'。 – svidgen

回答

1

使用此:

for ($q = 1; $q <= $numberOfFields; $q++){ 
    if (!$_POST["field".$q."_text"]){ 
     $error = 1; 
    } 
} 

在自己的代码,你有奇怪的额外“

+0

2个小时的生活因此而逝去了 - 感谢您的快速反应 - 我以为我处于正确的路线。你可以做同样的设置变量吗?例如$ var。$ q = $ _POST [“field”。$ q。“_ text”] – Paul

+0

@Paul对于变量,我还建议将它们分配给一个数组,如:$ myvars = array(); $ myvars [$ q] = $ _POST ['field'。$ q .'_ text']; – mpaepper

3

这是可以做到这样的,使用的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 
    } 
}