Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana kilku osobnych Select'ów w jeden
Forum PHP.pl > Forum > Bazy danych > MySQL
Przemo75
Witam,
Męczę się z tym już od dłuższego czasu i niestety nie bardzo wiem jak to rozgryźć.
Do wyświetlania zawartości (wyników z bazy) z 3 dynamicznych Select'ów mam poniższy kod:
  1. <?php
  2. include('dbconfig.php');
  3. $action = $_REQUEST['action'];
  4. if ($action=='showAll')
  5. {$id = "0";}
  6. else $id=$_POST['id'];
  7.  
  8. switch($action)
  9. {
  10. case 'showAll':
  11. default:
  12. $stmt=$DB_con->prepare('SELECT * FROM slist GROUP BY site');
  13. $stmt->execute();
  14. break;
  15. case 'site':
  16. $stmt=$DB_con->prepare('SELECT menu FROM slist WHERE site=:id GROUP BY menu ORDER BY menu');
  17. $stmt->execute(array(':id'=>$id));
  18. break;
  19. case 'menu':
  20. $stmt=$DB_con->prepare('SELECT categ FROM slist WHERE menu=:id GROUP BY categ ORDER BY categ');
  21. $stmt->execute(array(':id'=>$id));
  22. break;
  23. case 'categ':
  24. $stmt=$DB_con->prepare('SELECT links FROM slist WHERE categ=:id GROUP BY categ ORDER BY links');
  25. $stmt->execute(array(':id'=>$id));
  26. break;
  27. }
  28. ?>

Nie do końca działa on poprawnie, ponieważ przy wyborze ostatniego Select'a nie zwraca właściwego wyniku, a jest to spowodowane tym, że dla
Kod
case 'categ';
poprawne zapytanie powinno mieć postać
Kod
$stmt=$DB_con->prepare('SELECT links FROM slist WHERE menu=:id AND categ=:id GROUP BY categ ORDER BY links');

Niestety nie wiem, w jaki sposób przekazać wartość
Kod
menu=:id
do tego zapytania.
Link do demo i całego kodu umieściłem tutaj

Może mógłby ktoś podpowiedzieć, co zrobić/zmienić.
viking
Wybierz wartość selecta w JS, podstaw do requesta ajaxowego i tyle. I nie twórz po kilka tych samych tematów.
https://prophp.pl/advice/show/22/jak_w_java...ct_od_siebie%3F
Tomplus
Swoją drogą, kod możesz skrócić bardzo prosto. Zakładając że wartość 'showAll' i default to to samo.

wystarczy zastosować case tak:

  1. case 'showAll':
  2. default:
  3. $stmt=$DB_con->prepare('SELECT * FROM slist GROUP BY site');
  4. $stmt->execute();
  5. break;

Przemo75
No właśnie nie za bardzo wychodzi mi to podstawienie.
Z ajaxa wysyłam tym:
Kod
$(".menu").change(function()
{
   var id=$(this).val();
   var dataString = 'id=' + id + '&action=menu';
      $.ajax
      ({
    type: "POST",
    url: "get_categ.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
        $(".categ").html(html);
    }
      });
});

a odbieram tym:
  1. <?php
  2. include('dbconfig.php');
  3. if($_POST['id'])
  4. {
  5. $id=$_POST['id'];
  6. $action=$_POST['action'];
  7. $stmt=$DB_con->prepare('SELECT categ FROM slist WHERE menu=:id GROUP BY categ ORDER BY categ');
  8. $stmt->execute(array(':id' => $id));
  9. ?><option selected="selected">Category :</option><?php
  10. while($row=$stmt->fetch(PDO::FETCH_ASSOC))
  11. {
  12. $categ = $row['categ'];
  13. ?>
  14. <option value="<?php echo $categ; ?>"><?php echo $categ; ?></option>
  15. <?php
  16. }
  17. }
  18. ?>

i właśnie nie wiem, jak dalej przekazać to "startowe"
Kod
$id=$_POST['id']


Cytat(viking @ 19.11.2017, 13:22:44 ) *
Wybierz wartość selecta w JS, podstaw do requesta ajaxowego i tyle.
https://prophp.pl/advice/show/22/jak_w_java...ct_od_siebie%3F

Docelowa baza będzie miała ok. 3 tys. rekordów, więc to rozwiązanie chyba nie do końca w moim przypadku się sprawdzi.
viking
Rozwiązanie miało ci pokazać jak dobrac się do elementów select i przekazać z nich wartość dalej bo z tym problem. W jquery podstawiasz:
data: {
id: id,
categ: wartosc tego drugiego selecta
}
Przemo75
Czy da się jakoś zoptymalizować poniższe zapytania?
  1. switch($action)
  2. {
  3. case 'showAll';
  4. $stmt=$DB_con->prepare('SELECT * FROM slist GROUP BY site');
  5. $stmt->execute();
  6. break;
  7. case 'site';
  8. $stmt=$DB_con->prepare('SELECT menu FROM slist WHERE site=:id GROUP BY menu ORDER BY menu');
  9. $stmt->execute(array(':id'=>$id));
  10. break;
  11. case 'menu';
  12. $stmt=$DB_con->prepare('SELECT categ FROM slist WHERE menu=:id GROUP BY categ ORDER BY categ');
  13. $stmt->execute(array(':id'=>$id));
  14. break;
  15. case 'categ';
  16. $menu = $_POST['menu'];
  17. $stmt=$DB_con->prepare('SELECT links FROM slist WHERE menu=:menu AND categ=:id GROUP BY categ ORDER BY links');
  18. $stmt->execute(array(':menu'=>$menu, ':id'=>$id));
  19. break;
  20. default:
  21. $stmt=$DB_con->prepare('SELECT * FROM slist GROUP BY site');
  22. $stmt->execute();
  23. break;
  24. }
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-2024 Invision Power Services, Inc.