PHP установлен равным $ var1 или $ var2 - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь сделать систему маршрутизации.

Что я хочу сделать:

Url: http://localhost/wiki.php?post_id=1 вызвать секунду, если

URL: http://localhost/wiki.php?post_id=1&action=upvote http://localhost/wiki.php?post_id=1&action=downvote сначала вызвать, если

Это система маршрутизации:

if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || "downvote")){
    //Do stuff
}else if(isset($_GET['post_id'])){
    //Do stuff
}

Проблема:

URL: http://localhost/wiki.php?post_id=1&action=upvotehttp://localhost/wiki.php?post_id=1&action=downvote работает так, как они должны.

Но url: http://localhost/wiki.php?post_id=1 вызывает первый, а не второй, если тоже ...

Примечание: неопределенный индекс: действие в D: \xampp \ htdocs \ controllers \ WikiController.php в строке 18

Строка 18: $rate = $_GET['action']; внутри, во-первых, если.

Во время тестирования я выяснил, что если я изменю if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || "downvote")){

тоже

 if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote")){

или

 if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "downvote")){

Работает нормально.Но я хочу научиться делать это правильно, а не просто сделать 2 разных маршрутизатора.

Ответы [ 4 ]

0 голосов
/ 11 октября 2018
$routes = [
    'upvote','downvote'
    ];
    if(isset($_GET['post_id']) && isset($_GET['action']) && in_array($_GET['action'],$routes)){
       echo 'running if';
    }else if(isset($_GET['post_id'])){
      echo 'running else if';
    }

Вы пропустили && была проблема, я просто изменил это для динамического маршрута, если вам нужно изменить в будущем!

0 голосов
/ 11 октября 2018

|| "downvote" всегда будет возвращать true, так как вы ни с чем не сравниваете.Вы также должны добавить (isset($_GET['action']) ? $_GET['action'] : null) == перед этой строкой.

Таким образом, ваше утверждение будет:

if(isset($_GET['post_id']) && ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || (isset($_GET['action']) ? $_GET['action'] : null) == "downvote")){
    //Do stuff
}else if(isset($_GET['post_id'])){
    //Do stuff
}
0 голосов
/ 11 октября 2018

Для уточнения, одиночный (амперсанд) & является «поразрядным»:

Поэтому вам необходимо изменить &&&.

Из руководства:

$ a & $ b И установлены биты, заданные как в $ a, так и в $ b.

То, что вы ищете, это логический && оператор:

$ a && $ b И ИСТИНА, если оба $a и $ b - ИСТИНА.

0 голосов
/ 11 октября 2018

эта часть (exp) == "upvote" || "downvote" не работает так, как вы предполагаете.Он только проверяет, является ли exp равным "upvote", вторая часть "downvote" понимается как логическое значение, равное true, поэтому вы остаетесь в первой части альтернативы.

tryс

if(isset($_GET['post_id']) && (($exp = (isset($_GET['action']) ? $_GET['action'] : null)) == "upvote" || $exp == "downvote")){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...