Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka (MYSQL) + polskie znaki :/
Forum PHP.pl > Forum > PHP
seba22
Witam,

Jestem na etapie budowania wyszukiwarki z bazy MYSQL, odnośnie nazwy którą wprowadzi użytkownik.

No i kurka wodna, zagrepsowałem się, bo daje w selecta zmienną pobraną, oczywiście wyczyszczoną z wszystkiego co niebezpieczne, no i jest problem.

User może wpisać jakiś wyraz z polskim znakiem żźćąę a np osoba która dodawała wpis nie dodałą polskiego znaku i zastapila go zcaea winksmiley.jpg)

No i teraz w takim wypadku wyszukiwarka nie zadziałą....

Nie ma jakiegoś pomysłu, wiem że można by usunąć polskie znaki w ogóle przy dodawaniu do bazy SQL (przez pierwszego usera, ale wyjdzie to dosyć nie poważnie).

Więc co tu zrobić żeby jakoś nie wiem coś tak pokombinować żeby wyszukało jak facet wpisze żmija to zwrócilo żmija oraz zmija ( bez ż i z ż ).

Wiecie na wypadek gdyby dodawający użytkownik nie napisał z jakiegoś powodu poprawnie... sami wiecie że to się zdaża... jeden ma linuxa, jeden ma unixa, inny ma windows, jeden pracuje na tekstowej przegladarce, inny w konsoli, inny na telefonie... trzeba pomyśleć o nich... i nie odcinać im dostępu do danych...


Jeżeli ktoś ma jakiś pomysł to walcie, jestem otwarty, siedzę i po prostu zróbmy to dzisiaj winksmiley.jpg)

Do it, today winksmiley.jpg
blooregard
Problem skomplikowany bardzo. Bo np. jak odróżnisz, co użytkownik miał na mysli wpisując w wyszukiwarkę "skora" ?

Szuka BMW z tapicerką w "skórze" czy osoby, która jest "skora" do współpracy ? smile.gif

Chyba że jesteś w stanie napisać wyszukiwarkę czytającą w myślach. smile.gif

Jak dla mnie - nie do obejścia. Musisz liczyc na rozsądek osób wprowadzających dane (że nie zapomną o ogonkach i nie będą ci dodawać tekstów w stylu: zolta zaba zarla zur smile.gif  )
dr_NO
Hmm,
Można zrobić trochę nieelegancko, i/lub generalnie na około, nie wykluczając błędów, ale ...
Utworzyć w bazie dodatkowe pole (nazwijmy to "bez_pl" czy jakoś tak) i teraz podczas dodawania nowej treści niech
skrypt doda dwa wpisy do bazy, jeden normalny, i jeden "wypatroszony" z polskich znaków, pomocne okaże się str_replace i tablice.
Po przycisku submit, skrypt sprawdza czy w szukanej frazie są polskie ogonki, jeżeli są to najpierw szukaj w polu "z ogonkami", jeżeli zaś nie, to wypatrosz ponownie tym razem szukaną treść, i poszukaj w polu "bez_pl" .
FANGTA
Ja mam pewien pomysł może być dla ciebie dobry, albo i nie ale to nie ważne + musiałbyś poszukać do tego odpowiedniej metody zmianiającej np. żmija na zmija czyli zamienianie np. takich znaków: (ż, ź, ć) na takie (z,z,c), odrazu mówie że nie wiem czy to jest możliwe!!, to tylko był przykład powinien to załatwić prosty skrypcik odtwarzający treść w zmiennej do której jest przypisane ten wyraz i np. zwykłę czyli to co naprawde wpisał np. "żmija" będziesz miał w $_POST[wyszukiwarka]; a to ze zmienionymi znakami to w innej zmiennej która by sie równała przepuszczonej zmiennej przez odpowiedni skrypt: np.

Kod
$zmienna_do_przepuszczenia = $_POST[wyszukiwarka];
  
  -------tutaj odpowiednie sprawdzenia if albo cośw tym rodzaju sprawdzające czy w zmiennej znajduje sie taka litera i zamienianie np. "ż" na "z"----------
  
  //Tutaj zapytania sql:
  
      //Normalne tzn. z np. ż,ź,ć itd.
  $query = mysql_query("select * from `tutaj wpisz nazwe tabeli` where `tutaj nazwe pola z tabeli`='$_POST[wyszukiwarka]' ORDER BY `tutaj wpisz wg. jakiego pola chcesz sortować` i dodaj ASC LUB DESC(malejące lub rosnące)");
  
  while($rekord = mysql_fetch_array($query)){
  $wyniki .= ' ' // w tej zmiennej pobierz odpowiednio dane itd. wg. swoich upodobań i pól w tabeli
  }
  
      //Dodatkowe tzn. z z,z,c zamiast np. ż,ź,ć
  $query2 = mysql_query("select * from `tutaj wpisz nazwe tabeli` where `tutaj nazwe pola z tabeli`='$zmienna_do_przepuszczenia' ORDER BY `tutaj wpisz wg. jakiego pola chcesz sortować` i dodaj ASC LUB DESC(malejące lub rosnące)");
  
   while($rekord2 = mysql_fetch_array($query2)){
   $wyniki2 .= ' ' // w tej zmiennej pobierz odpowiednio dane itd. wg. swoich upodobań i pól w tabeli
   }
  
  echo $wyniki; //wyświetlanie normalnych wyszukiwań z np. ż,ź,ć
  echo $wyniki2; //wyświetlanie dodatkowych z np. z,z,z zamiast ż,ź,ć


PS. odrazu mówie że z zabezpieczeniami jeszcze sie za bardzo nie bawiłem więc jeśli chodzi o to to ty sobie sam musisz zabezpieczyć ja tylk odaje przykład mojego pomysłu;)

ok znalazłem coś odpowiedniego dla ciebie jeśli chodzi o taką zamiane poczytaj sobie temat z tego linka:

http://www.forum.optymalizacja.com/lofiver...php/t41153.html

a jak nie chce ci sie wchodzić to tutaj masz kod:

Kod
<?php
   $tekst = 'Zażółć gęślą jaźń';
   $wynik = strtr($tekst, 'ĘÓĄŚŁŻŹĆŃęóąśłżźćń', 'EOASLZZCNeoaslzzcn');
   echo($wynik);
?>
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.