Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Polskie znaki problem - kodowanie
Forum PHP.pl > Forum > Przedszkole
darney
Witam. Jestem początkującym w zakresie programowania w PHP. Czytałem tematy związane z kodowaniem i z przykrością muszę stwierdzić że nie radze sobie z rozwiązaniem mojego problemu. Wykonuję ćwiczenia starannie z książki "HEAD FIRST PHP & MYSQL".
Wszystko pięknie szło do czasu sytuacji w którym skrypt PHP miał wysyłać do MYSQL dane.
Na początek chciałem zaznaczyć, iż w bazię mam ustawione kodowanie znaków utf-8_polish_ci.

Kiedy dodaje w phpMyAdmin za pomocą "Wykonanie zapytania/zapytań SQL do bazy danych" wyrazy z polskimi znakami do tabel to wszystko wyświetla się prawidłowo.

Problem powstaje kiedy próbuje za pomocą skryptu PHP dodać dane do bazy danych. Wtedy w słowach zawierających polskie znaki pojawiają się "krzaki". Skrypt ma ustawione za pomocą programu PSpad kodowanie UTF-8. Niestety po załadowaniu skryptu w przeglądarkę w bazię danych źle są wyświetlane polskie znaki.

Proszę o pomoc co powinienem zrobić, aby polskie znaki do bazy prawidłowo zostały wysyłane?

O to poniższy skrypt:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title></title>
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6. <title></title>
  7. </head>
  8. <body>
  9. <?php
  10.  
  11. $dbc = mysqli_connect('localhost', 'nazwa_bazy', 'haslo_bazy', 'nazwa_bazy')
  12. or die('Brak połączenia z serwerem MySQL.');
  13.  
  14. $query = "INSERT INTO aliens_abduction (first_name, last_name, when_it_happened, how_long, " .
  15. "how_many, alien_description, what_they_did, fang_spotted, other, email) " .
  16. "VALUES ('Małgorzata', 'Mayer', '8 dni temu', '1 dzień', 'czterech', " .
  17. "'zielone macki', 'rozmawialiśmy', 'tak', 'to raczej był on', 'mail@host.pl')";
  18.  
  19. $Result = mysqli_query( $dbc, $query)
  20. or die('Błąd w zapytaniu do bazy danych');
  21.  
  22. mysqli_close($dbc);
  23. echo "dane wstawione";
  24. ?>
  25. </body>
  26. </html>
gigzorr
  1. <?php
  2. mysql_query( 'SET NAMES utf8' );
  3. ?>


Wstaw przed skryptem .
athei
Temat: MYSQL Polskie znaki
darney
Cytat(gigzorr @ 21.08.2010, 12:05:24 ) *
  1. <?php
  2. mysql_query( 'SET NAMES utf8' );
  3. ?>


Wstaw przed skryptem .


po dodaniu dane się dodają nadal bez polskich znaków i przy okazji wyświetla się error


Warning: mysql_query() [function.mysql-query]: Access denied for user 'leczncal'@'localhost' (using password: NO) in /home/leczncal/public_html/dars/02aliens/base.php on line 11

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/leczncal/public_html/dars/02aliens/base.php on line 11

Cytat(athei @ 21.08.2010, 12:07:19 ) *


Co do tego tematu nie wiem jak to zastosować do mojego skryptu ponieważ jestem początkującym programistą i stąd mój post.
athei
Temat został założony dla początkujących, chcesz się czegoś nauczyć musisz sam coś robić, a nie czekać na gotowe.
Błędy wyskakują bo to co podał kolega jest dla mysql, nie dla mysqli którego używasz.
Kod
mysqli_set_charset($dbc, "utf8")

Więcej http://php.net/manual/en/mysqli.set-charset.php
darney
Cytat(athei @ 21.08.2010, 16:52:51 ) *
Temat został założony dla początkujących, chcesz się czegoś nauczyć musisz sam coś robić, a nie czekać na gotowe.
Błędy wyskakują bo to co podał kolega jest dla mysql, nie dla mysqli którego używasz.
Kod
mysqli_set_charset($dbc, "utf8")

Więcej http://php.net/manual/en/mysqli.set-charset.php


