Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]problem z wyszukiwarką
hankos0
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 5.10.2009

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


Witajcie!
Mam skrypt (poniżej) wyszukiwarki. Wyszukiwarka ma szukać danych z dwóch tabel.
Skrypt zachowuje się poprawnie (zgodnie z oczekiwaniami) jeśli przeszukuję tylko jedną tabelę. Przy moich wielokrotnych próbach dodania do zapytania drugiej tabeli albo wyświetla mi : "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /search2.php on line 83" albo nie wyszukuje niczego, albo wyświetla zawartość wszystkich pól tabel (klienci i detale).

  1. echo'<form action="search2.php" method="post">';
  2. echo "<br>wpisz miasto <br>";
  3. echo'<input type="text" name="miasto" id="miasto" value="">';
  4. echo "<br>wpisz imie <br>";
  5. echo'<input type="text" name="imie" id="imie" value=""><br/>';
  6. echo "<br>wpisz materialy <br>";
  7. echo'<input type="text" name="materialy" id="materialy" value=""><br/>';
  8.  
  9.  
  10. echo'<input type="submit" name="znajdz" value="znajdz"><br/>';
  11. echo'<input type="reset" value="wyczyść">';
  12. echo'</form>';
  13.  
  14. if(isset($_POST['znajdz']))
  15. {
  16. $miasto = $_POST['miasto'];
  17. $imie = $_POST['imie'];
  18. $materialy = $_POST['materialy'];
  19.  
  20. $wh = array();
  21.  
  22. if (!empty($_POST['miasto']))
  23. $wh[] = "miasto = '$_POST[miasto]'";
  24. if (!empty($_POST['imie']))
  25. $wh[] = "imie = '$_POST[imie]'";
  26. if (!empty($_POST['materialy']))
  27. $wh[] = "materialy = '$_POST[materialy]'";
  28.  
  29. if (!empty($wh))
  30. $where = 'where '.implode(' and ', $wh);
  31. else
  32. $where = '';
  33. $zapytanie = 'SELECT klienci.klient_id, klienci.imie, klienci.nazwisko, klienci.miasto, details.klient_id, details.materialy FROM klienci, details WHERE klienci.klient_id = details.klient_id AND '.$where;
  34. $wynik = mysql_query($zapytanie);
  35.  
  36. echo "<table>";
  37. echo "<tr>";
  38. echo "<td> miasto </td>";
  39. echo "<td> imie </td>";
  40. echo "<td> nazwisko </td>";
  41. echo "<td> materialy </td>";
  42. echo "<tr>";
  43. while ($row = mysql_fetch_array ($wynik) )
  44. {
  45. echo "<tr>";
  46. echo "<td>{$row['miasto']}</td>";
  47. echo "<td>{$row['imie']}</td>";
  48. echo "<td>{$row['nazwisko']}</td>";
  49. echo "<td>{$row['materialy']}</td>";
  50. echo "<tr>";
  51. }
  52. echo "</table>";
  53. }
  54.  


Proszę o sugestie jak powinno wyglądać to nieszczęsne zapytanie, a może wogóle w całym kodzie coś pokręciłam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jasin
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


To daj np.
  1. $zapytanie = 'SELECT klienci.klient_id,klienci.imie,klienci.nazwisko,klienci.miasto,details.klient_id
  2. ,details.materialy FROM klienci LEFT OUTER JOIN details ON(klienci.klient_id = details.klient_id) AND'.$where;
  3.  
  4. echo $zapytanie; exit;
  5.  
  6. $wynik = mysql_query($zapytanie);


wklej wynik do np. phpmyadmina i tam sprawdź co zwróci Ci mysql.
Go to the top of the page
+Quote Post
hankos0
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 5.10.2009

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


Cytat(jasin @ 30.11.2009, 16:58:44 ) *
To daj np.
  1. $zapytanie = 'SELECT klienci.klient_id,klienci.imie,klienci.nazwisko,klienci.miasto,details.klient_id
  2. ,details.materialy FROM klienci LEFT OUTER JOIN details ON(klienci.klient_id = details.klient_id) AND'.$where;
  3.  
  4. echo $zapytanie; exit;
  5.  
  6. $wynik = mysql_query($zapytanie);


wklej wynik do np. phpmyadmina i tam sprawdź co zwróci Ci mysql.

Odpowiedź jaką dostałam:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where miasto = 'warszawa' and imie = 'piotr' and materialy = 'motor' LIMIT 0, 30' at line 1

SELECT klienci.klient_id, klienci.imie, klienci.nazwisko, klienci.miasto, details.klient_id, details.materialy
FROM klienci
LEFT OUTER JOIN details ON ( klienci.klient_id = details.klient_id )
AND WHERE miasto = 'warszawa'
AND imie = 'piotr'
AND materialy = 'motor'
LIMIT 0 , 30
Go to the top of the page
+Quote Post
jasin
post
Post #4





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


