Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как сделать фильтр с тремя селектами
 
 автор: kuzya13   (14.05.2008 в 15:24)   письмо автору
 
 

<tr >
                                        <td  class="quick_td">Тип</td>
<td><select size="1"  type="text" name="searchField[]" class="textfieldsel" style="width:165px;">
        <option value="">выберите<option>
        <option value="1" [{if $filter.searchField == "1"}]selected [{/if}]>номер</option>
        <option value="2" [{if $filter.searchField == "2"}]selected [{/if}]>имя</option>
           <option value="3" [{if $filter.searchField == "3"}]selected [{/if}]>место</option>
           <option value="4" [{if $filter.searchField == "4"}]selected [{/if}]>адрес</option>
                                                                                        
                                         </select></td>              
                                       
                                             <td  class="quick_td">сравнение</td>
 <td><select size="1"  type="text" name="searchCompare[]" class="textfieldsel" style="width:100px;" align = "center">
                                     <option value="">выберите<option>
        <option value="1" [{if $filter.searchCompare == "1"}]selected[{/if}]>=</option>
        <option value="2" [{if $filter.searchCompare == "2"}]selected[{/if}]>></option>
        <option value="3" [{if $filter.searchCompare == "3"}]selected[{/if}]><</option>
        <option value="4" [{if $filter.searchCompare == "4"}]selected[{/if}]>>=</option>
        <option  value="5" [{if $filter.searchCompare == "5"}]selected[{/if}]><=</option>
                                                               
                                         </select></td>  
                                         
                                          <td  class="quick_td">peзультат</td>
<td class="quick_td"><input type="text" name="searchValue[]" class="textfieldsel" style="width:165px;" value=[{if $filter.searchField == "1"}][{$filter.b_nr}][{/if}] ></td>
                                         <td  class="quick_td">сравнение 2</td>
<td><select size="1"  type="text" name="searchAdd[]" class="textfieldsel" style="width:100px;" align = "center">
       <option value="">выберите<option>
       <option  value="1" [{if $filter.searchAdd == "1"}]selected[{/if}]>and</option>
       <option value="2" [{if $filter.searchAdd == "2"}]selected[{/if}]>or</option>
                                                                                            
                                         </select></td>  
                                         
                                   </tr>





<td align="right"><input class="submit" type="submit" name="filter" value="вывод" ></td>


Помогите сделать фильтр с тремя селектами, например, когда выберем Тип - Номер, Сравнение - =, вписывается результат , при наэатии кнопки submit, должен выводится результат. подскажите как?

   
 
 автор: kuzya13   (14.05.2008 в 16:42)   письмо автору
 
   для: kuzya13   (14.05.2008 в 15:24)
 

никто не может помочь???????

   
 
 автор: sim5   (14.05.2008 в 17:37)   письмо автору
 
   для: kuzya13   (14.05.2008 в 15:24)
 

Ну во-первых, уберите в именах списков [] (как в прочем и у других элементов формы). Это нужно добавлять селекту тогда, когда селект с мультивыбором. Во-вторых - что вывести, значение всех выбранных селектов? Где вывести и в какой форме?

   
 
 автор: kuzya13   (14.05.2008 в 17:51)   письмо автору
 
   для: sim5   (14.05.2008 в 17:37)
 

он и есть мультивыборный

   
 
 автор: kuzya13   (14.05.2008 в 17:55)   письмо автору
 
   для: kuzya13   (14.05.2008 в 17:51)
 

вывести нужно в ввиде таблицы

   
 
 автор: sim5   (14.05.2008 в 18:02)   письмо автору
 
   для: kuzya13   (14.05.2008 в 17:55)
 

Список с мультивыбором должен иметь атрибут multiple, у вас это не наблюдается. Имя поля формы с добавлением [] оправдано тогда, когда таких полей с одинаковым именем в форме несколько (массив), этого у вас тоже нет. Зачем вы тогда добавляете? Вы выбранные значения списков хотите вывести в таблицу при выводе формы (у вас Смарти ведь работает) или динамически отображать выбор посредством JS?

PS. Мультивыбор списка, это когда можно выбрать несколько значений в списке, может вы немного путаете, имея ввиду выбор из нескольких списков?

   
 
 автор: kuzya13   (14.05.2008 в 18:06)   письмо автору
 
   для: sim5   (14.05.2008 в 18:02)
 

у меня имеется такая функция
function getFilterQuery()
{
global $_POST, $rs;

$query = "";

for ($i=0;$i<count($_POST['searchField']);$i++){

// vt_bo_id = 12345 AND
$query .= $_POST['searchField'][$i] ." ". $_POST['searchCompare'][$i] . " " . $_POST['searchValue'][$i] . " " . $_POST['searchAdd'] . " ";

$i++;
}

return $query;

}
в tpl тоже самое

   
 
 автор: sim5   (14.05.2008 в 18:19)   письмо автору
 
   для: kuzya13   (14.05.2008 в 18:06)
 

В tpl вообще-то будет не это, а другое, например, SECTION, коим вы и разложите переданный в Смарти массив. Ну бог с ним, коли у вас несколько инпутов с одинаковым именем, то значит и должно быть name[]. Но вот со списком - без указания <select name="as[]" multiple> имя списка указывайте как as, иначе будут проблемы.
Вы не ответили на вопрос - когда вы хотите вывести выбранные значения списков: при выводе этого шаблона, или непосредственно при выборе опшенов списков пользователем?

   
 
 автор: kuzya13   (14.05.2008 в 18:22)   письмо автору
 
   для: sim5   (14.05.2008 в 18:19)
 

