Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Duże i małe litery na róni
WEC_26
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 23.08.2006

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


Mam skrypt wyszukiwarki oparty na mysql. Oto kawałek kodu:
  1. <?php
  2. $q = $_POST[szukane_slowo];
  3. $SQL = "SELECT * FROM szukaj WHERE opis LIKE '%$q%'";
  4. $RES = mysql_query($SQL);
  5. list($iloscWpisow) = mysql_fetch_row($RES);
  6. while($AFR = mysql_fetch_assoc($RES)){
  7. echo '<b>Tytol</b>: <a href="'.$AFR['url'].'">'.str_replace($q, "<b>$q</b>", $AFR['tytol']).'</a><br />'."n";
  8. echo '<b>Opis</b>: '.str_replace($q, "<b>$q</b>", $AFR['opis']).'<br />'."n";
  9. echo '<small>Url: '.str_replace($q, "<b>$q</b>", $AFR['url']).'</small<br /><br />'."n";
  10. }
  11. ?>


Problem tkwi w tym, że dla serwera szukane słowo np."Szukaj" i "szukaj" to całkiem inne wyrazy, czyli traktuje duże i małe litery jako osobne.

Co zrobić, aby duże litery i małe traktowane były tak samo, czili po wpisaniu "Szukaj" znajdowało także rekordy "szukaj" oraz "SzUkAj"??
Go to the top of the page
+Quote Post
myth
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006

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


Sprawdz jeszcze raz. Powinno dobrze wyswietlac.

Sytuacja, ktora opisales mialaby miejsce jakbys dal w zapytaniu:
  1. <?php
  2. $SQL = "SELECT * FROM szukaj WHERE opis LIKE BINARY '%$q%'";
  3. ?>


Poza tym pisze sie tytuł, a nie tytół.

Ten post edytował myth 26.09.2006, 18:45:15
Go to the top of the page
+Quote Post
Skobi
post
Post #3





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


ja robie to tak, co prawda w postgresie natomiast powinno to zadzialac rowniez pod mysql:

  1. SELECT * FROM test WHERE lower(name) = lower('KAZIK');


bądź tak:

  1. SELECT * FROM test WHERE lower(name) LIKE LOWER('%KAZ%');
Go to the top of the page
+Quote Post
myth
post
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006

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


Autorowi tematu zapewne chodzilo o prawidlowe pogrubenie slowa kluczowego w wyszukanym tekscie, o czym nie napisal, bo SQL wyswietla wszystko ok. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dzieje sie tak, bo w wyrazeniach regularnych wielkosc liter jak najbardziej ma znaczenie i str_replace nie zamieni nam wyrazu "szukaj" na "<b>szukaj</b>" gdy podamy string "SzUkaJ", a zwroci wartosc false.

Zamiast:
  1. <?php
  2. str_replace($q, "<b>$q</b>", $AFR['opis'])
  3. ?>


Proponuje dac np:
  1. <?php
  2. str_replace(strtolower($q), "<b>$q</b>", strtolower($AFR['opis']))
  3. ?>
Go to the top of the page
+Quote Post
WEC_26
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 23.08.2006

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


myth miał rację. Wszystko popsół str_replace w 'podstawowej' wersji. zmieniłem to zgodnie z zaleceniami myth i jest prowie wszystko ok. Jest taki 1 mały minus.

Wpisując "SzUkAj" w wynikach wyszukiwania zostało poprawnie znalezione i pogrubione, ale zamiast 'zostawic' wielkość liter w spokoju i tylko pogrubić, funkcja zmieniła także wielkość liter i terez zamiast "Prosty tekst ze słowem szukaj." jest "Prosty tekst ze słowem SzUkAj."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 23:40