• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL Polskie znaki

Object Storage Arubacloud
0 głosów
3,842 wizyt
pytanie zadane 17 grudnia 2016 w SQL, bazy danych przez FruitBandit Nowicjusz (190 p.)

Witam,

Zrobiłem formularz dodający do bazy danych rekordy. Wszystko działa oprócz polskich znaków. Po wpisaniu w formularz naszych znaków typu: ą,ę pojawiają się krzaczki w bazie danych. :/ Dodam, że w pliku mam utf-8 jak i w bazie danych mam również ustawiony język utf8_polish_ci . Jak to zrobić żeby zapisywały się polskie znaczki?

<?php 
// odbieramy dane z formularza 
$pytanie = $_POST['pytanie']; 
$odpa = $_POST['odpa']; 
$odpb = $_POST['odpb']; 
$odpc = $_POST['odpc']; 
$odpd = $_POST['odpd']; 
$answer = $_POST['answer']; 

if($pytanie and $odpa and $odpb and $odpc and $odpd and $answer) { 
     
    // łączymy się z bazą danych 
    $connection = @mysql_connect('localhost', 'test', 'test') 
    or die('Brak połączenia z serwerem MySQL'); 
    $db = @mysql_select_db('test', $connection) 
    or die('Nie mogę połączyć się z bazą danych'); 
     
    // dodajemy rekord do bazy 
    $ins = @mysql_query("INSERT INTO Quiz SET pytanie='$pytanie', odpa='$odpa', odpb='$odpb', odpc='$odpc', odpd='$odpd', answer='$answer'"); 
     
    if($ins) echo "Rekord został dodany poprawnie"; 
    else echo "Błąd nie udało się dodać nowego rekordu"; 
     
    mysql_close($connection); 
} 

?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<title>Uzupełnianie pytań</title>	
</head>

<body>
	</html>
<form action="index.php" method="post"> 
Pytanie:<br /> 
<input type="text" name="pytanie" /><br /> 
Odpowiedź A:<br /> 
<input type="text" name="odpa" /><br /> 
Odpowiedź B:<br />
<input type="text" name="odpb" /><br /> 
Odpowiedź C:<br />
<input type="text" name="odpc" /><br /> 
Odpowiedź D:<br />
<input type="text" name="odpd" /><br /> 
Odpowiedź poprawna:<br />    
<input type="text" name="answer" /><br /> 
<input type="submit" value="dodaj" /> 
</form>
	
</body>
</html>

 

2 odpowiedzi

+1 głos
odpowiedź 17 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 17 grudnia 2016 przez FruitBandit
 
Najlepsza

Zacznij od tego, aby nie używać funkcji zaczynających się od mysql_ bo są one usunięte w PHP >= 7, a od dawna zdeprecjonowane. Co to oznacza w praktyce? Jeśli na serwerze, na którym będziesz chciał odpalić swój skrypt, trafi się PHP przynajmniej w wersji 7 to tego nie zrobisz, wyskoczy fatal error i wszystko się wysypie. Przenieś się na PDO lub mysqli.

Co do samego problemu to dodaj informację o kodowaniu znaków w połączeniu, powinno pomóc. W przypadku PDO wystarczy w dsn dopisać charset, w przypadku mysqli użyj set_charset.

I nie używaj @ bo one ukrywają błędy, a przecież zamiast ukrywać problemy lepiej je rozwiązać.

komentarz 17 grudnia 2016 przez FruitBandit Nowicjusz (190 p.)
Wszystko mi się udało (zrobiłem PDO). Dziękuję serdecznie za pomoc. Ale mam kolejny dylemat. Po wyświetleniu informacji (Pomyślnie wysłano rekord) chciałbym żeby np po 5 sekundach strona wracała do formularza i go wyczyściła.
komentarz 17 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
Przychodzą mi na myśl dwa pomyły zrobienia tego: albo przez metę refresh, albo przez JavaScript. Wyczyszczenie formularza powinno nastąpić automatyczne jeśli po prostu wykonasz przekierowanie na daną stronę, powinien się załadować pusty od nowa.

W tym temacie widzę pokazane obydwa rozwiązania: http://stackoverflow.com/questions/3292038/redirect-website-after-certain-amount-of-time
1
komentarz 17 grudnia 2016 przez FruitBandit Nowicjusz (190 p.)
@Arkadiusz Dziękuję za pomoc ;)
0 głosów
odpowiedź 17 grudnia 2016 przez Dar3Q Obywatel (1,200 p.)
mysqli_query($connection, "SET CHARSET utf8");
mysqli_query($connection, "SET NAMES `utf8` COLLATE `utf8_polish_ci`"); 

Dodaj coś takiego po:

  $db = @mysql_select_db('test', $connection) 
    or die('Nie mogę połączyć się z bazą danych');

 

komentarz 17 grudnia 2016 przez FruitBandit Nowicjusz (190 p.)

Niestety nadal tak samo a na dodatek wyskoczył taki błąd:


Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in /home/p495530/public_html/index.php on line 18

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in /home/p495530/public_html/index.php on line 19
Rekord został dodany poprawnie

 

komentarz 17 grudnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
@Dar3Q przecież to głupota, aby pokazywać użycie funkcji z mysqli podczas gdy pytający robi w mysql_ (nie powinien, ale musi zmienić wszystko, a nie dodać nagle funkcje z mysqli).

Poza tym zamiast zapisów jakie podałeś: http://php.net/manual/pl/mysqli.set-charset.php

Podobne pytania

+1 głos
1 odpowiedź 709 wizyt
pytanie zadane 28 lipca 2021 w PHP przez kordix Gaduła (3,910 p.)
0 głosów
0 odpowiedzi 459 wizyt
pytanie zadane 22 maja 2019 w PHP przez iframeeh Użytkownik (680 p.)
0 głosów
2 odpowiedzi 1,433 wizyt
pytanie zadane 23 lutego 2017 w PHP przez prymex Obywatel (1,250 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...