Как да добавите функция за модифициране на търсене към страница с резултати

Имам PHP страница, която показва резултатите от заявка към потребителска база данни за сайт на класифицирана реклама. Потребителят инициира търсене на началната страница и избира параметрите на търсенето, като използва полета за избор, след което формулярът се изпраща.

Веднъж на страницата с резултати, трябва да позволя на потребителя да променя параметрите за търсене, като използва полета за избор отстрани на страницата (същите тези на началната страница). Как да направя така, че опцията, избрана във всяко поле за избор, да съответства на това, което е избрано на първата страница. т.е. ако потребителят избере марка: Audi и модел: A8, искам падащото меню за марка и модел да изброява всички други опции, но марката да е предварително избрана за Audi и моделът да е предварително избран за A8.

Знам за използването на избрана опция за полета с опции в оператор за избор, но как мога да взема оператор за избор, който вече е кодиран за страницата с резултати, и да вмъкна избрана променлива за опцията, която трябва да бъде избрана първа.

Надявам се, че има смисъл. Не съм публикувал никакъв код, защото търся по-скоро идеи, отколкото помощ за отстраняване на проблем с кода.


person MaxK    schedule 08.01.2012    source източник


Отговори (1)


Когато потребителят изпрати формуляра за търсене, всички променливи, публикувани във формуляра, са достъпни за вас чрез $_POST или $_GET. Използвайте тези променливи, за да изберете отново правилната информация във формуляра за търсене на страницата с резултати.

<select name="model">
   <option value="a8" <?php echo (isset($_POST['model']) && $_POST['model'] == 'a8') ? 'selected' : ''; ?>>A8</option>
</select>  

РЕДАКТИРАНЕ

Начинът на динамичната база данни:

<select name="model">
<?php
$getRows = mysql_query("SELECT * FROM models");
while($row = mysql_fetch_assoc($getRows))
{
    echo '<option value="" ' . ((isset($_GET['model']) && $_GET['model'] == $row['model']) ? 'selected' : '') . '></option>';
}
?>
</select> 

Сега имате нужда само от един оператор if. Между другото, трябва да използвате GET параметри, така че потребителят да има възможност да маркира резултатите за по-късна употреба.

person Marle1    schedule 08.01.2012
comment
Благодаря за вашият отговор. Какво влияние ще има това върху времето за зареждане на страницата, изпълнявано от операторите if за всяка опция? Има общо около 12 полета за избор, с около 20 опции за всяко. - person MaxK; 08.01.2012
comment
Зациклянето на тези кратки списъци няма да повлияе на времето за зареждане за потребителя на клиента, но вашият код ще бъде доста грозен с всички тези изрази if - person Marle1; 08.01.2012
comment
Във вашия случай бих помислил за извличане на списъците от база данни, което би помогнало за значително опростяване на вашия код. Редактирах отговора си, за да ви покажа пример. - person Marle1; 09.01.2012
comment
Обмислях да съхраня подробностите за опциите в масив с един оператор IF, вместо да го съхранявам в база данни. Бихте ли препоръчали това или бихте ли се придържали към съхраняването му в DB? - person MaxK; 10.01.2012
comment
Е, причината, поради която смятам, че трябва да се придържате към DB модела е, че е по-лесно да поддържате опциите. Често се появяват нови опции или вече не са актуални. Това може да не е така в момента, но със сигурност ще стане, когато проектът ви се разрасне. - person Marle1; 11.01.2012