Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Nie poprawnie działające wyszukiwanie.
Forum PHP.pl > Forum > Przedszkole
Rookie
Witam,
Wczoraj zrobiłem temat z 3 zagadnieniami (w tym z tym pytaniem), lecz akurat na to nikt nie odpowiedział więc robię do tego oddzielny temat.
Mam plik search.php:
  1. <form action="search.php?" method="GET">
  2. <fieldset style="width: 580px;">
  3. <legend>Szukaj</legend>
  4. <table>
  5. <tr>
  6. <td><input type="text" name="szukaj" style="width: 350px;"></td>
  7. <td><input type="submit" value="Szukaj"></td>
  8. <?php
  9. if(isset($_GET['szukaj'])) {
  10. if(strlen($_GET['szukaj']) < 1) $blad = 'Wpisz szukaną frazę';
  11. $zapytanie="SELECT * FROM filmy WHERE tytul LIKE \"%$szukaj%\"";
  12. $temp=mysql_query($zapytanie) or die("Wystąpił błąd");
  13. $ile=mysql_num_rows($temp);
  14. if ($ile < 1) $blad = 'Nic nie znaleziono';
  15. echo "<td><span style='color: #FF0000'>$blad</span></td>";
  16. }
  17. ?>
  18. </tr>
  19. </table>
  20. </fieldset>
  21. </form>
  22. <?php
  23. if(isset($_GET['szukaj'])) {
  24. $szukaj=mysql_real_escape_string(trim($_GET['szukaj']));
  25. $blad='';
  26. if(strlen($_GET['szukaj']) < 1) $blad = 'Wpisz szukaną frazę';
  27. if($blad=='') {
  28. $zapytanie="SELECT * FROM filmy WHERE tytul LIKE \"%$szukaj%\"";
  29. $temp=mysql_query($zapytanie) or die("Wystąpił błąd");
  30. $ile=mysql_num_rows($temp);
  31. if ($ile > 1) { ?>
  32. <table cellspacing="0" cellpadding="0" border="1" width="100%" style="border-style: none;" align="center" class="trescc">
  33. <tr>
  34. <td valign="top" class="trescc">
  35. <b>Nr</b>
  36. </td>
  37. <td valign="top" class="trescc">
  38. <b>Tytuł</b>
  39. </td>
  40. <td valign="top" class="trescc">
  41. <b>Ilość</b>
  42. </td>
  43. <td valign="top" class="trescc">
  44. <b>Pochodzenie</b>
  45. </td>
  46. <td valign="top" class="trescc">
  47. <b>Typ</b>
  48. </td>
  49. <td valign="top" class="trescc">
  50. <b>Rodzaj/Seria</b>
  51. </td>
  52. </tr>
  53. <tr>
  54. <?php
  55. $mysql=mysql_query("SELECT * FROM `filmy` WHERE `tytul` LIKE \"%$szukaj%\" ORDER by `tytul`") or die (mysql_error());
  56. $nr = 1;
  57. while ($nr <= $ile) {
  58. while($szukane = mysql_fetch_assoc($mysql)) {
  59. echo '
  60. <td valign="top" class="trescc">
  61. '.$nr.'
  62. </td>
  63. <td valign="top" class="trescc">
  64. '.$szukane[tytul].'
  65. </td>
  66. <td valign="top" class="trescc">
  67. '.$szukane[ilosc].'
  68. </td>
  69. <td valign="top" class="trescc">
  70. '.$szukane[pochodzenie].'
  71. </td>
  72. <td valign="top" class="trescc">
  73. '.$szukane[typ].'
  74. </td>
  75. <td valign="top" class="trescc">
  76. '.$szukane[rodzaj].'
  77. </td>
  78. </tr>';
  79. $nr += 1;
  80. }
  81. }
  82. ?>
  83. </table>
  84. <?php
  85. }
  86. }
  87. }
  88. ?>