A myślisz że co wkleiłem od tak sobie kod programu i czekam na gotowe ?. Od 2 dni próbuję czytając posty i przekształcając program rozwiązać problem.
Według manuala dostępnego na php.net dodałem funkcje która nie wyświetla błędów lecz język dalej nie wyświetla się poprawnie.
Ps. Musze sam coś robić ? to wtedy forum do czego służy do krytykowania ludzi którzy pytają się w sprawach dotyczących programów które im nie chodzą ?.
Myślisz że po co rozpisuję się że zakupiłem książkę i rozwiązuje ćwiczenia po kolei bo nie chce nic sam robić czekam na gotowe ?
Po coś tu raczej piszę bo forum ma służyć osobą które nie radzą sobie z danym zagadnieniem. Nie tylko ma przynosić zyski administratorom.

Wracając do mojego problemu zastosowałem się do kolegi manuala tylko nie wiem czy prawidłowo. Program nie wyrzuca błędów lecz znaki dalej nie poprawnie działają
Jeżeli w jakiś sposób państwo stwierdzą że czekam na gotowe i nic sam nie robię zarazem mając nie słuszne pretensje to proszę zamknąć temat i postaram się szukać pomocy gdzie indziej wierząc dalej w siłe google

Poniżej modyfikacja skryptu:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2.  
  3. <html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
  4.  
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title></title>
  8.  
  9. <title></title>
  10. </head>
  11. <body>
  12. <?php
  13. $mysqli = new mysqli('localhost', 'xxxx', 'xxxx', 'xxxx');
  14.  
  15. /* check connection */
  16. if (mysqli_connect_errno()) {
  17. printf("Connect failed: %s\n", mysqli_connect_error());
  18. exit();
  19. }
  20.  
  21. /* change character set to utf8 */
  22. if (!$mysqli->set_charset("utf8")) {
  23. printf("Error loading character set utf8: %s\n", $mysqli->error);
  24. } else {
  25. printf("Current character set: %s\n", $mysqli->character_set_name());
  26. }
  27.  
  28. $mysqli->close();
  29. ?>
  30.  
  31.  
  32.  
  33. <?php
  34.  
  35.  
  36. $dbc = mysqli_connect('localhost', 'xxxx', 'xxxx', 'xxxx')
  37. or die('Brak połączenia z serwerem MySQL.');
  38.  
  39. $query = "INSERT INTO aliens_abduction (first_name, last_name, when_it_happened, how_long, " .
  40. "how_many, alien_description, what_they_did, fang_spotted, other, email) " .
  41. "VALUES ('Małgorzata', 'Mayer', '8 dni temu', '1 dzień', 'czterech', " .
  42. "'zielone macki', 'rozmawialiśmy', 'tak', 'to raczej był on', 'mail@host.pl')";
  43.  
  44. $Result = mysqli_query( $dbc, $query)
  45. or die('Błąd w zapytaniu do bazy danych');
  46. $dbh = new PDO ('mysql:host=localhost;dbname=leczncal_aliendatabase', 'leczncal_darney', 'lecznica3000');
  47. $dbh -> query ('SET NAMES utf8');
  48. $dbh -> query ('SET CHARACTER_SET utf8');
  49.  
  50. mysqli_close($dbc);
  51.  
  52.  
  53. echo "dane wstawione";
  54. ?>
  55.  
  56. <?php
  57.  
  58.  
  59. ?>
  60. </body>
  61. </html>
athei
Nie bulwersuj się tak smile.gif Tematy z polskimi znakami się tak często pojawiają że odpowiadanie na nie mija się już z celem.
Napisałem ci co masz dać.
A twój plik po modyfikacji, szkoda słów, łączysz się obiektowo i strukturalnie, później jeszcze wrzucasz PDO. Wybierz jeden sposób łączenia się z bazą i z niego korzystaj.
darney
Cytat(athei @ 21.08.2010, 19:19:41 ) *
Nie bulwersuj się tak smile.gif Tematy z polskimi znakami się tak często pojawiają że odpowiadanie na nie mija się już z celem.
Napisałem ci co masz dać.
A twój plik po modyfikacji, szkoda słów, łączysz się obiektowo i strukturalnie, później jeszcze wrzucasz PDO. Wybierz jeden sposób łączenia się z bazą i z niego korzystaj.


W porządku bulwers wrzucam za szafe..Domyślam się, iż było takich tematów setki. Wiele z nich czytałem lecz nie potrafię zastosować tych formuł w moim przypadku dlatego zwróciłem się z pomocą.

