Brak polskich znaków - próbowałem już chyba wszystkich rozwiązań

0

Hejka!
Po przeniesieniu się na inny hosting, w bazie mysql nie wyświetlają się polskie znaki, które wcześniej wysłane były przez formularz php.
Dodam, że na innym hostingu wszystko śmigało.
Przeszukałem całe forum, ale nie znalazłem odpowiedzi na moje pytanie.
w mysql jest ustawione utf8_general_ci
Pomocy! :<

$con = mysqli_connect($host, $userName, $password, $dbName);
mysqli_query("SET NAMES utf8");

$name = $_POST['name'];  
$surname = $_POST['surname'];  
$age = $_POST['age'];  
$sex = $_POST['sex'];  
$height = $_POST['height'];  
$weight = $_POST['weight'];  
$look = $_POST['look']; 
$personality = $_POST['personality']; 
$history = $_POST['history']; 
$img = $_POST['img'];
$token = $_POST['token']; 

$query2 = mysqli_query($con, "SELECT userDISID FROM tokens WHERE token='".$token."'");
$userDISID = mysqli_fetch_row($query2);



$query = mysqli_query($con, "SELECT * FROM tokens WHERE token='".$token."'");


    if (!$query)
    {
        die('Error: ' . mysqli_error($con));
    }

else if(mysqli_num_rows($query) == 0){
	
	echo "Nieprawidłowy token.";
}

else{
$userDISID2 = implode("|",$userDISID);
	 $sql3 = "INSERT INTO kartyPostaci (token, userDISID, isVerified, name, surname, age, sex, height, weight, look, personality, history, img) VALUES ('$token', '$userDISID2', 'Nie', '$name', '$surname', '$age', '$sex', '$height', '$weight', '$look', '$personality', '$history', '$img')";

	 $query3 = mysqli_query($con, $sql3);


	 $sql4 = "DELETE FROM tokens WHERE token = '$token'";
	 $query4 = mysqli_query($con, $sql4);
	 
	 $sql5 = "SET CHARSET utf8";
	 $query5 = mysqli_query($con, $sql5);
	echo "Dodano kartę.";

}









?>
0

Na myśl przychodzi ustawienia nowego hostingu, wersji php, mysql, porównać ze starym.

0

Co powinienem zrobić, jeśli się różnią?
Zmieniłem wersję php na taką samą, jak była na poprzednim. Z mysql chyba nic nie poradzę.
Błąd nie ustał.

2

Podziel na trzy kroki.

  1. Jeśli robiłeś zrzut starej bazy do pliku tekstowego, otwórz ten plik w jakimś edytorze dobrze obsługującym UTF-8 (np. Notepad++, Sublime Text) i zobacz, czy zachowało się prawidłowe kodowanie znaków.
  2. Przez phpMyAdmin zaglądnij do treści nowej bazy danych po zaimportowaniu danych, czy dane polskie znaki mają taką postać jak powinny.
  3. Dopiero jeśli powyższe kroki nie dadzą odpowiedzi, szukaj problemu w kodzie PHP.
2

Podaj kodowanie: servera, bazy, tabeli, kolumny (któregoś nie ma w MySQL).
Podaj kodowanie pliku backupu.
Podaj kodowanie pliku PHP.
(Ten sql5 masz w jakimś dziwnym miejscu. To powinno być jedno z pierwszych zapytań po połączeniu do bazy)
Podaj <meta charset="???" />

Czy błąd masz przy zapisie do bazy, czy przy odczycie?

0
-daniel- napisał(a):

