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

PHP & Base de données Discussion :

accents insertion base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut accents insertion base de données
    Bonjour,

    Ca fait des heures que je me bats pour résoudre mon problème d'accents...
    Ma base de données à pour interclassement latin1_swedish_ci

    mon code html contient cette ligne dans le <head>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    Ma connexion se fait de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $mysqli = new mysqli('localhost', 'root', '', 'basefleury');
     
    $mysqli->set_charset("iso-8859-1");
     
    if ($mysqli->connect_errno) {
        echo "Echec de la connexion: " . $mysqli->connect_error;
        exit();
    	}
     
    ?>
    Et l'ajout à ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $zt_auteur = $_POST['zt_auteur'];
    $zt_titre = $_POST['zt_titre'];
    $zt_commentaire = $_POST['zt_commentaire'];
    $zt_rayonnage = $_POST['zt_rayonnage'];
    $zt_poids = $_POST['zt_poids'];
    $zt_prix_vente = $_POST['zt_prix_vente'];
    $zt_fiche = $_POST['zt_fiche'];
    $zt_stock = $_POST['zt_stock'];
    $zt_fdp = $_POST['zt_fdp'];
     
    $req_rec_fiche="insert into tlivre (auteur, titre, commentaire, rayonnage, poids, prix_vente, fiche_terminee, stock, fdp) values ('". $mysqli->real_escape_string($zt_auteur)."', '".$mysqli->real_escape_string($zt_titre)."', '".$mysqli->real_escape_string($zt_commentaire)."', '".$mysqli->real_escape_string($zt_rayonnage)."', '".$mysqli->real_escape_string($zt_poids)."', '".$mysqli->real_escape_string($zt_prix_vente)."', '".$mysqli->real_escape_string($zt_fiche)."', '".$mysqli->real_escape_string($zt_stock)."', '".$mysqli->real_escape_string($zt_fdp)."')"; 
    //$req_rec_fiche="insert into tlivre (auteur, titre) values ('". $mysqli->real_escape_string($zt_auteur)."', '".$mysqli->real_escape_string($zt_titre)."')"; 
     
       mysqli_query($mysqli, $req_rec_fiche) or die('Erreur SQL !'.$req_rec_fiche.'<br>'.mysqli_error($mysqli));
    Mais rien à faire, mes accents ne passe pas. par exemple un é devient un é

    Je ne suis pas doué en développement web, jusqu'ici, j'ai réussi à bidouiller, mais la, ca coince. J'essaie de migrer sur php 7, mais je ne crois pas que mon problème d'accent y soit lié. Je ne sais pas trop pourquoi il est soudainement arrivé d'ailleurs...

    Mais bref, j'espère que vous pourrez m'aider à trouver la solution.

    C'est pour une mise à jour d'un site, donc j'ai des milliers d'enregistrements, donc si on peut éviter de faire un conversion en utf-8, ca m'arrange.

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Vérifie dans ton éditeur de code que ton fichier .php ne soit pas en UTF8.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    J'utilise Microsoft expression web 4. Je crois que j'ai mis partout iso dans les propriétés la ou je pouvais le mettre, mais ca ne change pas : chaque nouveau test d'enregistrement dans la base ne prends pas correctement en charge les accents.

    J'ai regardé un fichier avec notepad++ ca me met ANSI, j'ai mis iso-8859-1 mais ca ne change rien.

  4. #4
    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, et avec $mysqli->set_charset("latin1"); ? Parce que je ne pense pas que mysql reconnaisse iso-8859-1 en tout cas d'après mon test avec PDO
    Le bienfait n'est jamais perdu

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Ca ne veut pas non plus

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

    tu ne veux pas, ou tu ne peux pas TOUT passer en UTF-8 ?
    Car ça simplifierait beaucoup de choses.



    N.B. Tu parles de "mise à jour" (PHP7), mais je ne pense pas que "faire les choses à moitié" soit une bonne idée...
    Dernière modification par Invité ; 18/05/2017 à 08h12.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Je regarderais plus en détail ce soir le lien posté pour passer en utf-8, car là je suis au taf. C'est assez curieux de voire une page qui explique comment passer à l'utf-8 avec des ? à la place des accents...

    Si c'est simple et que ca résout mon problème, pourquoi pas...
    Mais je trouve étrange qu'il n'y a pas si longtemps, on ne voyait pas d'inconvénient à laisser l'interclassement en latin1_swedish_ci et qu'aujourd'hui, ca serait compliqué de continuer d'implémenter cette BDD avec cet encodage...
    latin1_swedish_ci est (ou était) la valeur par défaut de mysql...

    En tout cas, je vous remercie pour l'aide apporter... j'espère résoudre rapidement ce problème car ca commence à me gonfler...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par punk_sportif Voir le message
    ...C'est assez curieux de voire une page qui explique comment passer à l'utf-8 avec des ? à la place des accents...
    Alors là, il faut t'inquiéter de ton navigateur !

    Car les accents s'affichent correctement sur cette page !

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    latin1_swedish_ci est (ou était) la valeur par défaut de mysql...
    L'interclassement ce n'est pas l'encodage. De plus je ne pense que l'alphabet suedois soit vraiment un choix très universel non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Mon navigateur est firefox. C'est le seul site ou je vois des ? Et je viens de tester avec IE, c'est pareil, et sur le chrome de mon téléphone, pareil.

    Concernant le latin suedois, je ne sais pas... J'ai lu tellement de choses depuis 2 jours la dessus... Mais je suis certain d'avoir lu quelque part c'était très bien de le laisser comme ca. Après, je ne dis pas que l'info est fiable.

    Mais j'ai envie de dire peu importe : pendant environ 10 ans le latin1_swedish_ci ne m'a pas posé de problème, et aujourd'hui, ca ne fonctionne plus comme il faut.

    Alors si passer en UTF-8 se fait sans encombre et que ca résout mon problème, je veux bien, mais pour autant, il doit bien exister une solution pour rester en interclassement latin1_swedish_ci dans le genre de la solution proposée par Willy_k...

  11. #11
    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
    J'ai fait un test de mon côté, fichier encodé en ISO 8859-1, base de données latin1/latin1_swedish_ci , j'ai utilisé $mysqli->set_charset('latin1'); et pas de problème d'accents lors de l'insertion.
    Si tu pouvais joindre le fichier concerné ici.
    Le bienfait n'est jamais perdu

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Je fais ca en rentrant du taf.
    Merci.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Voici mes fichiers.
    basefleury.php rec_fiche1.php rec_fiche2.php

    Et voici un export ou j'ai extrait la structure de la table si ca peut être utile :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    -- phpMyAdmin SQL Dump
    -- version 4.7.0
    -- https://www.phpmyadmin.net/
    --
    -- Hôte : 127.0.0.1
    -- Généré le :  jeu. 18 mai 2017 à 18:53
    -- Version du serveur :  5.7.17
    -- Version de PHP :  7.1.3
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
     
    --
    -- Base de données :  `basefleury`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `tlivre`
    --
     
    CREATE TABLE `tlivre` (
      `ref` int(5) NOT NULL,
      `auteur` varchar(150) DEFAULT NULL,
      `titre` text,
      `descriptif` text,
      `commentaire` text,
      `mots_cles` varchar(200) DEFAULT NULL,
      `rayonnage` int(11) DEFAULT NULL,
      `ville_achat` varchar(150) DEFAULT NULL,
      `date_achat` date DEFAULT '0000-00-00',
      `num_lot` int(11) DEFAULT NULL,
      `nbre_ex_lot` int(11) DEFAULT NULL,
      `prix_achat` decimal(10,2) DEFAULT NULL,
      `poids` decimal(10,2) DEFAULT NULL,
      `prix_vente` decimal(10,2) DEFAULT NULL,
      `aff_prix` int(1) NOT NULL DEFAULT '1',
      `vendu` int(1) NOT NULL DEFAULT '0',
      `date_vente` date DEFAULT '0000-00-00',
      `moyen_paiement` varchar(200) DEFAULT NULL,
      `remboursement` decimal(10,2) DEFAULT NULL,
      `offert` varchar(50) DEFAULT NULL,
      `num_client` int(5) DEFAULT NULL,
      `lieu` varchar(15) DEFAULT NULL,
      `perso` text,
      `fiche_terminee` int(1) NOT NULL DEFAULT '0',
      `stock` int(11) NOT NULL DEFAULT '1',
      `fdp` decimal(3,2) NOT NULL DEFAULT '7.90'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    --

  14. #14
    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
    Le test effectué de mon côté semble pas reproduire ton problème. J'ai trouvé 2 solutions.

    - passer en utf-8, pas besoin de toucher la BDD. Mettre le charset de la BDD côté PHP donc avec set_charset('utf8'), changer l'encodage des fichiers en utf-8 et le content="text/html; charset=iso-8859-1" en content="text/html; charset=utf-8".
    - passer tout en iso-8859-1 parce qu'à partir de php5.6 l'encodage par défaut est utf-8, mettre cette ligne dans le .htaccess php_value default_charset ISO-8859-1 et changer l'encodage des fichiers en iso-8859-1 , dans ce cas on garde le set_charset('latin1').

    PS: faudrait virer les mysql_error on ne mixe pas mysqli_ et mysql_.. Il y'a des choses à dire sur le code mais réglons ce problème d'accent d'abord
    Le bienfait n'est jamais perdu

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Il me semble que la solution la plus cohérente est la 2ème solution, comme ca, tout reste en ISO-8859-1.
    Mais je ne vois pas ce que je dois changer par rapport à ce que j'ai actuellement. Je crois que j'ai déja tout en iso-8859-1.
    Je n'ai pas de .htaccess.
    changer l'encodage des fichiers en iso-8859-1
    Ca se fait comment ^^ ?

    concernant le mysql_error, oui, j'ai encore plein d'incohérences dans mon code. Je suis loin de maitriser le php, j'avance petit bout par petit bout...

    Merci pour ton aide.

  16. #16
    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
    Quand j'ai ouvert tes fichiers le fichier de connexion était en utf-8, les autres en Windows-1252 ou CP1252 donc rien à avoir avec iso-8859-1.
    Je crois que NotePad++ a une option convertir en xxxx, en tout cas à regarder parce que je n'utilise pas cet éditeur..
    Pour le .htaccess , il suffit de créer le fichier à la racine du site et de juste mettre la ligne php_value default_charset ISO-8859-1.

    EDIT: Faudrait aussi prendre en compte les remarques ci-dessous de Jreaux62 avant de faire un choix "définitif"
    Le bienfait n'est jamais perdu

  17. #17
    Invité
    Invité(e)
    Par défaut
    As-tu au moins eu la curiosité de :

    • chercher à quoi correspond l'encodage UTF-8 ?
    • comparer les avantages et inconvénients de iso et UTF-8 ?


    Tant qu'à faire une mise à jour... autant la faire bien.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    secrétaire
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : secrétaire

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    De ce que j'en ai lu, c'est que effectivement, l'utf-8 devenait la norme car était capable de composer avec plus caractères par rapport à l'iso-8859-1. Mais mon site n'aura pas besoin d'afficher des caractères chinois.

    Il ne me semble pas avoir lu d'autres avantages.

    Et si j'ai bien compris, ou il aurait mieux valu choisir la méthode pdo... mais bon, il aurait fallu reprendre tout mon code quand avec mysqli, il suffit parfois de juste rajouter un i.

    Pour l'encodage des fichiers, je regarde ce soir.

    Merci.

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

    c'est toi qui vois. tu es seul maitre à bord.

    Quant à mysqli_, il a été fait justement pour faciliter la transition depuis mysql_.

    Attention toutefois : certaines fonctions ont des paramètres inversés :
    ex. :
    • mysql_query ( $query , $link)
    • mysqli_query ( $link , $query )

    D'autre part, il faut vraiment penser aux requêtes préparées (protection contre les injection SQL).


  20. #20
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Bonjour ici,

    Avant d'envisager de changer d'encodage, je pense préférable, voir salutaire, de comprendre ce qui coince.

    Un test rapide à faire qui sauf erreur de ma part n'a pas été évoqué : est-ce que si utf8_decode() est appliqué sur les données avant insertion le problème d'accent disparaît ? Si oui, c'est tout simplement que le problème ne se trouve pas dans le code mais plus probablement du serveur. Cela dit utf8_decode() c'est bien pour tester le problème mais ça ne le résoud pas correctement alors il vaut mieux identifier le soucis plutôt que d'en coller partout.

    Ca fait une éternité que je n'ai pas traité de problèmes d'encodage, mais il est possible que si ton serveur soit configuré pour avoir un charset UTF-8 par défaut dans les headers, celui-ci écrase joyeusement ta balise meta et le navigateur risque de prendre cet élément en considération pour renvoyer des données en UTF-8 alors que tu attends du iso-8859-1.

    J'y parierais pas ma chemise, mais pour moi c'est une question de configuration serveur qui a changé chez ton hébergeur (passant du iso par défaut à l'utf-8 par défaut) et qui a fait apparaître le problème. Dans ce cas là tente à la place de rajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=iso-8859-1');
    en tête de fichier et voit si ça résouds ton problème. Ca risque par contre de casser le rendu de ta page si tes templates sont en utf-8.

    Le header() en début de script c'est vraiment une rustine temporaire et dans l'idéal il faut plutôt jouer du côté du serveur, mais tu n'as peut être pas les droits pour. Si tu es en mutualisé avec Apache comme serveur et le droit d'utiliser un htaccess, il me semble que la directive AddDefaultCharset peut fonctionner dedans et résoudre ton problème plus durablement.

    Et une fois que tu maîtriseras la problématique, effectivement, passer en utf8 en toute connaissance de cause pourrait être une bonne idée

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Probléme insertion base de donnée Access
    Par Seb2913 dans le forum C#
    Réponses: 1
    Dernier message: 26/04/2015, 10h45
  2. [MySQL-5.6] Problème d'affichage des accents en base de données
    Par blackstrobe dans le forum Débuter
    Réponses: 0
    Dernier message: 15/10/2014, 16h44
  3. Réponses: 7
    Dernier message: 01/12/2009, 15h10
  4. Réponses: 7
    Dernier message: 07/05/2009, 17h32
  5. Problème d'insertion base de donnée Access
    Par hh4life dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/08/2007, 19h26

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