2013-12-12 2 views
1

У меня есть три выпадающих списка в форме поиска. Я хотел бы отображать результаты, если выбран только один вариант выпадающего списка. Прямо сейчас поиск работает только с первым выбором выпадающего списка (в примере это $ StockType). Если во втором или третьем выпадающем списке выбрать только вариант, результаты не будут показаны. Вот мой переключатель заявление:PHP-переключатель показывает только результаты первого случая

$StockType = $_GET['StockType']; 
$make = $_GET['Make']; 
$model = $_GET['Model']; 


switch (true) { 

    case ($StockType): 
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

     $args = array(
      'post_type' => 'vehicle', 
      'paged' => $paged, 
      'posts_per_page' => 15, 
      'meta_key' => 'StockType', 
      'meta_value' => $StockType 
     ); 
     break; 

    case ($make): 
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

     $args = array(
      'post_type' => 'vehicle', 
      'paged' => $paged, 
      'posts_per_page' => 15, 
      'meta_key' => 'Make', 
      'meta_value' => $Make 
     ); 
     break; 

    case ($model): 
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

     $args = array(
      'post_type' => 'vehicle', 
      'paged' => $paged, 
      'posts_per_page' => 15, 
      'meta_key' => 'Model', 
      'meta_value' => $model 
     ); 
     break; 

} 
+0

первый раз, когда я вижу переключатель (истина) {} –

+0

Я предложил бы использовать 'var_dump ($ _ GET)', чтобы увидеть, какие значения вы получаете это. Он выглядит как '$ _GET ['StockType'];' всегда что-то задают. – andrewsi

+0

Charaf jra, не могли бы вы объяснить, что с этим не так? – user715564

ответ

-1

Переключатель верно будет работать, если вы используете это правильно. Попробуйте это:

switch (true) { 

case (!empty($_GET['StockType'])): 
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

    $args = array(
     'post_type' => 'vehicle', 
     'paged' => $paged, 
     'posts_per_page' => 15, 
     'meta_key' => 'StockType', 
     'meta_value' => $StockType 
    ); 
    break; 

case (!empty($_GET['Make'])): 
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

    $args = array(
     'post_type' => 'vehicle', 
     'paged' => $paged, 
     'posts_per_page' => 15, 
     'meta_key' => 'Make', 
     'meta_value' => $make 
    ); 
    break; 

case (!empty($_GET['Model'])): 
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

    $args = array(
     'post_type' => 'vehicle', 
     'paged' => $paged, 
     'posts_per_page' => 15, 
     'meta_key' => 'Model', 
     'meta_value' => $model 
    ); 
    break; 
} 

Interesting link about the switch(true) method

+0

Конечно, но если вы собираетесь это сделать, зачем беспокоиться о «переключателе»? Просто используйте простые старые инструкции if if и удалите уровень вложенности. –

+0

@IanMcLaird нет причин действительно. Наверное, это не так много. Возможно, это будет выглядеть так, как это выглядит. Практически это может быть полезно, если вы хотите, чтобы некоторые случаи разливались друг с другом. – TonyArra

+2

Этот код плохо пахнет, вам нужно внимательно его прочитать, чтобы понять, что здесь делается, не используйте переключатель таким образом, используйте вместо него инструкции! –

2

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

Что вы хотите сделать что-то вроде:

switch($value){ 
    case 'value 1': 
     doSomething(); 
     break; 
    case 'value 2': 
     doSomething(); 
     break; 
    case 'value 3': 
     doSomething(); 
     break; 
} 

Посмотрите на статью о Манипуляции в PHP, чтобы понять вашу проблему в более глубоком образом: http://www.php.net/manual/en/language.types.type-juggling.php

0

да Это всегда работает первый случай, даже если Вы переставить случай заказ, то он также будет работать первый случай, потому что ваш коммутатор случае кодирования является неверным. Для примера. Если пользователь выбирает третий снимок, тогда значение устанавливается в $ модели, а другая переменная установлена ​​на Значение NULL, но в вашем случае для кодирования всегда отображается первый случай, так как $ stockty установлен в null, но он также удовлетворен состояние. По моему мнению, вы должны попробовать:

if($_GET['stocktype']!=''){ 
$yourvalue=$_GET['stocktype']; 
} 
elseif($_GET['model']!=''){ 
$yourvalue=$_GET['model']; 
} 
elseif($_GET['make']!=''){ 
$yourvalue=$_GET['make']; 
} 
switch($yourvalue){ 
case 'stocktype': 
//your code 
break; 
case 'make': 
//your code 
break; 
case 'mode;': 
//your code 
break; 
default: 

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