Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapytanie Mysql, a parametry z formularza
Forum PHP.pl > Forum > Przedszkole
krzesik
Witam,

mam formularz w którym user może wybrać różne elementy, które później są pobierane do zapytania MYSQL.
Trafiłem na problem z tablicą wielowymiarową i nie umiem sobie z tym poradzić..... poproszę o pomoc
zwrotnie POST-em dostaję:

Array
(
[opiekun] => 0
[TypUrzadzenia1] => Piłka
[TypUrzadzenia2] => Rakietka
[TypUrzadzenia3] => Drabina
[opiekun] => %
[rodzaj] => Array
(
[0] => przedszkole
[1] => szkoła
[2] => technikum
)
)

później leci to w zapytaniu:

  1. $wh = array();
  2. if (!empty($opiekun)) {
  3. $wh[] = 'Opiekun1 = '.'"%"'.' or Opiekun2 = '.'"%"';
  4. }
  5. if (!empty($TypUrzadzenia1)) {
  6. $wh[] = 'TypUrzadzenia LIKE '.'"'.$TypUrzadzenia1.'"';
  7. }
  8. if (!empty($TypUrzadzenia2)) {
  9. $wh[] = 'TypUrzadzenia LIKE '.'"'.$TypUrzadzenia2.'"';
  10. }
  11. if (!empty($TypUrzadzenia3)) {
  12. $wh[] = 'TypUrzadzenia LIKE '.'"'.$TypUrzadzenia3.'"';
  13. }






  1. if (!empty($wh)) {
  2.  
  3. $where = 'WHERE '.implode(' and ', $wh);
  4.  
  5.  
  6. $pyt = 'SELECT * FROM tabela '.$where.' ';
  7.  
  8. }

Neutral
  1. <body style="background: darkolivegreen;">
  2.  
  3. <pre>

  1. <?php
  2.  
  3. $array_x = array(
  4. "a" => 0,
  5. "b" => "aaa",
  6. "c" => "bbb",
  7. "d" => "ccc",
  8. "e" => "%",
  9. "f" => [
  10. "x", "y", "z"
  11. ]
  12. );
  13.  
  14. $wh = array();
  15.  
  16. $bonus = array(
  17. '`a` = "%" OR `b` = "%"',
  18. '`device_type` LIKE "' . $array_x['b'] . '"',
  19. '`device_type` LIKE "' . $array_x['c'] . '"',
  20. '`device_type` LIKE "' . $array_x['d'] . '"'
  21. );
  22.  
  23. for($i=0;$i<4;$i++) {
  24. if(!empty(array_values($array_x)[$i]) || array_values($array_x)[$i] === 0) {
  25. $wh[] = $bonus[$i];
  26. }
  27. }
  28.  
  29. if(!empty($wh)) {
  30. $where = 'WHERE ' . implode(' AND ', $wh);
  31. $query = 'SELECT * FROM `tbl` ' . $where . ';';
  32. }
  33.  
  34. print_r($query);
  35.  
  36. ?>

  1. </pre>
  2.  
  3. </body>
krzesik
ok to już mi dużo pomogło, ale w tablicy [rodzaj] mogę mieć zmienną ilość, a ilości rekordów nie jestem w stanie z góry określić
co można poradzić w takim przypadku?
Neutral
Podaj może jakiś przykład, żeby było wiadomo o co chodzi. Jeśli nie znasz ilości danych, to napisz pętlę z funkcją count();.
krzesik
zrobiłem tak:

  1. $elementy=count($array_x['rodzaj']);


dobrze pobiera mi ilość elementów tablicy [rodzaj]

zmieniłem w Twoim kodzie na:
  1. for($i=0;$i<$elementy;$i++) {
  2. if(!empty(array_values($array_x)[$i]) || array_values($array_x)[$i] === 0) {
  3. $wh[] = $bonus[$i];
  4. }
  5. }


ale jak to samo zrobić w zapytaniach?

  1. $bonus = array(
  2. '`a` = "%" OR `b` = "%"',
  3. '`device_type` LIKE "' . $array_x['b'] . '"',
  4. '`device_type` LIKE "' . $array_x['c'] . '"',
  5. '`device_type` LIKE "' . $array_x['d'] . '"'
  6. );


Neutral
Analogicznie do powyższego przykładu.

  1. <?php
  2.  
  3. $bonus = ['`a` = "%" OR `b` = "%"'];
  4.  
  5. for($i=1;$i<4;$i++) {
  6. $bonus[] = '`device_type` LIKE "' . array_values($array_x)[$i] . '"';
  7. }
  8.  
  9. print_r($bonus);
  10.  
  11. ?>


Jeśli ten warunek

  1. /* ... */ || array_values($array_x)[$i] === 0 /* ... */


nie działa jak należy, to popraw.
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.