Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]prosty skrypt wyszukiwania
Forum PHP.pl > Forum > Przedszkole
RaiZeN
także napisalem sobie taki skrypt wyszukiwania:
  1. $text = trim($_GET["text"]);
  2. $text = strip_tags($text);
  3.  
  4. if (!preg_match('/[^A-Za-z0-9]/', $text))
  5. {
  6.  
  7. $conn = new mysqli($servername, $username, $password, $dbname);
  8.  
  9. if ($conn->connect_error)
  10. {
  11. if($settings['debug']=='0')
  12. {
  13. die("(3) Connection failed: Contact administrator for more info.");
  14. }
  15. elseif($settings['debug']=='1')
  16. {
  17. die("(3) Connection failed: ".$conn->connect_error);
  18. }
  19. }
  20.  
  21.  
  22. $sql = "SELECT * FROM posts WHERE title LIKE '%".$text."'";
  23. $result = $conn->query($sql);
  24.  
  25. if ($result->num_rows > 0)
  26. {
  27. while($row = $result->fetch_assoc())
  28. {
  29. post($row['title'], $row['author'], $row['date'].', '.$row['hour'], $row['img'], $row['id']);
  30. }
  31. }
  32. else
  33. {
  34. echo "<h3>Couldn't find anything.</h3>";
  35. }
  36.  
  37. $conn->close();
  38. }


Screen z bazy: http://scr.hu/3h2l/kq2l6

ale działa on tylko czasami, nie tak jak powinien, tzn:
-nie dziala gdy wpisze dokladnie taka sama nazwe jaka jest w bazie (np. Virtus.Pro vs Fnatic)
-dziala gdy wpisze jedno slowo (np. Fnatic)
-nie dziala gdy wpisze "test" lub "test title"

// edit: gdy wpisze dokladnie taki sam tytul jaki jest w bazie nie zwraca nic, gdy wpisze cokolwiek niepowiazanego zwraca "couldnt find anything"


ktos wie o co chodzi?
olszam
Like %costam%, może tak spróbuj?
RaiZeN
Cytat(olszam @ 14.11.2015, 23:32:25 ) *
Like %costam%, może tak spróbuj?


dzieki, zmienilem i dziala wszystko oprocz wyszukiwania wiecej niz jednego wyrazu i znaków specjalnych (#, $ itp).
jakas rada na to?
Rysh
Cytat(RaiZeN @ 14.11.2015, 23:37:41 ) *
dzieki, zmienilem i dziala wszystko oprocz wyszukiwania wiecej niz jednego wyrazu i znaków specjalnych (#, $ itp).
jakas rada na to?

Musisz explodować to co masz w zmiennej i napisać odpowiedni warunek z użyciem OR
RaiZeN
Cytat(Rysh @ 14.11.2015, 23:47:09 ) *
Musisz explodować to co masz w zmiennej i napisać odpowiedni warunek z użyciem OR


  1. $keys = explode(" ", $text);
  2.  
  3. $sql = "SELECT * FROM posts WHERE title LIKE '%$text%'";
  4.  
  5. foreach($keys as $k)
  6. {
  7. $sql .= " OR title LIKE '%$k%' ";
  8. }


cos takiego? niestety nie dziala
Rysh
wyświetl na koniec co masz w zmiennej $sql i zmień, tak aby wynik zwracał to co chcesz.
RaiZeN
Zapytanie ma formę taka: SELECT * FROM posts WHERE title LIKE '%test title%'
Po wpisaniu tego w phpmyadmin zwraca wszystko jak powinno, ale w php nie zwraca juz nic
olszam
Spróbuj przetestować samo zapytanie w jakimś innym skrypcie(po prostu zwykły kod na wyświetlenie danych z zapytania) by zwróciło ci jakiś wynik, jak zwróci to znaczy że gdzieś w twojej wyszukiwarce coś musisz mieć źle.
Tomplus
nie działa? a wyświetlałeś sobie wartość zmiennej $sql przez mysql_query?
RaiZeN
Cytat(Tomplus @ 16.11.2015, 08:20:07 ) *
nie działa? a wyświetlałeś sobie wartość zmiennej $sql przez mysql_query?


jezeli dobrze zrozumialem to tak, zapytanie wyglada tak: SELECT * FROM posts WHERE title LIKE '%test title%'
wpisane w phpmyadmin dziala dobrze, ale nawet na sucho w php juz nie
olszam
na lokalnym czy na jakimś darmowym serwerze to testujesz?
bobek358
Zrób tak, zamiast:

  1. $result = $conn->query($sql);


daj

  1. $result = $conn->query($sql)
  2. if (!$result)) {
  3. printf("Error: %s\n", $conn->error);
  4. }


i będziesz miał co powoduje błąd
andrew654
Cytat(RaiZeN @ 17.11.2015, 19:20:48 ) *
jezeli dobrze zrozumialem to tak, zapytanie wyglada tak: SELECT * FROM posts WHERE title LIKE '%test title%'
wpisane w phpmyadmin dziala dobrze, ale nawet na sucho w php juz nie


Wpisujesz tam polskie znaki? Jakie masz kodowanie z bazą danych ustawione?
RaiZeN
Ok, glupia sprawa - problem powodowala linia if (!preg_match('/[^A-Za-z0-9]/', $text)), do ktorej nie dodalem spacji biggrin.gif w kazdym razie dzieki za pomoc wszystkim
tenloginjestzajety
Witaj
sprawdź link w mojej stopce.
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.