множественный! isset () с условиями OR в php - PullRequest
1 голос
/ 04 мая 2019
if(!isset($_GET['new_quiz']) || !isset($_GET['view_quiz']) || !isset($_GET['alter_quiz'])){
echo "No";
}
else{ echo "Yes"; }

Когда я перехожу к index.php? View_quiz , он должен давать результат как Да , но это приводит к Нет .Почему?

Мои другие попытки:

(!isset($_GET['new_quiz'] || $_GET['view_quiz'] || $_GET['alter_quiz']))

(!) Неустранимая ошибка: невозможно использовать isset () для результата выражения (можно использовать «null! ==»выражение "вместо этого" в C: \ wamp \ www \ jainvidhya \ subdomains \ teacher \ quiz.php в строке 94


(!isset($_GET['new_quiz'],$_GET['view_quiz'],$_GET['alter_quiz']))

NO

Ответы [ 5 ]

1 голос
/ 04 мая 2019

Возможно, вы обнаружите, что инверсия логики делает код более легким для чтения, мне также нравится иметь более позитивное представление об условиях, так как он может читаться легче (вместо нескольких примечаний означает «нет»).

То есть, если кто-то из предметов isset(), то ответ будет Yes ...

if(isset($_GET['new_quiz']) || isset($_GET['view_quiz']) || isset($_GET['alter_quiz'])){
    echo "Yes";
}
else{ echo "No"; }

Обратите внимание, что я изменил Yes и No ветви if вокруг.

0 голосов
/ 05 мая 2019

Сначала ответим на ваш вопрос:

Когда я захожу в index.php? View_quiz, он должен давать результат как Да, но это как Нет. Почему?

Это потому что это

if(!isset($_GET['new_quiz']) || !isset($_GET['view_quiz']) || !isset($_GET['alter_quiz'])){

проверяет, не установлен ли какой-либо из ваших параметров, что будет всегда, если вы не устанавливаете все три параметра одновременно, как это:

index.php? Alter_quiz & view_quiz & new_quiz

Как сказал @ nigel-ren, вы можете не менять эту логику на

if(isset($_GET['new_quiz']) || isset($_GET['view_quiz']) || isset($_GET['alter_quiz'])){
    echo 'Yes';

, который проверяет, установлен ли хотя бы один параметр.


Если вы не хотите проверять, есть ли только один из трех установленных параметров, вам придется работать с XOR (что немного сложнее)

$a = isset($_GET['new_quiz']);
$b = isset($_GET['view_quiz']);
$c = isset($_GET['alter_quiz']);

if( ($a xor $b xor $c) && !($a && $b && $c) ){
    echo 'Yes';

(на основании этого ответа: XOR трех значений )

, который возвращает true, если установлен один и только один из трех параметров.


Но - и это только предположение, пожалуйста, исправьте меня, если я ошибаюсь - я думаю, что вы пытаетесь достичь трех разных страниц (одна для создания теста, одна для его просмотра и одна для его редактирования) , Поэтому вы, скорее всего, столкнетесь с проблемой с вашей текущей настройкой. Например: что произойдет, если пользователь вызовет страницу с несколькими параметрами, например

index.php? Alter_quiz & view_quiz

Будете ли вы показывать обе страницы? Вы бы проигнорировали один параметр? Я бы порекомендовал работать с одним параметром, чтобы избежать этой проблемы в первую очередь. Например, site, который может принимать значения alter_quiz, view_quiz или new_quiz. E.g.:

index.php? Сайт = alter_quiz

Тогда вы можете работать так:

// check if site is set before getting its value
$site = array_key_exists( 'site', $_GET ) ? $_GET['site'] : NULL;

// if it's not set e.g. index.php without parameters is called
if( is_null($site) ){
    // show the start page or something
}else{

    $allowed_sites = ['new_quiz', 'view_quiz', 'alter_quiz'];

    // never trust user input, check if
    // site is an allowed value
    if( !in_array($site, $allowed_sites, true) ){
        die('404 - This site is no available');
    }

    // here you can do whatever your site should do
    // e.g. include another php script which contains
    // your site
    include('path/to/your/site-' . $site . '.php');

    // or echo yes
    echo 'Yes';

}
0 голосов
/ 04 мая 2019

isset() допускает несколько параметров. Если хотя бы 1 параметр не существует (или имеет значение NULL), isset () возвращает false. Если все параметры существуют, isset () возвращает true.

Так попробуйте это:

if( !isset( $_GET['new_quiz'], $_GET['view_quiz'], $_GET['alter_quiz']) ) {
0 голосов
/ 04 мая 2019

@ paran, вам нужно установить значение для view_quiz=yes, например

if(!isset($_GET['new_quiz']) || !isset($_GET['view_quiz']) || !isset($_GET['alter_quiz'])){
echo "No";
}
else{ echo "Yes"; }

и URL

index.php?new_quiz=yes
index.php?view_quiz=yes
index.php?alter_quiz=yes

Все вернется правда

0 голосов
/ 04 мая 2019

Вы, наверное, ищете

if(!isset($_GET['new_quiz']) && !isset($_GET['view_quiz']) && !isset($_GET['alter_quiz'])){
    echo "No";
}
else {
    echo "Yes";
}

, который будет печатать Да , если в URL нет ни одного из new_quiz, view_quiz и alter_quiz. Если это не ваш желаемый результат, пожалуйста, опишите вашу проблему.

...