I wyszukiwanie nie działa poprawnie, po wpisaniu jednej litery od jakiegoś filmu, czasami znajduje filmy z tą literą, lecz po wpisaniu np. "czerwony" od czerwonego października, albo "ekipa", oczywiście od ekipy biggrin.gif, w adresie owszem pokazuje się tak jak powinno
Cytat
?szukaj=ekipa
lecz strona jest tak jakby tego dopisku nie było, gdy wpisze się np. "kjsdbvnjk", jest jak powinno, czyli wyświetla się napis "Nic nie znaleziono", a po wpisaniu ekipa jest tak jakby,m dopiero co otworzył stronę. Co mogę zrobić, żeby było normalnie?
ziqzaq
Witam.
Dwa pytanka.
Dlaczego pobierasz trzy razy to samo (chyba, że czegoś nie widzę - ciężko się czyta kod bez indentacji dry.gif )?
  1. $zapytanie="SELECT * FROM filmy WHERE tytul LIKE \"%$szukaj%\"";
  2. $temp=mysql_query($zapytanie) or die("Wystąpił błąd");
  3. //...
  4. $zapytanie="SELECT * FROM filmy WHERE tytul LIKE \"%$szukaj%\"";
  5. $temp=mysql_query($zapytanie) or die("Wystąpił błąd");
  6. //...
  7. $mysql=mysql_query("SELECT * FROM `filmy` WHERE `tytul` LIKE \"%$szukaj%\" ORDER by `tytul`") or die (mysql_error());

Poniższy kod to twoja sprawka czy bbcode na forum?
  1. $szukane[tytul]
  2. // itd.


// Edit
Jeszcze jedno (11 linia):
  1. $zapytanie="SELECT * FROM filmy WHERE tytul LIKE \"%$szukaj%\"";

(24 linia)
  1. $szukaj=mysql_real_escape_string(trim($_GET['szukaj']));

Skąd ci się bierze to $szukaj w zapytaniu?
Rookie
1 zapytanie jest po to, żeby sprawdzić błędy i je wyświetlić,
2 zapytanie po to, żeby w przypadku wystąpienia błędu, nie dopuścił do dalszego wykonania kodu ;p
3 zapytanie już do właściwego wykonania a następnie wyświetlenia szukanych fraz
Mówię o błędach oczywiście w użytkowaniu, tzn nie wpisanie niczego, lub wpisanie nazwy, której w bazie nie ma (Nic nie znaleziono)

  1. $szukane[tytul]

to mój zapis, napewno jest poprawny, takla jest budowa mysql_fetch_assoc
ziqzaq
Sorry, ale ja pobrałbym raz wyniki zapytania i na nich operował, a nie pobierał ich za każdym razem... jak chcesz.
Próbowałeś po linii 58 dać np. "print_r($szukane);" żeby zobaczyć czy cokolwiek dostajesz?
Czy zmienna $ile pokazuje coś, sprawdzałeś ją (np. echo "Ilość wyników: " .$ile; )?

Co do tego: "to mój zapis, napewno jest poprawny".
Ja po takim kodzie:
  1. $a = array( 'b' => 1 );
  2. echo $a[b];

dostaję w php "Notice: Use of undefined constant b...", więc - nie zgodzę się z Tobą.
Rookie
ziqzaq, poducz się trochę więcej zanim zdecydujesz się mi pomóc w problemie, w którym nie do końca rozumiesz wszystkie funkcje.
Poszperaj w manualu trochę, np. tu: http://pl2.php.net/manual/pl/function.mysql-fetch-assoc.php , a dowiesz się dlaczego akurat to jest poprawne
ziqzaq
Przestań się rzucać i popatrz na zagadkę.
Znajdź różnice.
To jest z manuala:
  1. echo $row["id_uzytkownika"];

A tak ma być wg. Ciebie:
  1. echo $row[id_uzytkownika];

Poprawnie, czy nie, o to jest pytanie.
Polecam ustawić
error_reporting(E_ALL);
ini_set('display_errors', '1');
Pozdr.

PS. I nie odpowiedziałeś na moje pytania.
// edit: literówka
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.