Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]prosty skrypt wyszukiwania
RaiZeN
post 14.11.2015, 23:17:07
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 4
Dołączył: 6.03.2014
Skąd: Suwałki

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


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?

Ten post edytował RaiZeN 14.11.2015, 23:22:41
Go to the top of the page
+Quote Post
olszam
post 14.11.2015, 23:32:25
Post #2





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


Like %costam%, może tak spróbuj?
Go to the top of the page
+Quote Post
RaiZeN
post 14.11.2015, 23:37:41
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 4
Dołączył: 6.03.2014
Skąd: Suwałki

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


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?
Go to the top of the page
+Quote Post
Rysh
post 14.11.2015, 23:47:09
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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


--------------------
Go to the top of the page
+Quote Post
RaiZeN
post 14.11.2015, 23:58:04
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 4
Dołączył: 6.03.2014
Skąd: Suwałki

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


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
Go to the top of the page
+Quote Post
Rysh
post 15.11.2015, 12:21:24
Post #6





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


wyświetl na koniec co masz w zmiennej $sql i zmień, tak aby wynik zwracał to co chcesz.


--------------------
Go to the top of the page
+Quote Post
RaiZeN
post 15.11.2015, 13:21:50
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 4
Dołączył: 6.03.2014
Skąd: Suwałki

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


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
Go to the top of the page
+Quote Post
olszam
post 15.11.2015, 23:46:20
Post #8





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


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.
Go to the top of the page
+Quote Post
Tomplus
post 16.11.2015, 08:20:07
Post #9





Grupa: Zarejestrowani
Postów: 1 836
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


nie działa? a wyświetlałeś sobie wartość zmiennej $sql przez mysql_query?
Go to the top of the page
+Quote Post
RaiZeN
post 17.11.2015, 19:20:48
Post #10





Grupa: Zarejestrowani
Postów: 112
Pomógł: 4
Dołączył: 6.03.2014
Skąd: Suwałki

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


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
Go to the top of the page
+Quote Post
olszam
post 17.11.2015, 21:26:46
Post #11





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


na lokalnym czy na jakimś darmowym serwerze to testujesz?
Go to the top of the page
+Quote Post
bobek358
post 17.11.2015, 21:49:05
Post #12





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


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
Go to the top of the page
+Quote Post
andrew654
post 17.11.2015, 22:48:03
Post #13





Grupa: Zarejestrowani
Postów: 35
Pomógł: 9
Dołączył: 16.11.2012

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


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?
Go to the top of the page
+Quote Post
RaiZeN
post 18.11.2015, 16:23:28
Post #14





Grupa: Zarejestrowani
Postów: 112
Pomógł: 4
Dołączył: 6.03.2014
Skąd: Suwałki

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


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
Go to the top of the page
+Quote Post
tenloginjestzaje...
post 18.11.2015, 16:31:01
Post #15





Grupa: Zarejestrowani
Postów: 358
Pomógł: 1
Dołączył: 20.07.2014

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


Witaj
sprawdź link w mojej stopce.


--------------------
Nigdy nie zapominam kliknąć "pomógł". Zastosowanie na stronie [prosze nie spamuj]
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: 24.04.2024 - 20:22