Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [MYSQL] Polskie znaki c.d - kolejne starcie
thomson89
post 26.03.2009, 11:10:49
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Witam!

Ostatnio zmagałem się z polskimi znakami w bazie danych mysql. I o dziwo poradziłem sobie z tym problemem. Ale jak widać na krótko.

Dodałem wtedy kilka wierszy polskich znaków: wiersze wyświetlały się prawidłowo - żadne znaki nie zostały zamienione. Również przy pobieraniu wierszy przez parser php nic się nie działo.

Potem napisałem funkcję dodającą teksty do tejze tabeli: kolejny test pozytywny. Wszystko ładowało się ok.

Dopiero teraz, gdy zrobiłem to na przeglądarce mozilli w innym kraju (tu: inny komputer) - wszedłem na mojego ala cms i dodałem kilka wierszy. Niestety znowu myql zamienia polskie znaczki na dziwne znaczki. Np.:±¶æ涶¶¶¶¶¶ñó󳿼¼¼ê걶¶.

Jak zrobić, aby przywórcić stan bazy sprzed kilku dni??

Pozdrawiam!


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
erix
post 26.03.2009, 14:20:20
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Eksport do sql, konwersja znaków Gżegżółką, importujesz z powrotem.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
thomson89
post 28.03.2009, 20:05:39
Post #3





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


No, ok. Musiałem poprawić wszystkie znaki >> konwert >> import i wszystko ok.

No a teraz: - wychodzi na że muszę dodać przekodowanie ciagu dodawanego. Tylko z jakiego kodowania? Z windows-1250?
- i kolejne pytanko: DLACZEGO WCZEŚNIEJ TO DZIAŁAŁO??

Ten post edytował thomson89 28.03.2009, 22:41:21


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
PawelC
post 28.03.2009, 20:09:14
Post #4





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


A próbowałeś po połączeniu z bazą dać, jedną z możliwości poniżej:
  1. <?php
  2. mysql_query('SET NAMES utf8');
  3. mysql_query('SET latin2');
  4. mysql_query('SET NAMES cp1250');
  5. ?>

Mi to zawsze pomaga i wyświetla polski znaczki.
Jakie masz kodowanie w bazie?

Ten post edytował ExPlOiT 28.03.2009, 20:09:55
Go to the top of the page
+Quote Post
megawebmaster
post 28.03.2009, 20:50:58
Post #5





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


Ja mam poustawiane w bazie na połączenie utf8_polish_ci, wszystkie pola w bazie poustawiane na uft8_polish_ci i jeszcze podczas połączenie ustawiam utf8 i nie mam żadnych problemów - wszystkie skrypty działają tak jak mają.
Go to the top of the page
+Quote Post
thomson89
post 28.03.2009, 22:40:45
Post #6





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Też tak mam.

A z set names spróbuję.


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
mike
post 28.03.2009, 22:43:13
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(thomson89 @ 26.03.2009, 11:10:49 ) *
Dopiero teraz, gdy zrobiłem to na przeglądarce mozilli w innym kraju (tu: inny komputer)
A kodowanie strony (nagłówek head) oraz kodowanie plików masz zgodne z kodowaniem w bazie danych? Moim zdaniem nie.
Go to the top of the page
+Quote Post
thomson89
post 29.03.2009, 11:04:45
Post #8





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Nie pisałbym gdybym nie sprawdził.
  • ustawione kodowanie bazy na utf8
  • każda tabelka na utf8
  • porównywanie wierszy utf_polish_ci
  • kodowanie meta utf8


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
PawelC
post 29.03.2009, 12:26:52
Post #9





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Ja mam tak:
  • System porównań dla połączenia MySQL: utf8_polish_ci
  • każda tabelka na utf8_polish_ci
  • porównywanie wierszy utf8_polish_ci
  • kodowanie meta utf-8 ew. utf8
  • kodowanie pliku utf-8
oczywiście jak nadal kodowanie nie działa to dorzucam po połączeniu z bazą to:
  1. <?php
  2. mysql_query('SET NAMES utf8'); // A ja nie to zamiast utf8 daje utf-8
  3. ?>

I śmiga bez problemu!

Ten post edytował ExPlOiT 29.03.2009, 12:28:06
Go to the top of the page
+Quote Post
beka
post 9.08.2009, 09:49:26
Post #10





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 2.08.2009

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


Witam, piszę tu by nie zakładać kolejnego tematu o... no właśnie worriedsmiley.gif
Testuję mój skrypt na localhoście (ubuntu 9.04, najnowszy mysql, php, phpmyadmin poinstalowane) i na serwerze w sieci (byethost). Na obu są piękne krzaki i krzewy smile.gif
Teraz tak :
- przeglądałem wszystkie możliwe tematy, porady... cokolwiek... i nic
Czasami jak poustawiam to treść do bazy danych dodawana jest bez krzaków ręcznie (w konsoli - localhost), albo przez PMA (na localu i serwerze), ale jeszcze nigdy nie dodało dobrze przez skrypt. Oczywiście próbowałem różnych konfiguracji, nawet prostych - wszystko jednakowo, ale bez efektów.
Męczyłbym się dalej, ale już ręce opadają po tych paru godzinach spędzonych przy bazie danych i jednym, prostym skrypcie...

Skrypt :
  1. <?php
  2. function insert_db($title, $author, $edition, $format, $year){
  3. $sql = mysql_connect("---host---", "---user---", "---haslo---") or die('Nie mozna nawiazac polaczenia z baza danych.'.mysql_error());
  4. mysql_select_db("----bazadanych----") or die('Nie mozna wybrac bazy danych.'.mysql_error()); mysql_query("SET NAMES 'utf8'");
  5. $title = stripslashes($title);
  6. $author = stripslashes($author);
  7. $edition = stripslashes($edition);
  8. $format = stripslashes($format);
  9. $year = stripslashes($year);
  10. }
  11.  
  12. $title = mysql_real_escape_string($title);
  13. $author = mysql_real_escape_string($author);
  14. $edition = mysql_real_escape_string($edition);
  15. $format = mysql_real_escape_string($format);
  16. $year = mysql_real_escape_string($year);
  17.  
  18. $query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
  19. $result = mysql_query($query) or die('Nie mozna wykonac zapytania.'.mysql_error());
  20. echo 'Dane zostały wstawione pomyślnie.<br />';
  21. $query = 'SELECT * FROM `plyty`';
  22. $result = mysql_query($query) or die('Nie mozna wykonac zapytania.'.mysql_error());
  23. echo 'Dane zostały pobrane pomyślnie.<br />';
  24. echo '<table border="1">';
  25. echo '<tr><th>Tytuł</th><th>Autor</th><th>Wydanie</th><th>Format</th><th>Rok</th></tr>';
  26. while ($result_row = mysql_fetch_array($result)) {
  27. echo '<tr><td>';
  28. echo $result_row['tytul'] .'</td><td>';
  29. echo $result_row['autor'] .'</td><td>';
  30. echo $result_row['wydanie'] .'</td><td>';
  31. echo $result_row['format'] .'</td><td>';
  32. echo $result_row['rok'] .'</td></tr>';
  33. }
  34. echo '</table>';
  35. }
  36. ?>
  37. <html>
  38. <head>
  39. <title>Wstawianie danych</title>
  40. </head>
  41. <body>
  42. <?php
  43. $title = htmlentities($_GET['tytul']);
  44. $author = htmlentities($_GET['autor']);
  45. $edition = htmlentities($_GET['wydanie']);
  46. $format = htmlentities($_GET['format']);
  47. $year = htmlentities($_GET['rok']);
  48. if (($title != NULL ) && ($author != NULL ) && ($edition != NULL ) && ($format != NULL ) && ($year != NULL)){
  49. insert_db($title,$author,$edition,$format,$year);
  50. }
  51. else {
  52. <h1>Wprowadź nową pozycję:</h1>
  53. <form action="'.$_SERVER['PHP_SELF'].'" method="GET">
  54. <table><tr>
  55. <td><label>Tytuł:<input type="text" name="tytul" id="tytul" /></label></td>
  56. <td><label>Autor:<input type="text" name="autor" id="autor" /></label></td>
  57. <td><label>Wydanie:<input type="text" name="wydanie" id="wydanie" /></label></td>
  58. <td><label>Format:<input type="text" name="format" id="format" /></label></td>
  59. <td><label>Rok:<input type="text" name="rok" id="rok" /></label></td><br />
  60. <input type="submit" value="Zatwierdź" />
  61. </tr></table>
  62. </form>';
  63. }
  64. ?>
  65. </body>
  66. </html>

<< host itd. dobrze wpisuję, bo samo dodawanie działa winksmiley.jpg ale krzaki....

przez phpMyAdmin ustawiam wszystko - baza danych (utf8_polish_ci / próbowałem też utf8_unicode_ci , utf8_general_ci, latin2) to samo z tabelą i zawartością.
Efekt? Dodawanie przez phpMyAdmin działa - w samej bazie nie ma krzaczków - ale na stronie już są (strona kodowana w utf-8 ).

przez konsolę (localhost) także próbowałem już różnych ustawień... i tutaj też 0 efektów... jedynie to ręcznę wpisywanie w konsoli insert into... działa...

sadsmiley02.gif pomocy
Go to the top of the page
+Quote Post
Daiquiri
post 9.08.2009, 10:14:31
Post #11





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




O ile dobrze rozumiem: jeżeli dodajesz treść "ręcznie" do bazy to jest OK, natomiast poprzez skrypt już nie? Widzę, że masz ustawienie SET NAMES, mówisz że strona ma odpowiednie kodowanie... natomiast nie widzę deklaracji kodowania w samym <head></head>. Może się mylę?
Go to the top of the page
+Quote Post
Spawnm
post 9.08.2009, 10:26:51
Post #12





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Bez przesady , temat tyle razy wałkowany że sam możesz dojść czemu nie ma znaków.
Zamykam.
Go to the top of the page
+Quote Post

Closed 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: 26.04.2024 - 18:20