2011-06-02 64 views
1
$form = array(); 
$form = $_POST['data']; 

    function livre($form) { 
     if (empty($form["radios"]) || empty($form["age"]) 
     || empty($form["gender"]) || empty($form["civil"]) 
     || empty($form["formation_area"]) || empty($form["scholarithy"]) 
     || empty($form["professional_activity"]) || empty($form["city_work"]) 
     || empty($form["contract_job"]) || empty($form["salary"])){ 
      echo ("empty"); 
     } 
     else 
     echo ("not empty"); 

    } 

     livre($form_data_array); 

的第一个问题是:是否有可能减少空号一个,像empty($form) || ($form1)简化/减少代码 - 如果

第二个是:如何减少的行数,我觉得这个方案我使用的不是最好的方法。我不能简单地验证数组是否为空,因为只有一些索引可以为空。

感谢

回答

5

可以存储在一个数组要测试的所有字段名:

$fields = array('radios', 'age', ...); 

,然后遍历它:

foreach($fields as $field) { 
    if(empty($form[$field])) { 
     echo 'empty'; 
     break; 
    } 
} 

旁注:你不需要$form = array();

+0

真棒,谢谢费利克斯。工作没有任何问题 – user773961 2011-06-02 16:11:12

+0

@user:不客气:) – 2011-06-02 16:12:17

0
$empty = false; 
foreach ($_POST as $value) 
{ 
    if (empty($value)) 
     $empty=true; 
} 
0

您可以搜索在一个循环形式的每个元素:

function livre($form) 
{ 
    $elements = array(
     'radios', 
     'age', 
     ... 
    ); 

    foreach($elements as $el) 
    { 
     if(!key_exists($el, $form) 
     { 
     echo 'empty'; 
     } 
    } 
    echo 'not empty'; 
} 
livre($form_data_array); 
+0

它应该是'array_key_exists',这与'empty'不同。例如。采取'数组('foo'=>'')'。 'foo'存在,但值是空的。 – 2011-06-02 16:00:52

+0

应该使用array_key_exists(),但是为了向后兼容,可以使用key_exists()。是的,这与检查empty()不同。我误解了 – 2011-06-03 10:33:21

0
while ($form[$i]) 
{ 
if (empty($form[$i]) 
    echo "empty"; 
else 
    $i++; 
} 
+0

这个问题,我需要指定哪些变量可以为空或者不是 – user773961 2011-06-02 16:01:24

+0

不在你最初的问题中;) 因此,只需检查返回$ i。 $ i = 0 ='收音机' 功能错误($ i) { echo'您在$ tab [$ i]上有错误'; } – 2011-06-02 16:03:41

0

你可以尝试做这样的吧。

function livre($form) { 
     if(is_valid($form)) 
      echo("valid") 
     else 
      echo ("not valid"); 

} 
function is_valid($post) { 
    $required_fields = ["radios", "age", "gender", "civil", "formation_area", "scholarithy", 
         "professional_activity", "city_work", "contract_job", "contract_job", "salary"] 

    for($key in $required_fields) 
     if(empty($post[$key])) 
      return false; 
    return true; 
} 

我引入了一个单独的函数来验证发布数据,我做了一个for循环来检查数据是否有效。

1

一个更紧凑的方法是:

if (count(array_filter($form, "strlen")) != count($form)) { 
    echo "one field was empty"; 
} 

注意其实际strlen测试,而不是empty。这对于文本字段更合适,因为它不会将"0"视为不存在。

0

我很喜欢马里奥给出的答案!

如果一切正常,这可能是有点快:

function livre() 
    { 
    $form = $_POST['data']; 

     if (
    $form["radios"]==''|| $form["age"]=='' || $form["gender"]==''|| 
    $form["civil"]=='' || $form["formation_area"]=='' || 
    $form["scholarithy"] =='' || $form["professional_activity"]==''|| 
    $form["city_work"]=='' || $form["contract_job"]=='' || 
    $form["salary"]=='' 
    ) 
     echo ("empty"); 

     else 
     echo ("not empty"); 

    } 

livre(); 
+1

OP的代码有什么优势? – 2011-06-02 16:13:28

+0

OP代码是什么意思? – Melsi 2011-06-02 16:20:14

+0

问题中的代码。你的基本上是一样的,但OP要求缩短他的代码版本。所以我想知道改进的地方在哪里? – 2011-06-02 16:20:46