Podziel na trzy kroki.

  1. Jeśli robiłeś zrzut starej bazy do pliku tekstowego, otwórz ten plik w jakimś edytorze dobrze obsługującym UTF-8 (np. Notepad++, Sublime Text) i zobacz, czy zachowało się prawidłowe kodowanie znaków.
  2. Przez phpMyAdmin zaglądnij do treści nowej bazy danych po zaimportowaniu danych, czy dane polskie znaki mają taką postać jak powinny.
  3. Dopiero jeśli powyższe kroki nie dadzą odpowiedzi, szukaj problemu w kodzie PHP.
  1. zachowało się prawidłowe kodowanie
  2. zaimportowane dane mają polskie znaki w bazie mysql
    Czyli wychodzi na to, że to błąd w php
    (wrzucam eksport tabeli, tak, żeby być pewnym, że wszystko ok: https://pastebin.com/xMhXgTnX)
Marcin.Miga napisał(a):

Podaj kodowanie: servera, bazy, tabeli, kolumny (któregoś nie ma w MySQL).
Podaj kodowanie pliku backupu.
Podaj kodowanie pliku PHP.
(Ten sql5 masz w jakimś dziwnym miejscu. To powinno być jedno z pierwszych zapytań po połączeniu do bazy)
Podaj <meta charset="???" />

Czy błąd masz przy zapisie do bazy, czy przy odczycie?

  1. Nie do końca jestem pewien, gdzie szukać kodowania servera, ale jeśli to to, które znajduje się na stronie głównej phpmyadmin to:
    kodowanie serwera> utf8_polish_ci
    kodowanie bazy> utf8_polish_ci
    kodowanie tabeli> utf8_polish_ci
    kodowanie kolumny> utf8_polish_ci
  2. Pliczek załączyłem wyżej
  3. plik.php, na którym jest formularz: https://pastebin.com/j9PC3c99
    plik .php, który wysyła zapytanie do bazy (z usuniętymi danymi logowania): https://pastebin.com/cypPP33A
  4. <meta charset="UTF-8">
    
  5. Odczyt i zapis kiełbasi tak samo :<

Pozdrawiam!

1

<style> video-responsive{ wrzuć na koniec head, <meta charset="UTF-8"> wywinduj do góry na początek head, przeglądarki podglądają tylko mały początkowy fragment pliku i może się nie łapie.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
... i reszta

lang ma być en?

Mogłeś też wykorzystać migrację na przejście z utf8 (mb3) na utf8mb4.

Możesz jeszcze sprawdzić, czy echo lub print prawidłowo generuje polskie znaki print('ĄĆĘŁŃÓŚŹŻąćęłńóśźż');. To pozwoli określiż zgodność kodowania w skrypcie i w przeglądarce.

0
-daniel- napisał(a):

<style> video-responsive{ wrzuć na koniec head, <meta charset="UTF-8"> wywinduj do góry na początek head, przeglądarki podglądają tylko mały początkowy fragment pliku i może się nie łapie.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
... i reszta

lang ma być en?

Mogłeś też wykorzystać migrację na przejście z utf8 (mb3) na utf8mb4.

Możesz jeszcze sprawdzić, czy echo lub print prawidłowo generuje polskie znaki print('ĄĆĘŁŃÓŚŹŻąćęłńóśźż');. To pozwoli określiż zgodność kodowania w skrypcie i w przeglądarce.

usunąłem <style> całkowicie, zmieniłem lang na 'pl'

Print pomyślnie wygenerował polskie znaki, ale wciąż formularz wysyła krzaczki

1

A zrobiłeś poprawkę wg @Marcin.Miga "Ten sql5 masz w jakimś dziwnym miejscu"

Czy musisz tworzyć dwa osobne połączenia do bazy? Nie lepiej otworzyć jedno i dobrze je skonfigurować?

$con = mysqli_connect($host, $userName, $password, $dbName);
//Tu może brakować
mysqli_set_charset ( $con, 'utf8' );
...
// Drugie połączenie???
$mysqli = new mysqli($host, $userName, $password, $dbName);

Osobiście preferuję PDO:

$DB = new PDO(
		'mysql:host=jakiś_host;dbname=nazwa_bazy;charset=utf8mb4',
		'nazwa_użytkownika',
		'hasło' );
0
-daniel- napisał(a):

A zrobiłeś poprawkę wg @Marcin.Miga "Ten sql5 masz w jakimś dziwnym miejscu"

Czy musisz tworzyć dwa osobne połączenia do bazy? Nie lepiej otworzyć jedno i dobrze je skonfigurować?

$con = mysqli_connect($host, $userName, $password, $dbName);
//Tu może brakować
mysqli_set_charset ( $con, 'utf8' );
...
// Drugie połączenie???
$mysqli = new mysqli($host, $userName, $password, $dbName);

Osobiście preferuję PDO:

$DB = new PDO(
		'mysql:host=jakiś_host;dbname=nazwa_bazy;charset=utf8mb4',
		'nazwa_użytkownika',
		'hasło' );

Sukces, dodałem mysqli_set_charset ( $con, 'utf8' ); zaraz pod pierwszym połączeniem i podziałało.
Dziękuję panowie <3

1 użytkowników online, w tym zalogowanych: 0, gości: 1