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ó.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
  <form method="post" action="addemail.php">
    <label for="firstname">First name:</label>
    <input type="text" id="firstname" name="firstname" /><br />
    <label for="lastname">Last name:</label>
    <input type="text" id="lastname" name="lastname" /><br />
    <label for="email">Email:</label>
    <input type="text" id="email" name="email" /><br />
    <input type="submit" name="Submit" value="Submit" />
  </form>
</body>
</html>
PHP:
<?php
$fn = $_POST['firstname'];
$ln = $_POST['lastname'];
$em = $_POST['email'];

$dbc = mysqli_connect("localhost", "root", "", "mydb");
$query = "INSERT INTO email_list (first_name, last_name, email)".
		 "VALUES ('$fn', '$ln', '$em')";
mysqli_query($dbc, $query);
mysqli_close($dbc);   
?>
 
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.