Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP]Filtrowanie wyników z MySQL za pomocą formularza
Forum PHP.pl > Forum > Przedszkole
kleszczoscisk
Próbuję zrobić formularz filtrujący wynik zapytań z tabeli w bazie MySQL.
Chcę wykorzystać checkboxy, na takiej zasadzie jak np. filtrowanie w ceneo.
Fragment formularza:
  1. $gallery_techniques = Array(
  2. '1' => array('1', 'olej', '#000','obrazy olejne'),
  3. '2' => array('2', 'akryl', '#000099','obrazy akrylowe'),
  4. '3' => array('3', 'kredka', '#666666','kredka')
  5. );
  6. foreach($gallery_techniques as $technika){
  7. if(isset($_GET['t']) AND !empty($_GET['t']) AND ($_GET['t'] == $technika[0])){
  8. echo '<input type="checkbox" name="t[]" value="'.$technika[0].'" style="color:'.$technika[2].'" checked="checked" /> - '.$technika[1].' ';
  9. }
  10. else echo '<input type="checkbox" name="t[]" value="'.$technika[0].'" style="color:'.$technika[2].'" /> - '.$technika[1].' ';
  11. }


Dane z formularza w zmiennych GET odbieram tak:
  1. if(isset($_GET['t']) AND $_GET['t'] <> 0) {
  2. $t = $_GET['t'];
  3. foreach($t as $tech ){
  4. if(array_key_exists($tech, $gallery_techniques)) {
  5. $sql_filter .= " AND dziela.technika LIKE '%".$gallery_techniques[(int)$tech][1]."%' ";
  6. $title .= ' - '.$gallery_techniques[$tech][3];
  7. }
  8. }
  9. }
  10. else{
  11. $t = 0;
  12. $title .= ' ';
  13. }


Problem jest taki, że kiedy wysyłam formularz tworzy się taki URL:
Cytat
index.php?&t[]=1&t[]=2

zmienna $_GET['t'] jest zmultiplikowana i w dodatku jest tablicą(?).
Czy ten sposób w ogóle jest dobry?
W jaki sposób rozpoznać w formularzu, które checkboxy zostały zaznaczone aby ustawić je checked="checked" ?

Może ktoś mógłby polecić jakiś działający prosty przykład na takie filtorwanie wg zadanych parametrów?



ghost1511
Nadaj każdemu checkboxowi indywidualną nazwę wtedy będziesz wiedział co jest zaznaczone
  1. <input type="checkbox" name="t1" value="1">
  2. <input type="checkbox" name="t2" value="2">

lub jeżeli chcesz zachować tablicę:
  1. <input type="checkbox" name="t[1]" value="1">
  2. <input type="checkbox" name="t[2]" value="2">


chociaż osobiście zamieniłbym cyfry na ciągi znaków smile.gif
kleszczoscisk
Cytat(ghost1511 @ 29.01.2014, 07:42:27 ) *
Nadaj każdemu checkboxowi indywidualną nazwę wtedy będziesz wiedział co jest zaznaczone

Tylko, że to komplikuje sposób odbierania danych z formularza, wydaje mi się, że paramtry dotyczące jednej kolumny w tabeli powinny być w jednej i tej samej zmiennej $_GET...

Póki co wykrywanie zmiennych z urla zrobiłem za pomocą in_array:
  1. <!--technika-->
  2. <label for="t">Technika:</label>
  3. <?
  4. if(isset($_GET['t']) AND !empty($_GET['t'])){$t = $_GET['t'];}
  5. foreach($gallery_techniques as $technika){
  6. if(isset($t) AND !empty($t) AND (in_array($technika[0], $t) == TRUE)){
  7. echo '<input type="checkbox" name="t[]" value="'.$technika[0].'" style="color:'.$technika[2].'" checked="checked" /> - '.$technika[1].' ';
  8. }
  9. else echo '<input type="checkbox" name="t[]" value="'.$technika[0].'" style="color:'.$technika[2].'" /> - '.$technika[1].' ';
  10. //onchange="this.form.submit();"
  11. }


Ale dalej mi się to nie podoba, pewnie będzie problem żeby takie url przepisywać z mod_rewrite (z tego powodu w ogóle GET), mogą się rozrastać, problem ze stronicowaniem... może ktoś podpowie jakieś inne lepsze rozwiązanie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.