Nouveau problème avec les caractères dans les tables sql

Répondre
jackbocar
le 04/07/2014 à 17:42
jackbocar
Bonjour,

Je précise en premier que ma connexion MYSQL est en UTF-8, idem pur mes bases de données

J'aimerais avoir une explication à ce nouveau problème de caractères dans les enregistrements dans mes tables, résultats identiques lorsque je test avec UBUNTU ou WINDOWS et EASYPHP

Avec ce code voilà ce qui est inscrit dans la table :

<?php
$mysql_hostname = 'localhost';
$mysql_username = 'xxxxxxxxxxx';
$mysql_password = 'xxxxxxxxxxxxxxxx';
$mysql_dbname = 'xxxxxxxxxxxxxxxxxxxxxx';
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');

try {
$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if (isset($_POST['titre']) && isset($_POST['menu']) && isset($_POST['sortie']) && isset($_POST['realisateur']) && isset($_POST['acteurs']) && isset($_POST['genre']) && isset($_POST['nationalite']) && isset($_POST['news']) && isset($_POST['casting']) && isset($_POST['visible'])) {

if (!empty($_POST['titre']) && !empty($_POST['menu']) && !empty($_POST['sortie']) && !empty($_POST['realisateur']) && !empty($_POST['acteurs'])&& !empty($_POST['genre']) && !empty($_POST['nationalite']) && !empty($_POST['news']) && !empty($_POST['casting']) && !empty($_POST['visible'])) {

$stmt = $dbh->prepare("INSERT INTO Science_fiction (titre, menu, sortie, realisateur, acteurs, genre, nationalite, news, casting, visible) VALUES (:titre, :menu, :sortie, :realisateur, :acteurs, :genre, :nationalite, :news, :casting, :visible)");
$stmt->bindParam(':titre', $_POST['titre']);
$stmt->bindParam(':menu', $_POST['menu']);
$stmt->bindParam(':sortie', $_POST['sortie']);
$stmt->bindParam(':realisateur', $_POST['realisateur']);
$stmt->bindParam(':acteurs', $_POST['acteurs']);
$stmt->bindParam(':genre', $_POST['genre']);
$stmt->bindParam(':nationalite', $_POST['nationalite']);
$stmt->bindParam(':news', $_POST['news']);
$stmt->bindParam(':casting', $_POST['casting']);
$stmt->bindParam(':visible', $_POST['visible']);
$stmt->execute();
echo 'Quote saved.';
header('Location: index.php');
exit();
}
else {
$message = 'Au moins un des champs est vide.';
}//if isset
}//empty
}//try
catch (PDOException $ex) {
echo 'Connection failed: ' . htmlspecialchars($ex->getMessage());
}//catch
?>
<?php
if (isset($message)) {
echo '<h1><center>'.$message.'</center></h1>';
}
?>


Résultat :
Gerry Lane se lance dans une course contre la montre pour aider le monde à surmonter ses divisions et faire face à l'apocalypse. Dans tous les pays, par tous les moyens, l'humanité n'aura plus qu'un seul espoir de survie : la guerre.
(1h56min)

Comme vous pouvez le constater, l'enregistrement est particulier !!!


Avec celui-ci:
<?php
$mysqli = new mysqli("localhost","xxxxxxx","xxxxxxxxxxxxx","xxxxxxxxxxxxxxx");
$db->set_charset('UTF8');

if (mysqli_connect_errno()) {
printf("Echec de la connexion : %s\n", mysqli_connect_error());
exit();
}

$query = 'INSERT INTO Science_fiction VALUES("", "'.$_POST['titre'].'", "'.$_POST['menu'].'", "'.$_POST['sortie'].'", "'.$_POST['realisateur'].'", "'.$_POST['acteurs'].'", "'.$_POST['genre'].'", "'.$_POST['nationalite'].'", "'.$_POST['news'].'", "'.$_POST['visible'].'")';
$mysqli->query($query);

printf ("Le nouvel enregistrement a l'id %d.\n", $mysqli->insert_id);

$mysqli->close();
?>

Résultat :
Gerry Lane se lance dans une course contre la montre pour aider le monde à surmonter ses divisions et faire face à l'apocalypse. Dans tous les pays, par tous les moyens, l'humanité n'aura plus qu'un seul espoir de survie : la guerre.
(1h56min)

Comme vous pouvez le constater, l'enregistrement est particulier !!!

Avec celui-ci, voilà ce qui est inscrit :
<?php
include 'crud.class.php';
$crud = new crud();

include '../_require/videotheque_crud.php';

$values = array(
array("titre"=>"".$_POST['titre']."", "menu"=>"".$_POST['menu']."", "sortie"=>"".$_POST['sortie']."", "realisateur"=>"".$_POST['realisateur']."", "acteurs"=>"".$_POST['acteurs']."", "genre"=>"".$_POST['genre']."", "nationalite"=>"".$_POST['nationalite']."", "news"=>"".$_POST['news']."", "visible"=>"".$_POST['visible'].""),
);
$crud->dbInsert('films', $values);
?>


Résultat :
Gerry Lane se lance dans une course contre la montre pour aider le monde à surmonter ses divisions et faire face à l'apocalypse. Dans tous les pays, par tous les moyens, l'humanité n'aura plus qu'un seul espoir de survie : la guerre.
(1h56min)

Comme vous pouvez le constater, avec la class,crud,php, l'enregistrement est correct.

Alors, comment est-possible ?
Paphio-King
le 09/07/2014 à 18:05
Paphio-King
Bonjour JackBocar.
Alors je remarque que tu as mis ton
<?php $dbh->exec('SET NAMES utf8'); ?>


en dehors de ton try

moi je procède comme ceici
<?php
$user = 'root';
$pass = '';
$dsn = 'mysql:host=localhost;dbname=tarzan0001_';

try{
$dbh = new PDO($dsn, $user, $pass);
$dbh->exec('SET NAMES utf8');
} catch(PDOException $e){
die("Ereeur ! : " . $e->getMessage());
}
?>


essaye de mettre cette ligne dans ton try
<-- Paphio-King -->
LupusMic
le 09/07/2014 à 20:32
LupusMic
Paphio-King, dans le second exemple, tu remarqueras qu'il n'utilises pas PDO mais un basique MySQLi. Bref, ce n'est pas son soucis.

Bref, vérifie que:

Le HTML gébéré est bien en UTF-8.
Que le formulaire a bien l'attribut accept-charset pour dire au navigateur de répondre en UTF-8.
La requête HTML est bien servie en UTF-8. Au pire, il faut que tu mettes un http-equiv dans l'en-tête du document HTML, au mieux, c'est un en-tête HTTP (que tu définis dans Apache, directive DefaultCharset) ou depuis ton PHP.

<?php header('Content-type: text/html; charset=utf-8');
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours