ugrás a tartalomhoz

UTF-8 Ékezet hiba

Numcsi · 2011. Ápr. 25. (H), 14.37
Hogy lehet megadni űrlapból ékezetes betűket az adatbázis táblába, aminek a mezői típusa: utf8_unicode_ci.
Normál űrlappal kitöltöm az adatokat, és INSERT INTO parancsal fel is töltöm.

pl. a Gábor így jelenik meg az adatbázis szerver mezejében: Gábor

Az következőkkel tisztában vagyok: Nincs ellenőrzés még beépítve, bármi megadható stb. Minden kapcsolati adat jó.
  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" lang="en">  
  3. <head>  
  4. </head>  
  5. <body>  
  6.   <form method="post" action="addemail.php">  
  7.     <label for="firstname">First name:</label>  
  8.     <input type="text" id="firstname" name="firstname" /><br />  
  9.     <label for="lastname">Last name:</label>  
  10.     <input type="text" id="lastname" name="lastname" /><br />  
  11.     <label for="email">Email:</label>  
  12.     <input type="text" id="email" name="email" /><br />  
  13.     <input type="submit" name="Submit" value="Submit" />  
  14.   </form>  
  15. </body>  
  16. </html>  
PHP:
  1. <?php  
  2. $fn = $_POST['firstname'];  
  3. $ln = $_POST['lastname'];  
  4. $em = $_POST['email'];  
  5.   
  6. $dbc = mysqli_connect("localhost""root""""mydb");  
  7. $query = "INSERT INTO email_list (first_name, last_name, email)".  
  8.          "VALUES ('$fn', '$ln', '$em')";  
  9. mysqli_query($dbc$query);  
  10. mysqli_close($dbc);     
  11. ?>  
 
1

Én így kapcsolódok

Hidvégi Gábor · 2011. Ápr. 25. (H), 16.28
Én így kapcsolódok (objektum-orientált stílusban, szóval picit át kell dolgoznod a procedurálishoz):

$this->mysqli = mysqli_init();
$this->mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$this->mysqli->options(MYSQLI_INIT_COMMAND, 'SET NAMES utf8');
$this->mysqli->real_connect(DBHOST, DBAZON, DBPASS, DBASE, DBPORT)

A kulcs a SET NAMES utf8, amit így is megadhatsz, vagy pedig kapcsolódás után kiadhatod ezt mint legelső lekérdezést.
2

Egyezés

janoszen · 2011. Ápr. 25. (H), 20.41
A következő részek karakterkódolásának kell egyeznie:

  • A HTML dokumentum
  • A HTTP fejléc (ha van)
  • Az adatbázis kapcsolat karakterkódolása (SET NAMES)
  • Az adatbázis tábla (ez nem feltétlenül kötelező)
3

SET NAMES helyett uriember

Tyrael · 2011. Ápr. 25. (H), 23.41
SET NAMES helyett uriember hasznalja a mysql_set_charset fuggvenyt.

Tyrael
4

Miért? A php dokumentáció is

Hidvégi Gábor · 2011. Ápr. 26. (K), 10.23
Miért? A php dokumentáció is ezt mondja, de nem igazán fejtik ki az okát.
5

ha SET NAMES-szel valtasz

Tyrael · 2011. Ápr. 26. (K), 10.44
ha SET NAMES-szel valtasz client encoding-ot, arrol nem tud a PHP, viszont a mysql_real_escape_string csak az encoding ismereteben tudja 100%os biztonsaggal escape-elni a parametereket.

reszletekert lasd meg:
http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

Tyrael
6

Köszönöm, valami ilyesmit

Hidvégi Gábor · 2011. Ápr. 26. (K), 10.47
Köszönöm, valami ilyesmit sejtettem én is.