2009-12-03 7 views
0

У меня есть следующие флажки в моей форме, id, как знать, как проверить хотя бы один из них, отмечены без изменения их имени.Проверка наличия существует

<label for="branding">Branding 
<input type="checkbox" name="branding" id="branding" class="checkbox" /></label> 
<label for="print">Print 
<input type="checkbox" name="print" id="print" class="checkbox" /></label> 
<label for="website">Website 
<input type="checkbox" name="website" id="website" class="checkbox" /></label> 
<label for="other">Other 
<input type="checkbox" name="other" id="other" /></label> 

ответ

-1
$checkcount = 0; 
if($_POST['branding']){$checkcount++} 
if($_POST['print']){$checkcount++} 
if($_POST['website']){$checkcount++} 
if($_POST['other']){$checkcount++} 

if($checkcount>0){ 
    //do stuff 
} 
+1

Вы даже можете использовать логическое значение вместо целого числа или просто использовать if (this || that || foo || bar) {} Почему вы не можете переписать форму? – Emyr

+1

Знаете ли вы, что этот код приведет к большому количеству предупреждений в вашем файле журнала? – Yacoby

5

Использование isset() или array_key_exists(). Эти две функции имеют очень небольшую разницу в том, что если значение равно null, даже если ключ существует, isset возвращает false. Однако, это не имеет значения в данном случае

if (isset($_POST['branding']) || isset($_POST['print'])){ 
    //... 
} 

Или, возможно, лучше

$ops = array('branding', 'print'); 
$hasSomethingSet = false; 
foreach ($ops as $val){ 
    if (isset($_POST[$val])){ 
     $hasSomethingSet = true; 
     break; 
    } 
} 

if ($hasSomethingSet){ 
    //... 
} 



Если у вас есть PHP 5.3, немного медленнее, но более элегантное решение (непроверенные):

$ops = array('branding', 'print'); 
$hasSomethingSet = array_reduce($ops, 
           function($x, $y){ return $x || isset($_POST[$y]; }, 
           false); 

Это зависит от того, насколько вы довольны функциональным программированием, если хотите.

+0

Должен ли $ val быть в isset? – Andy

+0

Да, мое плохое. Исправлена. – Yacoby

Смежные вопросы