2014-09-03 27 views
0

我一直试图用foreach替换$ _POST(s)的每个isset。

这是通过对每个$ _ POST isset真正的代码:

<form method='post'> 

    <input type='text' name='name'> <br> 
    <input type='text' name='address'> <br> 
    <input type='submit' name='send'> 

</form> 

<?php 

if (isset($_POST['name']) && isset($_POST['address']) && isset($_POST['send'])) 
{ 
    echo "All elements have been submitted"; 
} 
    else 
{ 
    echo "You forget some elements, try checking name or address"; 
} 

?> 

是有办法,我可以使用每个单isset取代上述4 isset(S)? 我做了这个,它出错了。

<form method='post'> 

    <input type='text' name='nama'> <br> 
    <input type='text' name='alamat'> <br> 
    <input type='submit' name='kirim'> 

</form> 

<?php 

foreach($_POST as $value) 
{ 
    if (isset($value)) 
    { 
     echo "All elements have been submitted"; 
    } 
    else 
    { 
     echo "You forget some elements, try checking name or address"; 
    } 
} 
?> 

需要帮助的人,这只是浪费时间,如果我必须为通过post/get发送的每个元素逐个写isset。我见过这样的事情之前在Visual Basic中,我的朋友做一个foreach构造来验证一个表单中的所有文本框,所以他没必要再创造这样的事情:

if textbox1.text="" && textbox.2.text="" and so on 

回答

1

编辑: jbrahy只是有一个错字。他现在的答案很好。

我认为jbrahy的方法是正确的总体思路......但我不认为它真的有效。

我会这样做。

$requiredFields = ["nama","alamat","kirim"]; 

    $allElementsSet = true; 
    foreach ($requiredFields as $requiredField) 
    { 
     if (!isset($_POST[$requiredField])) 
     { 
      $allElementsSet = false; 
      break; 
     } 
    } 
    if ($allElementsSet) 
    { 
     echo "All elements have been submitted"; 
    } else { 
     echo "You forget some elements, try checking name or address"; 
    } 
0

$ _ POST只将有传入的变量,并有HTML元素,可能不会通过提交传入。最好创建一个$ required_fields数组,如果你可以获得一些字段验证,那么这个数组就更好了,但这不是你在这里要求的。您需要获取$ _POST的密钥和值。

$required_fields = array("name" => FALSE, "alamat" => FALSE, "kirim" => FALSE); 

foreach ($required_fields as $key => $value){ 
    if (isset($_POST[$key])){ 
     $required_fields[$key] = TRUE; 
    } 
} 

foreach ($required_fields as $key => $value){ 
    if (!$required_fields[$key]){ 
     echo "Missing value for " . $key; 
    } 
} 

如果你想弄清楚每个传入的键是否有值,那么类似的东西也可以。

foreach ($_POST as $key => $value){ 
    if ($value == ""){ 
     echo "Value(s) are missing"; 
     break; 
    } 
}   
+0

我刚刚有一个想法。我可以用HTML5格式完全替换具有必需属性的isset吗? 无论如何,先谢谢了。我正在处理你写的代码,试着先理解它:) – januaryananda 2014-09-03 01:32:54

+0

肯定的,但可能是使用jquery的attr最好的完成。问另一个问题,我会发布和示例。它并不属于这一个。 – jbrahy 2014-09-03 01:34:41

+1

我不明白这行'if(isset($ required_fields)){'...在这个例子中它总是会返回'true',除非我失去了一些东西。 – 2014-09-03 01:36:12