Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: polskie znaki przy wysyłaniu rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
thurinon
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. ?>


everth
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
thurinon
  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"

everth
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?
thurinon
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
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.