Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z kodowaniem utf 8
wojciech533
post 3.01.2016, 00:43:37
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.01.2016

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


Stworzyłem baze w mysql i strone internetowa . Napisałem system logowania oraz rejestracji . Problem polega na tym ze podczas dodawania nowego uzytkownika wszystkie polskie znaki DZIALAJA POZA JEDNYM "Ó" . Nie wiem co to za magia ... Cała baze razem z tabelami zmienilem na utf 8 za pomoca komendy : ALTER TABLE tabela_name CONVERT TO CHARACTER SET UTF8 COLLATE UTF8_UNICODE_CI . W plikach php mam : header('Content-type:text/html; charset=utf-8'); . Dodatkowo dopisałem : $polaczenie->query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'"); $polaczenie->query("SET CHARSET utf8") ; . Ale nie wiem czy to jest potrzebne skoro mam header . Pisze w NetBeans w ktorym to w pliku netbeans.conf dopisałem -J-Dfile.encoding=UTF-8 w odpowiednie miejsce . Wykorzystuje ochrone przed wstrzykiwaniem sql mysqli_real_escape_string ale nie wiem czy to moze byc problemem. Nie mam juz pomysłów . Dopiero sie ucze i jest to moja pierwsza baza oraz strona . Z góry dziękuje bardzo za pomoc ! smile.gif . Przypomnę że wszystko dziala poza literką "ó" a jak w terminalu wpisuje jakies słowo z ta literka do bazy wszystko dziala jak nalezy oraz wyniki na stronie rowniez pokazują "ó" .
Go to the top of the page
+Quote Post
Tomplus
post 3.01.2016, 08:47:12
Post #2





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Chaotycznie napisałeś, wrzuć po prostu kod tutaj.

Nie powiedziałeś jakie kodowanie mają pliki strony? bo być może mają kodowanie UTF-8 BOM albo ASCII zamiast UTF-8 without BOM.

Jak się uczysz tworzenia stron z wykorzystaniem baz danych, to zainteresuj się PDO, takie funkcje jak mysqli_real_escape_string będą zbyteczne.
Go to the top of the page
+Quote Post
wojciech533
post 3.01.2016, 13:49:24
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.01.2016

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


  1. <?php
  2. header('Content-type:text/html; charset=utf-8');
  3.  
  4. if(!isset($_POST['login']) || (!isset($_POST['password'])))
  5. {
  6. header('Location: index.php');
  7. exit();
  8. }
  9.  
  10. require_once 'connect.php';
  11. //konstruktor razem z wylaczeniem bledu lub ostrzezenia ze strony PHP
  12. $polaczenie = @new mysqli($host , $db_user , $db_password , $db_name);
  13.  
  14.  
  15. if($polaczenie->connect_errno!=0)
  16. {
  17. echo "Error: ".$polaczenie->connect_errno ;
  18. }
  19. else
  20. {
  21. $polaczenie->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");
  22. $polaczenie->query("SET CHARSET utf8") ;
  23. //mysqli_set_charset($mysqli,'utf8') ;
  24.  
  25.  
  26. $login = $_POST['login'];
  27. $haslo = $_POST['password'];
  28. $haslo2 = $_POST['password2'];
  29.  
  30. $login = htmlentities($login, ENT_COMPAT , "UTF-8") ;
  31. $haslo = htmlentities($haslo, ENT_COMPAT , "UTF-8") ;
  32. $haslo2 = htmlentities($haslo2, ENT_COMPAT , "UTF-8") ;
  33.  
  34.  
  35. if($haslo == $haslo2)
  36. {
  37. unset($_SESSION['error_pass']) ;
  38.  
  39. if($submit = @$polaczenie->query(
  40. sprintf("SELECT * FROM user WHERE login='%s'" ,
  41. mysqli_real_escape_string($polaczenie,$login))))
  42. {
  43. $ile_login = $submit->num_rows ;
  44. }
  45. if($ile_login > 0)
  46. {
  47. $_SESSION['error_login'] = '<span style="color:red"> Ten login jest już zajęty!</style>';
  48. mysqli_free_result($submit);
  49. header('Location:index.php');
  50. }
  51. else
  52. {
  53.  
  54. if($submit2= @$polaczenie->query(sprintf("INSERT INTO user (login , pass) VALUES( '%s', '%s')" ,
  55. mysqli_real_escape_string($polaczenie,$login) ,
  56. mysqli_real_escape_string($polaczenie,$haslo))))
  57. {
  58.  
  59. $_SESSION['zalogowany'] = true ;
  60.  
  61. $wiersz = mysqli_fetch_assoc($submit2);
  62.  
  63. $_SESSION['login'] = $wiersz['login'] ;
  64. $_SESSION['id'] = $wiersz['id'];
  65. unset($_SESSION['blad']);
  66. unset($_SESSION['error_pass']);
  67. unset($_SESSION['error_login']);
  68.  
  69.  
  70. mysqli_free_result($submit2);
  71.  
  72.  
  73.  
  74. header('Location:fantasy.php');
  75. }


Sprawdzilem pliki i mam tylko jedną opcje do wyboru z utf8 , nie mam ani utf8 with bom ani utf8 without bom , same utf8 .
Go to the top of the page
+Quote Post
viking
post 3.01.2016, 14:04:54
Post #4





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


A co zwracają wartości po htmlentities?
Bindowanie rób przez http://php.net/manual/en/mysqli.prepare.php


--------------------
Go to the top of the page
+Quote Post
wojciech533
post 3.01.2016, 14:25:45
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.01.2016

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


Poprawne nazwy , błąd jest gdzie indziej
Go to the top of the page
+Quote Post
viking
post 3.01.2016, 14:32:44
Post #6





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Nie chodzi mi o nazwy tylko jakie masz wartości na tym etapie. Czy echo $login; zwraca to co ma zwrócic?
Już pomijając bezsens tego kawałka kodu (wygląda jak mix funkcji sprzed 10 lat dopasowany do teraźniejszości) to powinieneś uzywać http://php.net/manual/en/function.password-hash.php
Pokaż też kod create tabeli


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 3.01.2016, 14:59:48
Post #7





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Korzystaj z edytorów takich jak Notepad++ lub Sublime. Tam jest zapis kodowania pliku bez BOM.

mysqli_real_escape_string() jest marnym zabezpieczeniem

a usuwanie zmiennych w unset możesz używać szeregowo unset($zmiennaA, $zmiennaB, $zmiennaC, ...)

header('Content-type:text/html; charset=utf-8'); jest zbędny, wcale nie daje ci szans że skrypt obsługuje UTF-8, bo dane które wysyłasz do skryptu muszą być w kodowaniu UTF-8. Dlatego są moje naciski o to kodowanie bez BOM, ponieważ z BOM w nagłówku są 3 niewidoczne znaki, które powodują (acz nie zawsze) że kodowanie strony się zmienia na inne niż jest w nagłówku.



Go to the top of the page
+Quote Post
com
post 3.01.2016, 15:01:48
Post #8





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


ono sie nie zmienia tylko plik ma białe znaki które wysyła do przeglądarki przed przetworzeniem skryptu php i rzuca potem notice itp wink.gif
Go to the top of the page
+Quote Post
wojciech533
post 3.01.2016, 15:20:25
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.01.2016

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


Problem rozwiązała biblioteka PDO , zacnie smile.gif dzieki za pomoc !
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 - 05:50