IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème encode UTF8 PHP/Mysql


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut Problème encode UTF8 PHP/Mysql
    Bonjour,

    J'ai un problème avec l'insertion de données php vers mysql, il insère Plat préparé au lieu de plat préparé.
    J'ai déjà eu ce soucis en select que j'ai résolue en mettant la page php en utf8 sans signature.

    Cela fait 3h que je cherche, j'ai essayé énormément de solution proposé sur les forums sans succès, peut être que je m'y prends mal.
    Ma base de donnée mysql > latin1_swedish_ci

    Voici le code sans amélioration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    mysql_connect("", "", "");
    mysql_select_db("");
     
    $Id = htmlentities($_POST['id']);
    $Nom = htmlentities($_POST['Nom']);
    $Email = htmlentities($_POST['Email']);
    $Adresse = htmlentities($_POST['Adresse']);
    $Naissance = htmlentities($_POST['Naissance']);
    $Tel_Fixe = htmlentities($_POST['Tel_Fixe']);
    $Tel_Port = htmlentities($_POST['Tel_Port']);
    $Date = htmlentities($_POST['Date']);
    $Secu = htmlentities($_POST['Secu']);
    $Plat=htmlentities($_POST['Plat']);
    $Dessert = htmlentities($_POST['Dessert']);
    $Commentaire = htmlentities($_POST['Commentaire']);
     
    mysql_query("UPDATE pb_cuisinez SET Date= '" .$Date. "',Plat= '" .($Plat). "',Nom= '" .$Nom. "',Mail= '" .$Email. "',Tel= '" .$Tel_Fixe. "',Message= '" .$Commentaire. "',TelPort= '" .$Tel_Port. "',Secu= '" .$Secu. "',Dessert= '" .$Dessert. "',Adresse= '" .$Adresse. "',DateNaissance= '" .$Naissance. "' WHERE ID = '" .$Id. "'");
     
    mysql_close();
    ?>
    Merci pour votre aide

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    c'est tout à fait normal on utilise pas htmlentities ou htmlspecialchars quand on veut interagir avec une BDD, leur utilité est à l'affiche. Si tu veux protéger tes données tu as mysql_real_escape_string.

    PS: de toute façon on utilise plus les fonctions mysql_xxx pour les bases de données MYSQL, on a soit MYSQLI ou PDO (avec les requêtes préparées dans la majorité des cas comme celui que tu présentes actuellement) sauf quand on a pas le choix

    J'espère aussi que ce ne sont pas tes véritables paramètres de connexion, dans ce cas faudra les éditer.
    Le bienfait n'est jamais perdu

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    ok merci j'ai modifié le code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    $mysqli = new mysqli("", "", "", "");
     
    $Id = $_POST['id'];
    $Nom = $_POST['Nom'];
    $Email = $_POST['Email'];
    $Adresse = $_POST['Adresse'];
    $Naissance = $_POST['Naissance'];
    $Tel_Fixe = $_POST['Tel_Fixe'];
    $Tel_Port = $_POST['Tel_Port'];
    $Date = $_POST['Date'];
    $Secu = $_POST['Secu'];
    $Plat= $_POST['Plat'];
    $Dessert = $_POST['Dessert'];
    $Commentaire = $_POST['Commentaire'];
     
    $mysqli->query("UPDATE pb_cuisinez SET Date= '" .$Date. "',Plat= '" .($Plat). "',Nom= '" .$Nom. "',Mail= '" .$Email. "',Tel= '" .$Tel_Fixe. "',Message= '" .$Commentaire. "',TelPort= '" .$Tel_Port. "',Secu= '" .$Secu. "',Dessert= '" .$Dessert. "',Adresse= '" .$Adresse. "',DateNaissance= '" .$Naissance. "' WHERE ID = '" .$Id. "'");
     
    $mysqli::close;
     
    ?>
    J'ai toujours le même problème

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par dwlapp Voir le message
    il insère Plat pr&eacute;par&eacute; au lieu de plat préparé.
    est ce que vous voyez cela avec phpMyAdmin ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Oui je vois ça dans php my admin

  6. #6
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Qu'est-ce qui se passe avec ton nouveau code (qui n'est pas du tout sécurisé) ?
    Est-ce que la MàJ se passe bien ? Ajoute un echo $mysqli->affected_rows; après la requête pour voir si c'est le cas
    Tu peux virer $mysqli::close.
    Tu devrais regarder du côté de mysqli::prepare http://php.net/manual/en/mysqli.prepare.php pour ce genre d'opération
    Tu n'as pas d’environnement de dev en local ?
    Le bienfait n'est jamais perdu

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si tu débutes, je te conseille VIVEMENT d'utiliser PDO (plutôt que mysqli_), ainsii que les requêtes préparées pour PROTEGER des injections SQL.



    Idem : TOUT passer en UTF-8


  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Bonjour et merci pour votre aide.

    J'ai suivi vos conseils et voici aujourd'hui le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
     
    header( 'content-type: text/html; charset=utf-8' );
     
    try {
        $strConnection = 'mysql:host=**;dbname=**'; //Ligne 1
        $arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
        $pdo = new PDO($connStr, '**', '**', $arrExtraParam); //Ligne 3; Instancie la connexion
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
    }
    catch(PDOException $e) {
        $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
        die($msg);
    }
     
    $Id = $_POST['id'];
    $Nom = $_POST['Nom'];
    $Email = $_POST['Email'];
    $Adresse = $_POST['Adresse'];
    $Naissance = $_POST['Naissance'];
    $Tel_Fixe = $_POST['Tel_Fixe'];
    $Tel_Port = $_POST['Tel_Port'];
    $Date = $_POST['Date'];
    $Secu = $_POST['Secu'];
    $Plat= $_POST['Plat'];
    $Dessert = $_POST['Dessert'];
    $Commentaire = $_POST['Commentaire'];
     
    $query = 'UPDATE pb_cuisinez SET Date=?, Plat=?, Nom=?, Mail=?, Tel=?, Message=?, TelPort=?, Secu=?, Dessert=?, Adresse=?, DateNaissance=? WHERE ID=?';
    $prep = $pdo->prepare($query);
     
    $prep->bindValue(1, $Date, PDO::PARAM_STR);
    $prep->bindValue(2, $Plat, PDO::PARAM_FLOAT);
    $prep->bindValue(3, $Nom, PDO::PARAM_STR);
    $prep->bindValue(4, $Email, PDO::PARAM_FLOAT);
    $prep->bindValue(5, $Tel_Fixe, PDO::PARAM_STR);
    $prep->bindValue(6, $Commentaire, PDO::PARAM_FLOAT);
    $prep->bindValue(7, $Tel_Port, PDO::PARAM_STR);
    $prep->bindValue(8, $Secu, PDO::PARAM_FLOAT);
    $prep->bindValue(9, $Dessert, PDO::PARAM_STR);
    $prep->bindValue(10, $Adresse, PDO::PARAM_STR);
    $prep->bindValue(11, $Naissance, PDO::PARAM_FLOAT);
    $prep->bindValue(12, $Id, PDO::PARAM_FLOAT);
    $prep->execute();
     
    $prep = NULL;
     
    ?>
    Seulement j'ai mon plat préparé qui entre dans ma base comme ceci : Plat préparé;

    Je ne comprends pas ce que j'ai oublié.
    Ma base est en latin1_swedish_ci j'ai essayé avec utf8_unicode_ci
    L'option d'enregistrement avancées est en unicode utf8 sans signature j'ai essayé avec signature.

    Avez vous des idées sur ce qu'il me manque ?

    Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    • Base de données ET champs des tables : "utf8_general_ci"


    Pour la connexion (à mettre dans un fichier EXTERNE _connexion.php, pour ne pas être obligé de le recopier à chaque fois !) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try {
        $pdo_ExtraParams = array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,	// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 	// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"	// encodage UTF-8
        );
        $pdo = new PDO( 'mysql:host=**;dbname=**', '**', '**', $pdo_ExtraParams ); // Instancie la connexion
    }
    catch(PDOException $e) {
        $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
        die($msg);
    }

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    J'ai passé ma base de données en utf8_general_ci ainsi que la table concernée et sans succès toujours Plat préparé;

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Alors attendez j'ai une erreur je vais essayer de voir ou elle est
    ERREUR PDO dans \\SMB-WHST-WWW31\WHST_WWW31$\0e6cb4a41.hostnd\htdocs\www\php\_chef_modif.php L.8 : invalid data source name

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Donc voila l'exemple du site selon moi à un petit problème ^^ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try {
        $strConnection = 'mysql:host=localhost;dbname=ma_base'; //Ligne 1
        $arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
        $pdo = new PDO($connStr, 'Utilisateur', 'Mot de passe', $arrExtraParam); //Ligne 3; Instancie la connexion
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
    }
    catch(PDOException $e) {
        $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
        die($msg);
    }
     
    // CHANGEMENT A FAIRE remplacer $connStr par $strConnection
    Du coup mon encodage fonctionne et je vous remercie énormément, vous m'avez fait progresser!

  13. #13
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Si tu as une version de PHP supérieure ou égale 5.3.6 , la manière conseillée de passer l'encodage est directement dans ton DSN comme ça
    $strConnection = 'mysql:host=localhost;dbname=ma_base;charset=utf8', tu peux dans ton cas te passer de la variable $arrExtraParam
    Le bienfait n'est jamais perdu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'encodage UTF8 PHP & MySQL
    Par gogetenk dans le forum Langage
    Réponses: 6
    Dernier message: 19/10/2011, 16h19
  2. Problème avec Flash + PHP/MySQL
    Par wylls dans le forum Flash
    Réponses: 12
    Dernier message: 04/01/2007, 12h23
  3. Problème de connection php/mysql
    Par MABB dans le forum Outils
    Réponses: 4
    Dernier message: 16/11/2006, 09h13
  4. Problème de boucles Php/mysql
    Par Atwight dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/08/2006, 15h44
  5. Problème de connection php mysql
    Par Vlacar dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo