Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]Problem z 'krzaczkami' po raz kolejny..., Przepraszam, ale musiałem założyć ten temat...
beka
post
Post #1





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

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ż (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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...
Go to the top of the page
+Quote Post
ayeo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


  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 (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
beka
post
Post #3





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

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


Próbowałem. Nie działa.
Go to the top of the page
+Quote Post
ayeo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Pokaż dumpa bazy (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
beka
post
Post #5





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

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


  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... (IMG:style_emoticons/default/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 śśśśś, ćććć, śśś)

Ten post edytował beka 11.08.2009, 08:55:09
Go to the top of the page
+Quote Post
ayeo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


W linii 33 masz LATIN1
Go to the top of the page
+Quote Post
beka
post
Post #7





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

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


Po poprawieniu nadal to samo (przy utf i latin2)
Go to the top of the page
+Quote Post
Chrom
post
Post #8





Grupa: Zarejestrowani
Postów: 240
Pomógł: 17
Dołączył: 28.12.2005
Skąd: Warszawa

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


a dlaczego nie UTF-8 ?
+
mysql_query("SET NAMES 'utf8'");

Ten post edytował Chrom 11.08.2009, 09:07:12
Go to the top of the page
+Quote Post
erix
post
Post #9





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




Bo trzeba jeszcze prawidłowo zakodować znaki w pliku i zaimportować jeszcze raz.

Poza tym, gdzie masz set names?
Go to the top of the page
+Quote Post
beka
post
Post #10





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

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


Kodowanie przecież robię cały czas utf8
Set names jest w skrypcie dodawania (IMG:style_emoticons/default/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?(IMG:style_emoticons/default/questionmark.gif) ?', 'dffd', 'fddfs', 'ds', 12),
  65. (31, 'Ä?Ä?Ä?Ä?Ä?Ä?Ä?Ä?', 'Ä?Ä?Ä?', 'sadsa', 'lkjhjhg', 1),
  66. (32, 'co??tam?(IMG:style_emoticons/default/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

Ten post edytował beka 11.08.2009, 20:54:40
Go to the top of the page
+Quote Post
erix
post
Post #11





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




Ale przecież i tu masz znaki zapytania...
Go to the top of the page
+Quote Post
beka
post
Post #12





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

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


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.
Go to the top of the page
+Quote Post
PawelC
post
Post #13





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

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


Zamiast set names utf8, daj set names utf-8 bo u mnie jest różnica przy ich stosowaniu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
beka
post
Post #14





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

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


Niestety nadal to samo.
Go to the top of the page
+Quote Post
Rymar
post
Post #15





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 18.09.2008

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


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ą.
Go to the top of the page
+Quote Post
beka
post
Post #16





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

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


Bluefish na linuxie, mam ustawione kodowanie utf-8.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 07:08