Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Alfabetyczne sortowanie a polskie znaki
Forum PHP.pl > Forum > Przedszkole
Rookie
Witam,
Gdy dodaję na stronie wpisy do tabeli mysql z polskimi znakami, do bazy zapisywane są zamiast nich "krzaczki".
Podczas odczytywania ich z bazy, na stronie na szczęście pokazują się polskie znaki smile.gif.
Jednak niestety, kiedy włączam sortowanie alfabetyczne wpisów w tabeli w polu "tytul" mam np 6 a,b,c,p,ś,z(alfabetycznie)
i je wyświetlę, to ładnie sortuje alfabetycznie, ale jak na początku tytułu jest polski znak, to wywala go do przodu, czyli: ś,a,b,c,p,z
Mogę jakoś zrobić, aby polskie znaki były, że tak powiem, na swoim miejscu?
Wiem, jest temat, jak zrobić polskie znaki w bazie, ale mam wszystko jak trzeba.
Oto skrypt odczytujący dane z tabeli mysql i sortujący je alfabetycznie:
  1. <?php
  2. require('conn.php');
  3. $sql=mysql_query("SELECT * FROM filmy ORDER BY tytul") or die(mysql_error());
  4. $ile=mysql_num_rows($sql);
  5. $nr = 1;
  6. while ($nr <= $ile)
  7. {
  8. while($dane = mysql_fetch_assoc($sql)) {
  9. echo '
  10. <tr>
  11. <td valign="top" class="trescc">
  12. '.$nr.'
  13. </td>
  14. <td valign="top" class="trescc">
  15. '.$dane[tytul].'
  16. </td>
  17. <td valign="top" class="trescc">
  18. '.$dane[ilosc].'
  19. </td>
  20. <td valign="top" class="trescc">
  21. '.$dane[pochodzenie].'
  22. </td>
  23. <td valign="top" class="trescc">
  24. '.$dane[typ].'
  25. </td>
  26. <td valign="top" class="trescc">
  27. '.$dane[rodzaj].'
  28. </td>
  29. </tr>';
  30. $nr += 1;
  31. }
  32. ;}
  33. ?>
jmail
a ten plik conn php można obejrzeć? w jakim kodowaniu masz pliki? jakie kodowanie jest w bazie? jakie kodowanie masz ustawione na połączeniu?
marian2299
Cytat
na początku tytułu jest polski znak, to wywala go do przodu,

To chyba dobrze.
kfc4
Dokładnie, musisz się zdecydować na jedno kodowanie. Baza, dodawanie do bazy, wyciąganie z bazy, wyświetlanie oraz kod HTML musi być w jednym kodowaniu. Osobiście polecam utf-8.
erix
Cytat
i je wyświetlę, to ładnie sortuje alfabetycznie, ale jak na początku tytułu jest polski znak, to wywala go do przodu, czyli: ś,a,b,c,p,z

Ustaw kodowanie dla kolumny utf8_polish_ci, wtedy po polskich krzakach będzie sortowało poprawnie.
Rookie
mam utf_polish_ci
a w htmlu mam tak:
  1. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />

Mam nadzieję, że dobrze, ktoś prosił o conn.php, więc proszę:
  1. <?php
  2. define('DB_HOST','localhost');
  3. define('DB_USER','user'); //wpisz nazwę użytkownika bazy danych
  4. define('DB_PASS','haslo'); //wpisz hasło dla tego użytkownika
  5. define('DB_DB','baza');
  6.  
  7. $connect = mysql_connect(DB_HOST, DB_USER, DB_PASS)
  8. OR die('Nie udało połączyc się z bazą danych. '.mysql_error());
  9.  
  10. mysql_select_db(DB_DB,$connect)
  11. ?>
Fifi209
Zmieniasz kodowanie pliku na utf-8 (ściągnij notepad++ i zapisz w kodowaniu utf-8 bez BOM)
W meta też ustawiasz utf-8

i przy połączeniu używasz: mysql_set_charset
Rookie
Czyli w meta ma być tak:
  1. <meta http-equiv="Content-type" content="text/html; charset=utf8" />

lub tak:
  1. <meta http-equiv="Content-type" content="text/html; charset=utf8_polish_ci" />

questionmark.gif
slightyboy
Dla pewności zaraz po połączeniu z bazą wyślij zapytania:
Kod
SET CHARACTER SET utf8;
SET collation_connection = utf8_polish_ci;

W HTML zmień wartość "meta" z ISO-8859-2 na UTF8 (choć tak naprawdę nie ma to wpływu na sortowanie, ale chodzi tu o zastosowanie się do zasady jednolitego kodowania w całej aplikacji).
Fifi209
Cytat(Rookie @ 19.08.2009, 12:28:42 ) *
Czyli w meta ma być tak:
  1. <meta http-equiv="Content-type" content="text/html; charset=utf8" />

lub tak:
  1. <meta http-equiv="Content-type" content="text/html; charset=utf8_polish_ci" />

questionmark.gif


Cytat(fifi209 @ 19.08.2009, 12:17:35 ) *
Zmieniasz kodowanie pliku na utf-8 (ściągnij notepad++ i zapisz w kodowaniu utf-8 bez BOM)
W meta też ustawiasz utf-8

Pisałem gdzieś, że na utf_polish_ci ? Nie ma czegoś takiego w html.


Cytat(fifi209 @ 19.08.2009, 12:17:35 ) *
i przy połączeniu używasz: mysql_set_charset


Cytat(slightyboy @ 19.08.2009, 12:29:33 ) *
Dla pewności zaraz po połączeniu z bazą wyślij zapytania:
Kod
SET CHARACTER SET utf8;
SET collation_connection = utf8_polish_ci;

W HTML zmień wartość "meta" z ISO-8859-2 na UTF8 (choć tak naprawdę nie ma to wpływu na sortowanie, ale chodzi tu o zastosowanie się do zasady jednolitego kodowania w całej aplikacji).

Kończ waść, wstydu oszczędź...
Rookie
Nie udało mi się tego osiągnąć jak w meta zmieniałem na utf8, to pajączek powiedział, że złe kodowanie, sprawdziłem i dodałem z poziomu funkcji programu i wpisał utf-8 ale zanim zdążyłem sprawdzić jak tam sortowanie, to wróciłem do iso, bo wtedy np, w menu na stronie "główna" było już z krzakami
Fifi209
Cytat(Rookie @ 19.08.2009, 12:46:59 ) *
Nie udało mi się tego osiągnąć jak w meta zmieniałem na utf8, to pajączek powiedział, że złe kodowanie, sprawdziłem i dodałem z poziomu funkcji programu i wpisał utf-8 ale zanim zdążyłem sprawdzić jak tam sortowanie, to wróciłem do iso, bo wtedy np, w menu na stronie "główna" było już z krzakami

Napisałem, notepad++ tak więc użyj tego programu i dopiero zastosuj się do rady.
Rookie
Mam zwykłego notepada, niestety wywalił mi po tej operacji, session_start(), że już wysłano (already sent) i na samej górze zanim jeszcze strona była jakieś dziwne krzaki, napis "główna" był normalnie ale zato już ł w słowie "Hasło" było krzaczorem,
żeby rozwiać wątpliwości, zciągnę notepada++ i sprawdzę, zaraz poszukam w google, chyba, że napiszesz mi z kąd mogę go zciągnąć
Fifi209
notepad++
Pierwszy wynik.

A wyrzucił błędy bo zakodowałeś z BOM.
Spawnm
Temat poruszany milion razy, zamykam.
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.