2015-01-08 4 views
-1

hei, так что я пытаюсь сделать здесь, это проверить два источника моей функции, если установлено $ this-> post ["search"] использовать его или если установлено значение $ this-> сообщение [ «ID»] использовать идентификатор, но не оба:Использование логического оператора 'или' return always true

($this->post["search"] or $this->post["id"]) 

Если я дамп я получаю булево значение с истинным ответом, почему? Так что, если у меня есть длинная строка, как в SQL строку я не хочу использовать elseif «си хочет быть больше как:

$this->sql->cell("select search_for('" . $this->post["search"] or $this->post["id"] . "') as response;"); 
+0

($ this-> post ["search"] или $ this-> post ["id"]) возвращает _true_ или _false_, а не содержимое элементов массива post.i.e. если $ this-> post ["search"] содержит 'find me', то это _true_. –

+0

Я хотел использовать в одной строке, как в вопросе, но мне кажется, что мне нужно использовать if/else –

+1

_ ($ this-> post ["search"]? $ This-> post ["search"]: $ this -> post ["id"]) _ будет возвращать либо значение, если задано хотя бы одно. [Использование Терминального оператора PHP] (http://www.sitepoint.com/using-the-ternary-operator/) –

ответ

0

Вы, вероятно, должны пройти поток управления в зависимости от того, что установлено:

if (isset($this->post["search"])) { 
    // deal with search 
} else if (isset($this->post["id"])) { 
    // deal with id 
} else { 
    // gracefully reject dealing: nothing to do 
} 

BTW, isset возвращает true для пустых строк:

$test = array('a' => ''); 
var_dump(isset($test['a'])); 
//⇒ bool(true) 

Чтобы определить, является ли $_POST имеет значение, используйте:

!empty($_POST['id']) 

Надеюсь, это поможет.

+0

Я изменяю свой вопрос, пожалуйста! поэтому я не хочу использовать elseif, я хочу знать, почему, если я удаляю строку $ this-> post ["search"] или $ this-> post ["id"], я получаю всегда правду? –

+0

@JohniDevo Pls см. Обновление. – mudasobwa

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