Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> polskie znaki przy wysyłaniu rekordów, Krzaki zamiast polskich znaków
thurinon
post 25.07.2010, 21:22:02
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 2
Dołączył: 8.10.2009

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


Witam po dość długiej przerwie smile.gif

Mam takie oto kody, odpowiedzialny za edytowanie wpisów . Kody w sumie działają świetnie, i jest z nimi tylko jeden problem - polskie znaki.
Dane:
Kodowanie bazy, tabel,... - UTF-8
Kodowanie Stron - UTF-8

Jeżeli rekordy dodaję w phpmy admin, wszystko jest ok, ale ten oto formularz wysyła do bazy krzaki, a ja nie wiem dlaczego. Wpisuję tekst z PL znakami, w formularzu widzę polskie znaki, a jak sprawdzam bazę, to widzę krzaki sad.gif

Oto pliki

Formularz:

  1. <?php
  2. $id_get=$_GET['id'];
  3. if($id_get)
  4. {
  5. $id_get = mysql_escape_string($id_get);
  6. $pyt = mysql_query("SELECT * FROM kategorie WHERE id='$id_get'");
  7. while($dane = mysql_fetch_array($pyt)) {
  8. $id_sql = $dane[0];
  9. $kategoria = $dane[1];
  10. $tytul = $dane[2];
  11. $zajawka = $dane[3];
  12. $tresc = $dane[5];
  13. }
  14. echo '<p>Edycja posta: '.$tytul.', ID numer: '.$id_get.'.<br /></p>
  15. <form action="editpost.php" method="post" accept-charset="utf-8">
  16. <input type="hidden" name="id" value="'.$id_get.'" />
  17. <p>Kategoria:</p>
  18. <input type="text" name="kategoria" value="'.$kategoria.'" />
  19. <p>Tytuł:</p>
  20. <input type="text" name="tytul" value="'.$tytul.'" />
  21. <p>Zajawka:</p>
  22. <textarea name="zajawka" value="'.$zajawka.'">'.$zajawka.'</textarea>
  23. <p>Tresc:</p>
  24. <textarea name="tresc" value="'.$tresc.'">'.$tresc.'</textarea>
  25. <input type="submit" value="Edytuj posta!" />
  26. </form>';
  27. }
  28. else {
  29. $pyt = mysql_query("SELECT * FROM kategorie");
  30. while($dane = mysql_fetch_array($pyt)){
  31. $id_sql = $dane[0];
  32. $kategoria = $dane[1];
  33. $tytul = $dane[2];
  34. echo '<div>'.$id_sql.'<br />'.$kategoria.'<br /><a href="?kategoria=edit&id='.$id_sql.'">'.$tytul.'</a><br /><hr/></div>';
  35. }
  36. }
  37. ?>



"Silnik":

  1. <?
  2.  
  3.  
  4. $id = $_POST['id'];
  5. $kategoria = $_POST['kategoria'];
  6. $tytul = $_POST['tytul'];
  7. $zajawka = $_POST['zajawka'];
  8. $tresc = $_POST['tresc'];
  9.  
  10. echo '<br /> '.$id.'<br /> '.$kategoria.'<br />'.$tytul.' <br />'.$zajawka.'<br /> '.$tresc.'<br />';
  11.  
  12. if ($kategoria and $tytul and $zajawka and $tresc) {
  13.  
  14. $conn = @mysql_connect('localhost', 'user', 'hasło')
  15. or die('Brak połączenia z MySQL');
  16.  
  17. $db = @mysql_select_db('baza', $conn)
  18. or die('Nie mogę połączyć się z bazą');}
  19.  
  20. if($kategoria and $tytul and $zajawka and $tresc) {
  21. $zap = @mysql_query("UPDATE kategorie SET kategoria='$kategoria', tytul='$tytul', zajawka='$zajawka', tresc='$tresc' WHERE id='$id' ");
  22.  
  23. if($zap) echo 'Udalo sie zaktualizowac dane';
  24.  
  25. else echo 'Nie udalo sie zaktualizowac danych.';
  26. }
  27. mysql_close($conn);
  28.  
  29. ?>


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
everth
post 25.07.2010, 21:32:00
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Kilka możliwości:
  1. Tabela lub kolumna ma źle ustawione kodowanie, ale skoro phpAdmin działa to raczej mało prawdopodobne
  2. Połączenie nie jest ustawione na UTF-8 - poniżej daję kod dla PDO (bo tylko je znam na tyle dobrze), ale skoro tam trzeba dodatkowo wymuszać UTF-8 to prawdopodobnie przy starszych funkcjach też

