Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyszukiwarka PHP
Forum PHP.pl > Forum > Przedszkole
troian
Witam potrzebuję dopisać wyszukiwarkę do strony, długo myślałem jak to wymyślić aby działało, i wpadłem na taki oto pomysł

Zostanie dodana nowa tabelka o nazwie TAGI w której będą słowa klucze przedzielone przecinkami lub innym znakiem który będzie dzielił słowa,
Będą one zapisywane bez polskich znaków i wszystkie z małej litery. Moje pytanie jest takie czy jest możliwość napisać w php taki skrypt
który będzie sprawdzał pojedyncze słowa z danej kolumny, czyli:
Przykład:

| ID_KOLUMNY | NAZWA | TAGI |
------------------------------------------------------
| 1 | nazwa 1 | test1, test2, test3 |
------------------------------------------------------
| 2 | nazwa 2 | test3 |
------------------------------------------------------
| 3 | nazwa 3 | test2 |
------------------------------------------------------

Jeżeli w wyszukiwarce wprowadzę słowo test1 pokaże tylko 1 rekord,
Jeżeli wpiszę test2 pokażę rekord 1 i 3
oraz jeżeli wpiszę test1 test2 test3 to pokażę wszystkie rekordy.

Jest możliwość napisania czegoś takiego?
nospor
Po pierwsze masz złą strukture. Ma byc taka:
TWOJA_TABELA_DO_KTOREJ_CHCESZ_PODCZEPIAC_TAGI
ID
BLA1
BLABLA2

Tabela TAG
ID
NAZWA - nazwa tagu

Tabela wiążać TAG z TABELA GLOWNA
ID_TABELA_GLOWNA
ID_TAG.

I tak, jest mozliwe zrobienie tego co chcesz
troian
Cytat(nospor @ 11.09.2014, 12:31:04 ) *
Po pierwsze masz złą strukture. Ma byc taka:
TWOJA_TABELA_DO_KTOREJ_CHCESZ_PODCZEPIAC_TAGI
ID
BLA1
BLABLA2

Tabela TAG
ID
NAZWA - nazwa tagu

Tabela wiążać TAG z TABELA GLOWNA
ID_TABELA_GLOWNA
ID_TAG.

I tak, jest mozliwe zrobienie tego co chcesz


Mam pobierać dane z dwóch tabel Tak ? Dobrze zrozumiałem... ?
nospor
Jesli w wyszukiwarce bedziesz podawal nazwe tagu, a nie jego ID, to masz pobierac dane z trzech tabel.
troian
Cytat(nospor @ 11.09.2014, 12:34:20 ) *
Jesli w wyszukiwarce bedziesz podawal nazwe tagu, a nie jego ID, to masz pobierac dane z trzech tabel.


No Ok to już rozumiem, ale jak zrobić aby on pomijał frazy przed i za bo jak ktoś wpisze TEST2 a w tabeli będzie TEST1, TEST2, TEST3 to zwróci mi brak.
nospor
No widzisz, jednak nie rozumiesz....

Po to powstala tabela wiążąca by w jednym rekordzie byl tylko jeden TAG a nie kilka po przecinkach.
phpkos
@troian w bazach danych występuje takie pojęcie jak normalizacja. Proces ten przeprowadził nospor i przedstawił Ci jego wynik. Doprowadził strukturę bazy danych do 3 postaci normalnej.
Poczytaj o tym TU, być może troszkę Ci się rozjaśni w jaki sposób powinieneś do tego podejść.
troian
Cytat(phpkos @ 11.09.2014, 12:42:39 ) *
@troian w bazach danych występuje takie pojęcie jak normalizacja. Proces ten przeprowadził nospor i przedstawił Ci jego wynik. Doprowadził strukturę bazy danych do 3 postaci normalnej.
Poczytaj o tym TU, być może troszkę Ci się rozjaśni w jaki sposób powinieneś do tego podejść.



Dobra to otakowanie dajmy na 2 Tor [ zaraz to poczytam ] Teraz moje pytanie jest takie czy ów skrypt jest napisany prawidłowo:

  1. <?php
  2. if(isset($_POST['submit']) && $_POST['submit'] == 'Szukaj') {
  3. mysql_connect(Tutaj dobre dane :));
  4. $szukaj=$_POST['szukaj'];
  5. $wyniki=explode(" ",$szukaj);
  6. $warunki=" (nazwa LIKE '%$wyniki[0]%' || miejscowosc LIKE '%$wyniki[0]%')";
  7. for ($i=1;$i<count($wyniki);$i++)
  8. {
  9. $warunki.=" and (tytul LIKE '%$wyniki[$i]%' || wstep LIKE '%$wyniki[$i]%' || tresc LIKE '%$wyniki[$i]%')";
  10. }
  11. $query="SELECT * FROM elcommpc_chata.ogloszenia WHERE $warunki ";
  12. $result = MYSQL_QUERY($query);
  13.  
  14. echo $query;
  15. }
  16. ?>
  17. <table>
  18. <form name="form1" method="post" action="wysz.php">
  19. <tr>
  20. <td>Wpisz szukane słowo lub frazę</td>
  21. </tr>
  22. <tr>
  23. <td>
  24. <input type="text" name="szukaj" size="20" >
  25. </td>
  26. </tr>
  27. <tr>
  28. <td>
  29. <input type="submit" name="submit" value="Szukaj">
  30. </td>
  31. </tr>
  32. </form>
  33. </table>
phpkos
Cytat(troian @ 11.09.2014, 12:47:31 ) *
Dobra to otakowanie dajmy na 2 Tor [ zaraz to poczytam ] Teraz moje pytanie jest takie czy ów skrypt jest napisany prawidłowo:


Pff ... skoro pomoc i nakierowanie na zrozumienie problemu nazywasz atakowaniem facepalmxd.gif
To przepraszam, że zainteresowałem się Twoim tematem.

Pozdrawiam.
nospor
Jest totalnie podatny na SQLInjection.



@phpkos jemu nie chodzilo o atakowanie a o otagowanie wink.gif
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.