dj.drezyna Napisano Lipiec 30, 2011 Zgłoś Share Napisano Lipiec 30, 2011 Mam problem z wyszukiwaniem polskich znaków. W tabeli o której mowa jest porównywanie napisów ustawione na latin2_bin. Chciałbym też nadmienić, że phpMyAdmin wyszukuje bezbłędnie np. ś, ę wersja stara (3.3.1) PHP 5.3.6 Mysql 5.5.13 Mam oto taki kod w którym wyszukanie bęben nic nie daje wyniku ale już ben znajduje. I nie ważne czy jest: $nazwa = mysql_real_escape_string(strtoupper($_POST['nazwa'])); //czy $nazwa = mysql_real_escape_string(strtoupper(iconv('utf-8','iso-8859-2',$_POST['nazwa']))); //czy $nazwa = mysql_real_escape_string(strtoupper(iconv('latin2','iso-8859-2',$_POST['nazwa']))); // choć to błędne... //czy usunięta jest deklaracja set_charset A oto pełny kod $baza = mysql_connect('localhost','root','a'); mysql_select_db('magazyn'); mysql_set_charset ('latin2'); if (!empty($_POST)) { $nazwa = mysql_real_escape_string(strtoupper(iconv('utf-8','iso-8859-2',$_POST['nazwa']))); $zapytanie = ' SELECT nazwa FROM produkty WHERE'; if ($_POST['nazwa'] != null) $zapytanie .= " UCASE(nazwa) LIKE '%$nazwa%'"; $wynik = mysql_query($zapytanie,$baza) ?> <p class="p_info">Kryteria spełniają następujące wydziały:</p> <?php } if (mysql_num_rows($wynik) < 1) { ?> <p class="p_info">Niczego nie znaleziono!</p> <?php } ?> <?php while ($wiersz = mysql_fetch_array($wynik)) { echo $wiersz['nazwa'].'<br />'; } mysql_close($baza); ?> <form style="width: 50%" action="temp2.php" id="formik" method="POST"> Nazwa produktu: <input type="text" name="nazwa" /> <input class="przycisk" type="submit" value="Wyszukaj" /> </form> Byłbym wdzięczny za pomoc i wskazanie co tutaj jest nieprawidłowo. pozdrawiam! P.S. Polskie znaki w y ś w i e t l a poprawnie. Galeria przyrodnicza http://fotokrajobrazy.warmia.pl Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Lipiec 31, 2011 Zgłoś Share Napisano Lipiec 31, 2011 Testowałem sobie ;P i zapytam: Czemu tu zmieniasz na iso? skoro baza ma latin2? $nazwa = mysql_real_escape_string(strtoupper(iconv('utf-8','iso-8859-2',$_POST['nazwa']))); zobacz, że to co ja Ci podam działa bez problemu: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php $baza = mysql_connect('localhost','root','qwerty'); mysql_select_db('testowa_baza'); mysql_set_charset ('latin2'); if (!empty($_POST)) { $nazwa = mysql_real_escape_string(strtoupper(iconv('utf-8','latin2',$_POST['nazwa']))); $zapytanie = ' SELECT nazwa FROM produkty WHERE'; if ($_POST['nazwa'] != null) $zapytanie .= " UCASE(nazwa) LIKE '%$nazwa%'"; $wynik = mysql_query($zapytanie,$baza) ?> <p class="p_info">Kryteria spełniają następujące wydziały:</p> <?php } if (mysql_num_rows($wynik) < 1) { ?> <p class="p_info">Niczego nie znaleziono!</p> <?php } ?> <?php while ($wiersz = mysql_fetch_array($wynik)) { echo iconv('latin2','utf-8',$wiersz['nazwa']).'<br />'; // Jezeli kodowanie strony jest inne niz bazy to przy kazdym pobraniu danych musisz konwersje typow zrobic :] } mysql_close($baza); ?> <form style="width: 50%" action="index.php" id="formik" method="POST"> Nazwa produktu: <input type="text" name="nazwa" /> <input class="przycisk" type="submit" value="Wyszukaj" /> </form> Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
dj.drezyna Napisano Lipiec 31, 2011 Autor Zgłoś Share Napisano Lipiec 31, 2011 Ojej niepotrzebnie podawałem te utf-8. Po prostu mówię, że próbowałem już wszystkiego. Ja korzystam z iso-8859-2, cała strona na tym jest. I jak mówisz zrobiłem analogicznie, czyli: $nazwa = mysql_real_escape_string(strtoupper(iconv('iso-8859-2','latin2',$_POST['nazwa']))); razem z deklaracją, której i wcześniej używałem, czyli <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> I dalej nic nie działa, czyli po wpisaniu frazy bez polskich znajduje a z ś np. nie znajdzie Taśma. Jeszcze powiem, że zrobiłem test co on takiego widzi przed konwersją i po niej i zrobiłem: echo '<br />'.$_POST['nazwa'].'<br />'; $nazwa = mysql_real_escape_string(strtoupper(iconv('iso-8859-2','latin2',$_POST['nazwa']))); echo '<br />'.$nazwa.'<br />'; Wynik był szokujący: po wpisaniu w inputa ś wyświetlił w obu przypadkach... ś Więc czemu w bazie nie znajduje? Szok jeszcze większy wpisałem w inputa bęben to w pierwszy wyrzuciło bęben a w drugim BęBEN i już wiadomo dlaczego nie znajduje, bo UCASE podniesie do drukowanych wszystkie litery, funkcja php tylko alfabetu łacińskiego, SZOK!! I co teraz jak zmusić php by ponosił do wielkich liter też polskie znaki? Bo ja tylko ten sposób znam by wyszukiwał bez znaczenia na wielkość znaków, czyli podnieść wszystkie na duże i w bazie też użyć UCASE. A i dziękuję za odpowiedź! Galeria przyrodnicza http://fotokrajobrazy.warmia.pl Link do komentarza Udostępnij na innych stronach More sharing options...
dj.drezyna Napisano Lipiec 31, 2011 Autor Zgłoś Share Napisano Lipiec 31, 2011 Czasami człowiekowi jest potrzebna pewna iskra lub wskazówka niekoniecznie bezpośrednia... Tak było w tym przypadku, dzięki za pomoc spike! Poczytałem sobie o funkcji strtouppper i okazało się że narodowych znaków nie powiększa, w przeciwieństwie do funkcji mb_convert_case gdzie ę zmienia się na Ę ó na Ó i tak dalej. Myślę, że zawarte tu uwagi pomogą innym a Tobie spike proponuję sprawdzić, czy ten skrypt z uteefem poszedł jeżeli były znaki ś lub ą w inpucie Pozdr, Galeria przyrodnicza http://fotokrajobrazy.warmia.pl Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Lipiec 31, 2011 Zgłoś Share Napisano Lipiec 31, 2011 Powiem tak, mi skrypt działa prawidłowo z każdyą polską literką. Najnowszy serwer z php instalowany specjalnie dla Twojego przykładu. Dziwne Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
dj.drezyna Napisano Lipiec 31, 2011 Autor Zgłoś Share Napisano Lipiec 31, 2011 Może to kwestia utf-8, poza tym to w dokumentacji funkcji strtoupper() na php.net wyraźnie napisali, że znaki narodowe nie są zwiększane do drukowanych liter. Galeria przyrodnicza http://fotokrajobrazy.warmia.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.