Sprawdź sobie to połączenie:
  1. $setting = 'mysql:host=127.0.0.1;dbname='.$name; //nazwa twojej bazy
  2. $pdo = new PDO($setting, $user, $pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  3. var_dump($pdo->query($jakis_select));
  4. var_dump($pdo->query($jakis_insert));

Jeśli powyższe działa to wiesz że trzeba coś przestawić w połączeniu z bazą danych. Niestety nie znam się na tych funkcjach więc tu nie bardzo będę mógł ci pomóc

Ten post edytował everth 25.07.2010, 21:56:57


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
thurinon
post 25.07.2010, 21:53:57
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 2
Dołączył: 8.10.2009

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


  1. $host="localhost";
  2. $db_user="user";
  3. $db_password="pass";
  4. $database="baza";
  5. mysql_connect($host,$db_user,$db_password);
  6. mysql_select_db($database);
  7.  
  8. mysql_query("SET NAMES utf8");


Tego używam do połączenia z bazą

ostatnią linijkę musiałem dodać, żeby pojawiały mi się polskie znaki, bo miaem z tym problem już na samym początku.

Jeżeli chodzi o to coś co mi podałeś everth... nie za bardzo wiem o co chodzi, więc chyba muszę troszkę pogrzebać. po wklejeniu tego koda, wyskakuje mi error
"Fatal error: Class 'myPDO' not found in moja_stronka.php on line 13"

Go to the top of the page
+Quote Post
everth
post 25.07.2010, 22:05:01
Post #4





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Ech, zmęczony już jestem - klasa to oczywiście PDO (MyPDO to moje rozszerzenie), nie myślę przy przeklejaniu kodu. Ale to pewnie nic nie zmieni bo z tego co napisałeś to masz już wymuszone połączenie na UTF-8. Chyba problem leży gdzie indziej. To tutaj:
  1. <form action="editpost.php" method="post" accept-charset="utf-8">

accept-charset dopisałeś już podczas szukania rozwiązania czy od początku tam siedziało? Spróbuj to usunąć i zobaczyć jak będzie. Wszystko pozostałe wygląda ok -> jaka wersja PHPa?


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
thurinon
post 25.07.2010, 22:16:44
Post #5





Grupa: Zarejestrowani
Postów: 55
Pomógł: 2
Dołączył: 8.10.2009

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


Przepraszam za zamęczanie w środku nocy smile.gif
ogólnie łączę się z bazą tak jak napisałem poprzednio, ale przy wysyłaniu rekordów akuratw tym miejscu łączyłem się inaczej, i nie wymuszalem UTF-8. teraz wszędzie łączę się w ten sam sposób i już wszystko działa.
problem rozwiązał kod podany przeze mnie wcześniej

  1. 1.
  2. $host="localhost";
  3. 2.
  4. $db_user="user";
  5. 3.
  6. $db_password="pass";
  7. 4.
  8. $database="baza";
  9. 5.
  10. mysql_connect($host,$db_user,$db_password);
  11. 6.
  12. mysql_select_db($database);
  13. 7.
  14.  
  15. 8.
  16. mysql_query("SET NAMES utf8");


Czyli po prostu moja głupota. Jeszcze raz sorka za ten bałagan, ale ja już chyba też przestaję myśleć smile.gif

everth dzięki za chęć pomocy
Pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:06