Problème Encodage Base de donnée phpMyAdmin
Résolu/Fermé
leteste007
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013
-
28 févr. 2013 à 12:18
-helper- Messages postés 89 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 15 juin 2014 - 29 mai 2014 à 17:19
-helper- Messages postés 89 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 15 juin 2014 - 29 mai 2014 à 17:19
A voir également:
- Problème Encodage Base de donnée phpMyAdmin
- Encodage ascii - Guide
- Formules excel de base - Guide
- Gigaset a170h problème base ✓ - Forum telephonie fixe
- Échec inscription base gigaset ✓ - Forum telephonie fixe
- La base de données de sécurité du serveur n'a pas de compte d'ordinateur pour la relation ✓ - Forum Réseau
6 réponses
Utilisateur anonyme
1 mars 2013 à 11:06
1 mars 2013 à 11:06
Bonjour
Il ne suffit pas de définir tes tables en utf8, il faut aussi l'indiquer quand tu te connectes à mysql :
Tu n'es pas obligé d'utiliser les options PDO::ATTR_ERRMODE et PDO::ATTR_DEFAULT_FETCH_MODE qui correspondent à mes préférences personnelles.
Par contre, n'utilise jamais utf8_decode juste pour voir si ça marche mieux comme ça. Cette fonction n'a strictement rien à faire dans un site construit en utf8, sauf dans des cas très particuliers, par exemple si tu veux créer un fichier en iso-8859-1 à partir de tes données en utf-8.
Il ne suffit pas de définir tes tables en utf8, il faut aussi l'indiquer quand tu te connectes à mysql :
$bdd=
new PDO('mysql:host=localhost; dbname=film', 'root',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC );
Tu n'es pas obligé d'utiliser les options PDO::ATTR_ERRMODE et PDO::ATTR_DEFAULT_FETCH_MODE qui correspondent à mes préférences personnelles.
Par contre, n'utilise jamais utf8_decode juste pour voir si ça marche mieux comme ça. Cette fonction n'a strictement rien à faire dans un site construit en utf8, sauf dans des cas très particuliers, par exemple si tu veux créer un fichier en iso-8859-1 à partir de tes données en utf-8.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
28 févr. 2013 à 13:10
28 févr. 2013 à 13:10
Bonjour,
1- vérifie le charset de ta page php. Il doit être en utf-8.
2- tu as peut être dans ton code, ce genre de "test" :
à remplacer comme ceci :
ou alors, ne pas hésiter à utiliser utf8_decode :
1- vérifie le charset de ta page php. Il doit être en utf-8.
2- tu as peut être dans ton code, ce genre de "test" :
$monmessage=htmlentities($monmessage, ENT_QUOTES);ou
$montext = htmlspecialchars($montext, ENT_QUOTES);
à remplacer comme ceci :
$monmessage=htmlentities($monmessage, ENT_QUOTES, "UTF-8");ou
$montext = htmlspecialchars($montext, ENT_QUOTES, 'UTF-8');
ou alors, ne pas hésiter à utiliser utf8_decode :
$montext = utf8_decode($montext);
leteste007
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013
1 mars 2013 à 10:51
1 mars 2013 à 10:51
Merci d'avoir répondu, cependant ça ne fonctionne pas. Voici mon code:
<?php
try
{
$bdd = new PDO('mysql:host=localhost; dbname=film', 'root', '') ;
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
if (!empty($_POST['titre']))
{
$titre=$_POST['titre'] ;
$nationalite=$_POST['nationalite'] ;
$real=$_POST['realisateur'] ;
$genre=$_POST['genre'] ;
$acteur=$_POST['acteur'] ;
$epoque=$_POST['epoque'] ;
$annee=$_POST['annee'] ;
$duree=$_POST['duree'] ;
$resume=$_POST['resume'] ;
$note=$_POST['note'] ;
if (!empty($_FILES['pochette']))
{
if ($_FILES['pochette']['size'] <= 4000000) // on autorise une taille maxi de pochette ? Mo
{
$infosfichier=pathinfo($_FILES['pochette']['name']) ;
$extension_upload=$infosfichier['extension'] ; // Extension du fichier
$extensions_autorisees = array('jpg', 'jpeg', 'png') ;
if (in_array($extension_upload, $extensions_autorisees))
{
$nomfichier=$titre ;
move_uploaded_file($_FILES['pochette']['tmp_name'],"pochettes/$nomfichier.$extension_upload") ; // Déplace un fichier
$pochette="pochettes/$titre.$extension_upload" ;
echo "Fichier envoyé" ;
}
else {
echo ("Extension non valide") ;
header('Refresh: 1, URL=membre.php');
}
}
else {echo "Taille du fichier non valide";
header('Refresh: 1, URL=membre.php');}
}
}
$reqAjout=$bdd->prepare('INSERT INTO film (titre, nationalite, realisateur, genre, resume, pochette, acteur, epoque, annee, date_ajout, note, duree) VALUES (:titre, :nationalite, :realisateur, :genre, :resume, :pochette, :acteur, :epoque, :annee, CURDATE(), :note, :duree)');
$reqAjout->execute(array(
'titre' => $titre,
'nationalite'=> $nationalite,
'realisateur' => $real,
'genre' => $genre,
'resume' => htmlspecialchars($resume, ENT_QUOTES, 'UTF-8'),
'pochette' => $pochette,
'acteur' => $acteur,
'epoque' => $epoque,
'annee' => $annee,
'note' => $note,
'duree'=>$duree)) ;
echo "<br>Le film a été ajouté à la base de donnée" ;
header('Refresh: 1, URL=membre.php') ;
?>
Le echo "<br>Le film a été ajouté à la base de donnée" ; s'affiche correctement, la page est bien en utf8, le problème vient de la base de donnée qui ne récuepre pas le bon formulaire avec le bon encodage ( j'ai par exemple des Endetté jusqu'au cou dans une affaire de water bed ) dans mon champ résumé de ma table bien que celle çi soit bien en utf8_general_ci ... Je ne comprends pas et je ne sais quoi faire...
<?php
try
{
$bdd = new PDO('mysql:host=localhost; dbname=film', 'root', '') ;
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
if (!empty($_POST['titre']))
{
$titre=$_POST['titre'] ;
$nationalite=$_POST['nationalite'] ;
$real=$_POST['realisateur'] ;
$genre=$_POST['genre'] ;
$acteur=$_POST['acteur'] ;
$epoque=$_POST['epoque'] ;
$annee=$_POST['annee'] ;
$duree=$_POST['duree'] ;
$resume=$_POST['resume'] ;
$note=$_POST['note'] ;
if (!empty($_FILES['pochette']))
{
if ($_FILES['pochette']['size'] <= 4000000) // on autorise une taille maxi de pochette ? Mo
{
$infosfichier=pathinfo($_FILES['pochette']['name']) ;
$extension_upload=$infosfichier['extension'] ; // Extension du fichier
$extensions_autorisees = array('jpg', 'jpeg', 'png') ;
if (in_array($extension_upload, $extensions_autorisees))
{
$nomfichier=$titre ;
move_uploaded_file($_FILES['pochette']['tmp_name'],"pochettes/$nomfichier.$extension_upload") ; // Déplace un fichier
$pochette="pochettes/$titre.$extension_upload" ;
echo "Fichier envoyé" ;
}
else {
echo ("Extension non valide") ;
header('Refresh: 1, URL=membre.php');
}
}
else {echo "Taille du fichier non valide";
header('Refresh: 1, URL=membre.php');}
}
}
$reqAjout=$bdd->prepare('INSERT INTO film (titre, nationalite, realisateur, genre, resume, pochette, acteur, epoque, annee, date_ajout, note, duree) VALUES (:titre, :nationalite, :realisateur, :genre, :resume, :pochette, :acteur, :epoque, :annee, CURDATE(), :note, :duree)');
$reqAjout->execute(array(
'titre' => $titre,
'nationalite'=> $nationalite,
'realisateur' => $real,
'genre' => $genre,
'resume' => htmlspecialchars($resume, ENT_QUOTES, 'UTF-8'),
'pochette' => $pochette,
'acteur' => $acteur,
'epoque' => $epoque,
'annee' => $annee,
'note' => $note,
'duree'=>$duree)) ;
echo "<br>Le film a été ajouté à la base de donnée" ;
header('Refresh: 1, URL=membre.php') ;
?>
Le echo "<br>Le film a été ajouté à la base de donnée" ; s'affiche correctement, la page est bien en utf8, le problème vient de la base de donnée qui ne récuepre pas le bon formulaire avec le bon encodage ( j'ai par exemple des Endetté jusqu'au cou dans une affaire de water bed ) dans mon champ résumé de ma table bien que celle çi soit bien en utf8_general_ci ... Je ne comprends pas et je ne sais quoi faire...
leteste007
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013
1 mars 2013 à 13:58
1 mars 2013 à 13:58
C'est mieux, il n'y a plus que deux choses qui ne s'affichent pas correctement il s'agit des apostrophes, les accents fonctionnent.
Seuls les ' et " ne sont pas bien affichés ( même dans ma base de donnée ) toujours lors de l'envoie de mon formulaire (si je modifie manuellement dans ma base de donnée, l'affichage se fait bien)..
Seuls les ' et " ne sont pas bien affichés ( même dans ma base de donnée ) toujours lors de l'envoie de mon formulaire (si je modifie manuellement dans ma base de donnée, l'affichage se fait bien)..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
1 mars 2013 à 14:25
1 mars 2013 à 14:25
Qu'entends-tu par 'pas bien affichés' ?
Si sur ton système magic_quotes_gpc est à 1, alors dans les données que tu reçois par $_POST,$_GET ou $_COOKIES les apostrophes sont précédés du backslash (\). Il faut donc les supprimer en faisant :
$titre=stripslashes($_POST['titre'] ;) , etc...
Il ne faut pas utiliser htmlspecialchars ou htmlentities avant d' enregistrer les données dans la base, par contre il faut obligatoirement utiliser htmlspecialchars pour l'envoi des données si tu veux qu'elles apparaissent telles qu'elles avaient été saisies.
Si sur ton système magic_quotes_gpc est à 1, alors dans les données que tu reçois par $_POST,$_GET ou $_COOKIES les apostrophes sont précédés du backslash (\). Il faut donc les supprimer en faisant :
$titre=stripslashes($_POST['titre'] ;) , etc...
Il ne faut pas utiliser htmlspecialchars ou htmlentities avant d' enregistrer les données dans la base, par contre il faut obligatoirement utiliser htmlspecialchars pour l'envoi des données si tu veux qu'elles apparaissent telles qu'elles avaient été saisies.
-helper-
Messages postés
89
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
15 juin 2014
27
Modifié par -helper- le 29/05/2014 à 17:19
Modifié par -helper- le 29/05/2014 à 17:19
Mon père vous m'étonnez !
Le set NAMES utf8 suivi du GPC, je suis ébloui par vos connaissance !
Tel un disciple je m'agenouille et je prie, pour un jour vous arriver à la cheville !
Lol ! (pardon je m'égare !)
Mais c'est bien vu, ca sent le vécu !
Le set NAMES utf8 suivi du GPC, je suis ébloui par vos connaissance !
Tel un disciple je m'agenouille et je prie, pour un jour vous arriver à la cheville !
Lol ! (pardon je m'égare !)
Mais c'est bien vu, ca sent le vécu !
leteste007
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013
1 mars 2013 à 16:34
1 mars 2013 à 16:34
ça fonctionne enfin, j'ai retiré tous mes htmlspecialchars ( avant d'enregistrer les données dans la de donnée ) et j'ai retiré mes utf8_encode avant d'afficher sur le site. Merci à toi !
28 mai 2014 à 12:49
Un grand merci Padre ! :p
try
{
$bdd = new PDO('mysql:host=localhost;dbname=bd1', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}