Wracając do tematu wyrzuciłem PDO i te obiektowe łączenie. Staram się to zrozumieć i wiem że brakuje mi sporo wiedzy na ten temat.

Napisałeś mi co mam zmienić czyli mam ustawić

  1. mysqli_set_charset($dbc, "utf8")


Tylko jak mam to ująć w skrypcie który przed chwilą oczyściłem
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2.  
  3. <html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
  4.  
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title></title>
  8.  
  9. </head>
  10. <body>
  11.  
  12. <?php
  13.  
  14. $dbc = mysqli_connect('localhost', 'xxxx', 'xxxx', 'xxxx')
  15. or die('Brak połączenia z serwerem MySQL.');
  16.  
  17. $query = "INSERT INTO aliens_abduction (first_name, last_name, when_it_happened, how_long, " .
  18. "how_many, alien_description, what_they_did, fang_spotted, other, email) " .
  19. "VALUES ('Małgorzata', 'Mayer', '8 dni temu', '1 dzień', 'czterech', " .
  20. "'zielone macki', 'rozmawialiśmy', 'tak', 'to raczej był on', 'mail@host.pl')";
  21.  
  22. $Result = mysqli_query( $dbc, $query)
  23. or die('Błąd w zapytaniu do bazy danych');
  24.  
  25. mysqli_close($dbc);
  26.  
  27. echo "dane wstawione";
  28. ?>
athei
Po połączeniu się do bazy wrzucasz, czyli
  1. $dbc = mysqli_connect('localhost', 'xxxx', 'xxxx', 'xxxx')
  2. or die('Brak połączenia z serwerem MySQL.');
  3.  
  4. mysqli_set_charset($dbc, "utf8");
  5.  
  6. /* albo zeby zobaczyc czy dziala, zakomentuj powyzej, odk. poniżej */
  7. /*
  8. if (!mysqli_set_charset($dbc, "utf8")) {
  9.   printf("Error loading character set utf8: %s\n", mysqli_error($dbc));
  10. } else {
  11.   printf("Current character set: %s\n", mysqli_character_set_name($dbc));
  12. }
  13. */

Teraz pl znaki powinny być, jakby były problemy to notepad++ i kodowanie utf8 bez boom.
darney
Niestety występuje błąd "Parse error: syntax error, unexpected ')' in /home/leczncal/public_html/dars/02aliens/base.php on line 35"
Nie mogę poradzić sobie z tym językiem. Podejrzewam że nie rozumiem do końca gdzie wstawić dokładnie mysqli_set_charset($dbc, "utf8");

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2.  
  3. <html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
  4.  
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title></title>
  8.  
  9. </head>
  10. <body>
  11. <?php
  12.  
  13.  
  14.  
  15. if (!mysqli_set_charset($dbc, "utf8")) {
  16.  
  17. printf("Error loading character set utf8: %s\n", mysqli_error($dbc));
  18.  
  19. } else {
  20.  
  21. printf("Current character set: %s\n", mysqli_character_set_name($dbc));
  22.  
  23. }
  24. $dbc = mysqli_connect('localhost', 'xxx', 'xxx', 'xxx')
  25. or die('Brak połączenia z serwerem MySQL.');
  26.  
  27. mysqli_set_charset($dbc, "utf8");
  28.  
  29. $query = "INSERT INTO aliens_abduction (first_name, last_name, when_it_happened, how_long, " .
  30. "how_many, alien_description, what_they_did, fang_spotted, other, email) " .
  31. "VALUES ('Małgorzata', 'Mayer', '8 dni temu', '1 dzień', 'czterech', " .
  32. "'zielone macki', 'rozmawialiśmy', 'tak', 'to raczej był on', 'mail@host.pl')";
  33.  
  34. $Result = mysqli_query( $dbc, $query, )
  35. or die('Błąd w zapytaniu do bazy danych');
  36.  
  37. mysqli_close($dbc);
  38.  
  39. echo "dane wstawione";
  40. ?>
  41.  
  42. </body>
  43. </html>

amii
Usuń przecinek na końcu:
$Result = mysqli_query( $dbc, $query, )
darney
Może to nie jest wyczyn ale daje mi to dużo radości gdy mogę dalej zagłębiać się w książkę którą studiuję. Wszystko już działa. Jesteście niesamowici : ) Dziękuje za pomoc
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.