непосредственно при выборе опшенов пользователем

   
 
 автор: sim5   (14.05.2008 в 18:32)   письмо автору
 
   для: kuzya13   (14.05.2008 в 18:22)
 

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

   
 
 автор: kuzya13   (14.05.2008 в 18:36)   письмо автору
 
   для: sim5   (14.05.2008 в 18:32)
 

Помогите сделать фильтр с тремя селектами, например, когда выберем Тип - Номер, Сравнение - =, вписывается результат , при наэатии кнопки submit, должен выводится результат. подскажите как?

   
 
 автор: sim5   (14.05.2008 в 18:41)   письмо автору
 
   для: kuzya13   (14.05.2008 в 18:36)
 

При нажатии кнопки SUBMIT, это уже отправка формы на сервер, поэтому принимайте на сервере значения и делайте с ними что хотите. Вы не знаете как получить данные списка на сервере, или получаете данные, но не знаете как их вывести?

   
 
 автор: kuzya13   (14.05.2008 в 18:51)   письмо автору
 
   для: sim5   (14.05.2008 в 18:41)
 

мне не понятна сама логика, получить и передать данные не проблема.
получатеся если в первом селекте = 1, то выбираются поля с одного поля, затем сравнивается с селектом вторым при помощи логических оператор, вписывается результат стравнения, при нажатии на кнопку должен выводится результат. я не знаю как это все реализовать

   
 
 автор: sim5   (14.05.2008 в 18:54)   письмо автору
 
   для: kuzya13   (14.05.2008 в 18:51)
 

Так вы вопрос, видимо, не так задали. Я понимаю вас так - вам нужно отметить опшен (или опшены) последующего списка, в зависимости от выбранных значений предыдущего списка, при формировании списков? Либо просто сравнить значение опшена (опешенов, в этом случае могут быть неоднозначные ситуации) двух списков?

   
 
 автор: kuzya13   (14.05.2008 в 18:59)   письмо автору
 
   для: sim5   (14.05.2008 в 18:54)
 

да
вроде такой функции

if($_POST['searchField[]']=="1" ){
$sql = "SELECT имя поля FROM таблица ";
}

   
 
 автор: kuzya13   (14.05.2008 в 19:00)   письмо автору
 
   для: kuzya13   (14.05.2008 в 18:59)
 

или же с помощью switch($_POST["]){
case 0: $sql .= "";break; ???????????????

   
 
 автор: sim5   (14.05.2008 в 20:15)   письмо автору
 
   для: kuzya13   (14.05.2008 в 18:59)
 

Еще раз повторяю - [] в имени означает, что это массив значений опшенов списка с мультивыбором, либо это несколько списков с одним именем (массив списков). И принимать его надо, в вашем случае, как $_POST['searchField'], без указания [], если только это не многомерный массив списков. Вы сперва разберитесь с этим, потому как вы будете получать два значения массива (или более), что никак вам не позволит четко определить в условии - что делать.
Вы по приему формы выведите в браузер весь получаемый вами массив POST, и посмотрите что вы получаете:
print_r($_POST);

Собственно по вашему примеру не видно - где тут сравнение о котором вы говорили?

PS. В общем вот вам домашнее задание. )) Создайте маленький файлик test.php и поместите в нем следующее:

<form action="" method="post">
<select name="as[]">
<option value="1">111</option>
<option value="2">222</option>
<option value="3">333</option>
</select>
<select name="as[]">
<option value="4">444</option>
<option value="5">555</option>
<option value="6">666</option>
</select>
<select name="as2[]" multiple>
<option value="1">111</option>
<option value="2">222</option>
<option value="3">333</option>
</select>
<input type="submit" value="Send">
</form>
<?php
print "<pre>";
print_r($_POST);
print 
"</pre>";
?>

В данном примере в форме три списка. Два первых объденены в массив as, а третий список, это список с мультивыбором. Запустите скрипт на исполнение, выбирайте значения списков и смотрите, что вы будете получить из формы. Уясните себе это. Мне кажется у вас проблемы как раз в этой плоскости.

   
 
 автор: kuzya13   (15.05.2008 в 10:43)   письмо автору
 
   для: sim5   (14.05.2008 в 20:15)
 

или вы не понимаете меня, или я не так объясняю
Я вам уже сказал, что мне просто нужно, один sql запрос написать, ваше дамошнее задание оставте для школьников

   
 
 автор: sim5   (15.05.2008 в 12:08)   письмо автору
 
   для: kuzya13   (15.05.2008 в 10:43)
 

Скорее всего не так объясняете, уж если на то пошло. А зря вы не захотели сделать простое и посмотреть, что вы получаете, ибо такого:
if($_POST['searchField[]']=="1" ) {....
вы би не писали тогда. Я от вас так и не узнал, что предстваляют ваши списки. Допустим, вы имеете два списка с одним именем (как в примере два первых), а вот что вы получите, если выбор будет в двух списках:

Array
(
    [as] => Array
        (
            [0] => 2
            [1] => 6
        )

)

Как вы думаете, получите ли вы эти значения, если будете проверять так, как вы это делаете? Если говорить о примере, то чтобы узнать, что я получаю из первого списка, то надо проверять $_POST['as'][0], второго $_POST['as'][1]... Так что думать надо и если не можете объяснить или не понимаете, то не стоит брезговать простыми примерами.

   
 
 автор: mihdan   (14.05.2008 в 22:51)   письмо автору
 
   для: kuzya13   (14.05.2008 в 15:24)
 

Связанные списки

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования