Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z 'krzaczkami' po raz kolejny...
Forum PHP.pl > Forum > Przedszkole
beka
Witam, z góry przepraszam, że założyłem "kolejny temat o ..." ale próbowałem uzyskac pomoc w innym temacie dotycz±cym tego problemu, jednakże go zamknięto blinksmiley.gif
Niestety po wielu próbach NIE ZNALAZŁEM POMOCY NIGDZIE, mimo, że praktycznie każdy problem z tymi słynnymi krzaczkami jest taki sam smile.gif Otóż najwidoczniej nie jest.
Próbowałem już wszelkie możliwe metody, kombinowałem, zarwałem dwie noce (bo mi nie dawało to spać już aaevil.gif ), szukałem w googlach, na forach, tutaj, wszędzie i nic.
Wszelkie możliwe ustawienia w bazie danych i skrypcie już raczej wykorzystałem, a wszystko to jak krew w piach...

Problem polega na tym, że podczas dodawania PRZEZ SKRYPT danych do bazy zamiast polskich liter zapisywane zostaj± "krzaczki", które s± również póĽniej wy¶wietlane na stronie.
Natomiast gdy dodaję wpis z pozycji phpMyAdmin - wszystko jest elegancko, w bazie s± polskie znaki, na stronie także.
Nie mam już pomysłu co może być nie tak... serwer ma ustawienia utf8 (wszędzie, gdzie się dało), ale w sumie przy latin2 jest to samo.

[testowałem na localhoscie - problem identyczny]

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

(oczywiscie host, user, haslo itd. jest dobrze - tu zakrylem, bo i po co sie chwalic, prawda - więc tym sie nie zajmujemy)
Samo dodawanie działa, ale polskie znaki nie smile.gif

Odczyt z bazy danych :

  1. <?php
  2. include('db_login.php');
  3. $connection = mysql_connect($db_host, $db_username, $db_password);
  4. if (!$connection){
  5. die ('Nie mozna nawiazac polaczenia z baza danych: <br .>'. mysql_error());
  6. }
  7. if (!mysql_query("set names utf8"))
  8. {
  9. echo "error";
  10. }
  11. $db_select=mysql_select_db($db_database);
  12. if(!$db_select)
  13. {
  14. die ('Nie mozna nawiazac polaczenia z baza danych: <br .>'. mysql_error());
  15. }
  16. $query = 'SELECT * FROM plyty';
  17. $result = mysql_query($query);
  18. if(!$result){
  19. die ('Nie mozna wykonac zapytania do bazy danych: <br />'. mysql_error());
  20. }
  21. while ($result_row = mysql_fetch_row(($result))){
  22. echo 'Tytuł: '.$result_row[1] . '<br />';
  23. echo 'Autor: '.$result_row[2] . '<br />';
  24. echo 'Wydanie: '.$result_row[3] . '<br />';
  25. echo 'Format: '.$result_row[4] . '<br />';
  26. echo 'Rok: '.$result_row[5] . '<br /><br />';
  27. }
  28. mysql_close($connection);
  29. ?>


no i gwoli ¶cisło¶ci plik db_login

  1. <?php
  2. $db_host='host';
  3. $db_database='baza';
  4. $db_username='user';
  5. $db_password='haslo';
  6. ?>

Sama strona, pod któr± podpięte (include) s± te pliki (index.php) oczywi¶cie ma kodowanie utf-8.


Proszę o nie zamykanie tego tematu do rozwi±zania mojego problemu - naprawdę bardzo mi na tym zależy, a już ręce mi opadaj± z bezsilno¶ci. Jak widać moja przygoda z php i mysql nie zaczyna się kolorowo...
ayeo
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. </head>


Daj to w pliku z formularzem tongue.gif
beka
Próbowałem. Nie działa.
ayeo
Pokaż dumpa bazy winksmiley.jpg
beka
  1. -- MySQL dump 10.11
  2. --
  3. -- Host: localhost Database: winyle
  4. -- ------------------------------------------------------
  5. -- Server version 5.0.75-0ubuntu10.2
  6.  
  7. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  8. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  9. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  10. /*!40101 SET NAMES utf8 */;
  11. /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
  12. /*!40103 SET TIME_ZONE='+00:00' */;
  13. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
  14. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
  15. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
  16. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
  17.  
  18. --
  19. -- Table structure for table `plyty`
  20. --
  21.  
  22. DROP TABLE IF EXISTS `plyty`;
  23. SET @saved_cs_client = @@character_set_client;
  24. SET character_set_client = utf8;
  25. CREATE TABLE `plyty` (
  26. `tytul_id` int(11) NOT NULL AUTO_INCREMENT,
  27. `tytul` varchar(150) DEFAULT NULL,
  28. `autor` varchar(120) DEFAULT NULL,
  29. `wydanie` varchar(120) DEFAULT NULL,
  30. `format` varchar(10) DEFAULT NULL,
  31. `rok` int(11) DEFAULT NULL,
  32. PRIMARY KEY (`tytul_id`)
  33. ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
  34. SET character_set_client = @saved_cs_client;
  35.  
  36. --
  37. -- Dumping data for table `plyty`
  38. --
  39.  
  40. LOCK TABLES `plyty` WRITE;
  41. /*!40000 ALTER TABLE `plyty` DISABLE KEYS */;
  42. INSERT INTO `plyty` VALUES (1,'Siedem','O.S.T.R','Asfalt Records','2LP',2006),(2,'Season One','The Jonesz','Asfalt Records','2LP',2008),(3,'Koniec ??art??w','??ona','Asfalt Records','1LP',2002),(4,'Out Of The Blue','Electric Light Orchestra','Jet Records','2LP',1977);
  43. /*!40000 ALTER TABLE `plyty` ENABLE KEYS */;
  44. UNLOCK TABLES;
  45. /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
  46.  
  47. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
  48. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
  49. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
  50. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  51. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  52. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  53. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
  54.  
  55. -- Dump completed on 2009-08-02 16:49:07


Je¶li dobrze zrozumiałem... worriedsmiley.gif

edit. na serwerze w sieci niewiele się to różni (zamiast localhost jest byethost bla bla, no i pełno wpisów typu ¶¶¶¶¶, ćććć, ¶¶¶)
ayeo
W linii 33 masz LATIN1
beka
Po poprawieniu nadal to samo (przy utf i latin2)
Chrom
a dlaczego nie UTF-8 ?
+
mysql_query("SET NAMES 'utf8'");
erix
Bo trzeba jeszcze prawidłowo zakodować znaki w pliku i zaimportować jeszcze raz.

Poza tym, gdzie masz set names?
beka
Kodowanie przecież robię cały czas utf8
Set names jest w skrypcie dodawania smile.gif 4 linijka.

Obecna "baza" danych (byle co, byle by sprawdzić poprawno¶ć... czyli jak mówiłem wcze¶niej jakie¶ tam ±±ęęłłłćć itd.) :
Serwer w sieci.
  1.  
  2. -- phpMyAdmin SQL Dump
  3. -- version 3.1.1
  4. --
  5. -- Host: sql205.byethost5.com
  6. -- Czas wygenerowania: 11 Sie 2009, 06:33
  7. -- Wersja serwera: 5.0.84
  8. -- Wersja PHP: 5.2.6-1+lenny2
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Baza danych: `b5_2111021_winyle`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Struktura tabeli dla `plyty`
  20. --
  21.  
  22. CREATE TABLE IF NOT EXISTS `plyty` (
  23. `tytul_id` int(11) NOT NULL AUTO_INCREMENT,
  24. `tytul` varchar(150) character SET utf8 collate utf8_polish_ci DEFAULT NULL,
  25. `autor` varchar(120) character SET utf8 collate utf8_polish_ci DEFAULT NULL,
  26. `wydanie` varchar(120) character SET utf8 collate utf8_polish_ci DEFAULT NULL,
  27. `format` varchar(10) character SET utf8 collate utf8_polish_ci DEFAULT NULL,
  28. `rok` int(11) DEFAULT NULL,
  29. PRIMARY KEY (`tytul_id`)
  30. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=100 ;
  31.  
  32. --
  33. -- Zrzut danych tabeli `plyty`
  34. --
  35.  
  36. INSERT INTO `plyty` (`tytul_id`, `tytul`, `autor`, `wydanie`, `format`, `rok`) VALUES
  37. (1, 'co?', 'ktokolwiek', 'co?', 'jaki&Aring', 1948),
  38. (2, 'co??tam jaki?? tytu??', 'ktokolwiek m??g??by', 'dsa', 'dsasdsa', 1978),
  39. (3, 'co??tam jaki?? tytu??', 'cascd', 'asdasd', 'asdas421', 3242343),
  40. (4, 'co??tam jaki?? tytu??', 'dsadas', 'sadd', 'sasd', 2311),
  41. (5, 'co?', 'sad', 'dasdsa', 'dasads', 2312),
  42. (6, 'co??tam jaki?? tytu??', 'sadasads', 'ddaa', 'dsadsd', 1221),
  43. (7, 'co??tam jaki?? tytu??', 'saddas', 'daddasads', 'ssadda', 5478941),
  44. (8, 'co??tam jaki?? tytu??', 'fdsfds', 'fdsdsfd', 'fdsfsdfd', 33333333),
  45. (10, 'co¶tam bl±bl±bl±', 'oczywi¶ćie, że ja ', 'kjljl', 'dsa', 3656),
  46. (11, 'co??tam jaki?? tytu??', 'fdsfds', 'fdsdsfd', 'fdsfsdfd', 33333333),
  47. (12, 'co?', 'fd', 'fd', 'fd', 3421),
  48. (13, 'co¶tam bl±bl±bl±', 'fds', 'sfddddddd', 'dddddddddd', 2321),
  49. (14, 'co??tam jaki?? tytu??', 'fds', 'sdf', 'fr3', 3333),
  50. (15, 'co??tam jaki?? tytu??', 'fds', 'sdf', 'fr3', 3333),
  51. (16, 'co??tam jaki?? tytu??', 'fdsdfs', 'dfssd', 'fds', 2312),
  52. (18, 'co¶tam bl±bl±bl±', 'e', 'e', 'e', 2311),
  53. (19, 'co??tam jaki?? tytu??', 'aaaaaaaaaaaaaa', 'avvvvvvvvvvv', 'ddddddd', 12321),
  54. (20, 'co?', 'asssssssssss', 'sddddddddd', 'dddddddddd', 1232),
  55. (21, 'co??tam jaki?? tytu??', 'ddddddddd', 'ddddddddddddddddddd', 'dddddddddd', 11111),
  56. (22, 'co??tam jaki?? tytu??', 'cccccccccc', 'ccvvvvvvvv', 'vvvvvvvvvv', 2311),
  57. (23, 'co??tam jaki?? tytu??', 'aaaaaa', 'aaaa', 'aaaaa', 2321),
  58. (24, 'co??tam jaki?? tytu??', 'aaaaaaaa', 'aaaaaaaaaa', 'ssssssssss', 22222),
  59. (25, 'co??tam jaki?? tytu??', 'aaaaa', 'aaaaa', 'aaaaaa', 0),
  60. (26, 'co¶tam bl±bl±bl±', 'dddddd', 'ddddd', 'dddddddddd', 3333),
  61. (27, 'co?', 'ssdas', 'dasdasd', 'sadas', 2222),
  62. (28, 'co?', '?', '?', '?', 1244454),
  63. (29, 'co?tam??', 'sadsa', 'dsadsada', 'ads', 1),
  64. (30, 'co??tam?questionmark.gif?', 'dffd', 'fddfs', 'ds', 12),
  65. (31, 'Ä?Ä?Ä?Ä?Ä?Ä?Ä?Ä?', 'Ä?Ä?Ä?', 'sadsa', 'lkjhjhg', 1),
  66. (32, 'co??tam?questionmark.gif?', 'sada', 'sdda', 'dsas', 9999),
  67. (99, '¶łcł¶łóóałał', 'łl', 'lł', 'l', 909),
  68. (98, '¶¶¶¶¶¶', 'łłłłłłłł', '±a±±±±±±±±', 'ććććććć', 1231);


Wpisy, w których poprawnie s± polskie znaki zapisane to s± te dodane przez phpMyAdmin. Reszta przez skrypt

Podbijam temat
erix
Ale przecież i tu masz znaki zapytania...
beka
Przecież pisałem już wcze¶niej, że znaki zapytania i krzaki s± tu PRZEZ DODANIE SKRYPTEM. Polskie znaki występuj± we wpisach dodanych przez phpMyAdmin/terminal.
PawelC
Zamiast set names utf8, daj set names utf-8 bo u mnie jest różnica przy ich stosowaniu smile.gif
beka
Niestety nadal to samo.
Rymar
A jakiego edytora używasz do pisania kodu?Może masz ustawione w opcjach zachodnioeuropejski (iso-8859-1) b±dĽ ¶rodkowoeuropejski (iso-8859-2) b±dĽ jeszcze jaki¶ inny a nie UTF-8, czasem tak mam gdy przestawię kodowanie i potem krzaki lec±.
beka
Bluefish na linuxie, mam ustawione kodowanie utf-8.
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.