Cytat(hankos0 @ 30.11.2009, 17:34:30 ) *
Odpowiedź jaką dostałam:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where miasto = 'warszawa' and imie = 'piotr' and materialy = 'motor' LIMIT 0, 30' at line 1

SELECT klienci.klient_id, klienci.imie, klienci.nazwisko, klienci.miasto, details.klient_id, details.materialy
FROM klienci
LEFT OUTER JOIN details ON ( klienci.klient_id = details.klient_id )
AND WHERE miasto = 'warszawa'
AND imie = 'piotr'
AND materialy = 'motor'
LIMIT 0 , 30


a więc jak widać masz tu błąd w zapytaniu. Powinno wyglądać:
  1. $zapytanie = 'SELECT klienci.klient_id,klienci.imie,klienci.nazwisko,klienci.miasto,details.klient_id
    , details.materialy FROM klienci LEFT OUTER JOIN details ON(klienci.klient_id = details.klient_id) '
    .$where;


Ten post edytował jasin 30.11.2009, 17:49:17
Go to the top of the page
+Quote Post
hankos0
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 5.10.2009

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


Cytat(jasin @ 30.11.2009, 17:48:42 ) *
a więc jak widać masz tu błąd w zapytaniu. Powinno wyglądać:
  1. $zapytanie = 'SELECT klienci.klient_id,klienci.imie,klienci.nazwisko,klienci.miasto,details.klient_id
    , details.materialy FROM klienci LEFT OUTER JOIN details ON(klienci.klient_id = details.klient_id) '
    .$where;


No tak, poprawiłam zapytanie. Teraz po zapytaniu do bazy przez phpmyadmin zwraca mi piękny zielony znaczek (IMG:style_emoticons/default/smile.gif) , ale po wykonaniu zapytania na stronie nie zwraca wyników.
  1. echo'<form action="search2.php" method="post">';
  2. echo "<br>wpisz miasto <br>";
  3. echo'<input type="text" name="miasto" id="miasto" value="">';
  4. echo "<br>wpisz imie <br>";
  5. echo'<input type="text" name="imie" id="imie" value=""><br/>';
  6. echo "<br>wpisz materialy <br>";
  7. echo'<input type="text" name="materialy" id="materialy" value=""><br/>';
  8. echo'<input type="submit" name="znajdz" value="znajdz"><br/>';
  9. echo'<input type="reset" value="wyczyść">';
  10. echo'</form>';
  11.  
  12. if(isset($_POST['znajdz']))
  13. {
  14. $miasto = $_POST['miasto'];
  15. $imie = $_POST['imie'];
  16. $materialy = $_POST['materialy'];
  17.  
  18. $wh = array();
  19.  
  20. if (!empty($_POST['miasto']))
  21. $wh[] = "miasto = '$_POST[miasto]'";
  22. if (!empty($_POST['imie']))
  23. $wh[] = "imie = '$_POST[imie]'";
  24. if (!empty($_POST['materialy']))
  25. $wh[] = "materialy = '$_POST[materialy]'";
  26.  
  27. if (!empty($wh))
  28. $where = 'where '.implode(' and ', $wh);
  29. else
  30. $where = '';
  31.  
  32.  
  33. $zapytanie = 'SELECT klienci.klient_id,klienci.imie,klienci.nazwisko,klienci.miasto,details.klient_id
    , details.materialy FROM klienci LEFT OUTER JOIN details ON(klienci.klient_id = details.klient_id) '
    .$where;
  34. $wynik = mysql_query($zapytanie);
  35.  
  36. echo "<table>";
  37. echo "<tr>";
  38. echo "<td> miasto </td>";
  39. echo "<td> imie </td>";
  40. echo "<td> nazwisko </td>";
  41. echo "<td> materialy </td>";
  42. echo "<tr>";
  43. while ($row = mysql_fetch_array ($wynik) )
  44. {
  45. echo "<tr>";
  46. echo "<td>{$row['miasto']}</td>";
  47. echo "<td>{$row['imie']}</td>";
  48. echo "<td>{$row['nazwisko']}</td>";
  49. echo "<td>{$row['materialy']}</td>";
  50. echo "<tr>";
  51. }
  52. echo "</table>";
  53.  
  54.  
  55. }



tzn, jeśli wpisze tylko miasto i imię jest OK , zwraca tak, jak być powinno czyli miasto, imie, nazwisko, materialy.
Ale jeśli uzupełnię również trzecie pole materialy (z tabeli details) to nie wyświetla niczego

Problem rozwiązany.
Nie wyświetlało wyników na stronie, ponieważ w polu 'materialy' nie było pojedynczych słów jak w pozostałych polach, a mogły się znaleść również ciągi znaków oddzielone spacjami, lub przecinkami. Zamieniłam
  1. $wh[] = "materialy = '$_POST[materialy]'";

na
  1. $wh[] = "materialy LIKE '%$materialy%'";


Zapytanie pozostało bez zmian.
Wszystko śmiga aż miło.
Wielkie dzięki za pomoc.

Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 07:31