2013-06-29 2 views
1

Мне нужно проверить, не является ли $ _POST ['a'] пустым И является либо «1», либо «2», поэтому пользователь не может удалить a = или изменить значение с 1 или 2 на что-то еще с пути публикации:Если оператор с несколькими логическими сравнениями

<?php 
if(empty($_POST['a']) || !in_array($_POST['a'], array('1', '2'))) { 
echo 'error1'; 
} else if ($_POST['a'] == '1') { 
do something; 
} else if ($_POST['a'] == '2') { 
do something; 
} else { 
echo 'error2'; 
} 
?> 

Может ли кто-нибудь научить меня, как это сделать правильно?

Много большого спасибо

+0

Это больше ввести, но более эффективно делать 'if (empty ($ _ POST ['a']) || ($ _POST ['a']! = 1 && $ _POST ['a']! = 2)) {'в отличие от in_array – chrislondon

+0

просто попробовал и не работал. Я получаю ошибку, независимо от того, a = 1, 2, 3, 4 или пустой. 0? Php if (empty ($ _ POST ['a']) || ($ _POST ['a']! = 1 && $ _POST ['a']! = 2)) { echo 'error' ; } else { echo 'good'; } ?> было бы проблемой синтаксиса? –

+0

Это синтаксическая проблема. Вам не хватает ')' в конце первого 'if'. И это, если вам нужно использовать IDE. Я просто использовал ваш код и сделал его красивее, никогда не обращал внимания на синтаксические ошибки ... – CodeAngry

ответ

4

Вы можете использовать переключатель вместо:

switch ($_POST['a']): 
case '': 
    // empty 
    echo 'error1'; 
    break; 
case '1': 
    // do something for 1 
    break; 
case '2': 
    // do something for 2 
    break; 
default: 
    // not empty but not 1 or 2 
    echo 'error2'; 
endswitch; 
+1

Это вызовет уведомление, если $ _POST ['a'] настроен неправильно? 'case ''' не то же самое, что 'empty()' – chrislondon

+0

Спасибо. Это первый раз, когда я сталкиваюсь с переключателем/корпусом, и он хорошо работает: p –

1
if (!empty($_POST['a']) && $_POST['a'] == '1') { //Not empty AND is 1 
do something; 
} else if (!empty($_POST['a']) && $_POST['a'] == '2') { //Not Empty AND is 2 
do something; 
} else { 
echo 'error'; 
} 

Первые два будет ловить все «хорошее» значение, все остальное получит сообщение об ошибке. И нет необходимости в верхнем, если в этом случае.

+0

AND (&&)? Я думал, что && означает оба истинных, которые означают, что если $ _POST равно «3», он будет передавать первое утверждение. Я прав? –

+0

это означает, что если и true, и как бы он передал первое утверждение 3! = 1 –

+0

Да, вы правы :) –

0

UPDATE: У вас есть ошибка синтаксиса. Отсутствует ) в конце первого if.

Два простых способа сделать это:

// first condition should be by itself as it's a terminal error 
if(empty($_POST['a']) or !in_array($_POST['a'], array('1', '2'))) { 
    echo 'error1'; 
    die; // or redirect here or just enfore a default on $_POST['a'] = 1; // let's say 
} 

// Second can be like this or embraced in the else of the first one (se ex.2) 
if ($_POST['a'] == '1') { 
    // do something; 
} else if ($_POST['a'] == '2') { 
    // do something; 
} 

или

// first condition should be by itself as it's a terminal error 
if(empty($_POST['a']) or !in_array($_POST['a'], array('1', '2'))) { 
    echo 'error1'; 
    // or redirect here or just enfore a default on $_POST['a'] = 1; // let's say 
}else{ // Second is in the else here :) 
    if ($_POST['a'] == '1') { 
    // do something; 
    } else if ($_POST['a'] == '2') { 
     // do something; 
    } 
} 

Ваш последний else не будет достигнута как всегда закончится в первом if, где вы обрабатывать как пустоту и недопустимое значение ,

+0

Вы, ребята, великолепны !!! –

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