Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zapytanie Mysql, a parametry z formularza
krzesik
post 22.06.2019, 07:50:43
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


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. }

Go to the top of the page
+Quote Post
Neutral
post 22.06.2019, 12:04:43
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

Ostrzeżenie: (0%)
-----


  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>


Ten post edytował Neutral 22.06.2019, 12:10:40
Go to the top of the page
+Quote Post
krzesik
post 22.06.2019, 19:10:29
Post #3





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Neutral
post 22.06.2019, 20:40:40
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

Ostrzeżenie: (0%)
-----


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();.
Go to the top of the page
+Quote Post
krzesik
post 23.06.2019, 09:44:48
Post #5





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


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. );


Go to the top of the page
+Quote Post
Neutral
post 23.06.2019, 10:54:37
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Neutral 23.06.2019, 10:55:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 23:33