Partage
  • Partager sur Facebook
  • Partager sur Twitter

Incorrect string value: '\xE0 \xE9' for column 'news' at row

Erreur d'envoie de donnée SQL

Sujet résolu
    29 avril 2011 à 20:45:58

    Bonjour,

    J'ai fait un simple formulaire, à remplir qui devrait normalement injecter les données dans une bdd, pour être réutiliser, comme des "News", sur ma page d’accueil.

    Cela marche très bien excepté le fait que si on rentre des accents cela ne marche pas... !


    <?php
        // on teste si le formulaire a été validé
        if (isset($_POST['go']) && $_POST['go']=='Poster la news') { 
           // on se connecte à notre base
          include('cobd.php');
         
           // on teste la déclaration de nos variables
           if ((!isset($_POST['auteur']) || !isset($_POST['titre']) || !isset($_POST['news']))) { 
              $erreur = 'Les variables nécessaires au script ne sont pas définies.'; 
           } 
           else { 
              if (empty($_POST['auteur']) || empty($_POST['titre']) || empty($_POST['news'])) { 
                 $erreur = 'Au moins un des champs est vide.'; 
              } 
              // si tout est bon, on peut commencer l'insertion dans la base
              else { 
                 // lancement de la requête d'insertion
                 $sql = 'INSERT INTO news(auteur,titre,date,news) VALUES( "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['titre']).'", "'.date("Y-m-d H:i:s").'","'.mysql_escape_string($_POST['news']).'")'; 
         
    	 //des putains de connards on doit faire un INSERT TO (table) (lister les champs) Values (Donner la valeurs de chacuns des champs)
    	 
    	 
    	 
                 // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
                 mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
         
                 // on ferme la connexion à la base de données
                 mysql_close(); 
         
                 // on redirige vers la page d'accueil du site (attention, cette redirection ne fonctionne qui si vous avez placé cette page dans un répertoire à partir de la racine du site). Si ce n'est pas le cas, veuillez entrer ici le bon chemin d'accès afin de retomber sur la page d'accueil du site.
                 header('Location:index.php'); 
                 // on termine le script courant
                 exit(); 
              } 
           }  
        }  
        ?>
        
         
        <!-- on fait pointer le formulaire vers la page traitant les données -->
        <form action="panneladmin.php" method="post">
        <table>
        <tr><td>
        <span class="gras">Auteur :</span>
        </td><td>
        <input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>">
        </td></tr><tr><td>
        <span class="gras">Titre :</span>
        </td><td>
        <input type="text" name="titre" maxlength="50" size="50" value="<?php if (isset($_POST['titre'])) echo htmlentities(trim($_POST['titre'])); ?>">
        </td></tr><tr><td>
        <span class="gras">News :</span>
        </td><td>
        <textarea name="news" cols="50" rows="10"><?php if (isset($_POST['news'])) echo htmlentities(trim($_POST['news'])); ?></textarea>
        </td></tr><tr><td><td align="right">
        <input type="submit" name="go" value="Poster la news">
        </td></tr></table>
        </form>
        <?php
        // on affiche les erreurs éventuelles
        if (isset($erreur)) echo '<br /><br />',$erreur;  
        ?>
    



    Quand je met des accents par exemple dans le formulaire "news", je retrouve l'erreur suivante:

    Citation

    Erreur SQL !INSERT INTO news(auteur,titre,date,news) VALUES( "cxc", "wxcxc", "2011-04-29 18:30:28","à é")
    Incorrect string value: '\xE0 \xE9' for column 'news' at row 1



    Sur PHPmyadmin
    ma table est en interclassement utf8_general_ci
    et le champs est "news" également.

    Je ne vois pas d’où vient l’erreur, merci de votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
    Yellow Skies, Création d 'applications web
      29 avril 2011 à 22:18:24

      bonjour, tu peux peut-être essayer après la connection à mysql
      <?php
      mysql_query('set names utf8');
      ?>
      


      puis
      <?php
      $sql = 'INSERT INTO news(auteur,titre,date,news) VALUES( "'.mysql_real_escape_string(utf8_encode($_POST['auteur'])).'", "'.mysql_real_escape_string(utf8_encode($_POST['titre'])).'", "'.date("Y-m-d H:i:s").'","'.mysql_real_escape_string(utf8_encode($_POST['news'])).'")';
      ?>
      
      • Partager sur Facebook
      • Partager sur Twitter
        29 avril 2011 à 22:33:53

        Merci beaucoup de ton aide !
        Sa marche........mais pas entièrement =p
        L'erreur n'apparait plus, mais les news sont affichées dans un format du genre è à é
        Pourtant la méta de ma page est bien

        Citation

        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />


        Donc je pense que sa viens encore de la dbb. Non ? Si ? =p

        Car quand je lis directement le champs dans phpmyadmin les accents sont présents, c'est donc lrs de leurs rappel pour apparaitre sur ma page que cela plante. hum en toute logique ya peut être une version du uft8 encode à l'envers...
        • Partager sur Facebook
        • Partager sur Twitter
        Yellow Skies, Création d 'applications web
          29 avril 2011 à 22:42:28

          Si tu passes en UTF-8, il faut pas le faire à moitié, sinon ça ne marche pas ^^
          Là ton charset est en iso-8859-1, il faut le mettre en utf-8 aussi ;)
          <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
          
          • Partager sur Facebook
          • Partager sur Twitter
          Qui mange un œuf mange un bœuf.
            29 avril 2011 à 22:53:07

            Je viens de réaliser ce que tu ma dit.
            Et sa reste inchangé =( L'espece de a espagnol reste un a espagnol ><
            Par contre sur le reste de ma feuille apparait des ? au lieu des accents puisque ce n'est pas le même charset (preuve que le charset est bien modifié)

            Pourtant désormais dans ma DBB grâce à ta première manip, apparait bel et bien les accents dans les champs visualisé à partir de phpmyadmin.
            • Partager sur Facebook
            • Partager sur Twitter
            Yellow Skies, Création d 'applications web
              29 avril 2011 à 22:57:00

              Pour le problème des ?, il faut à mon avis convertir aussi tes fichiers sources en UTF-8 (sans BOM), afin d'aller jusqu'au bout du passage à ce charset.

              Si les accents sont bien affichés dans PMA, c'est que le problème ne vient pas de la base de données mais de ton PHP. Comment affiches-tu les news ?
              • Partager sur Facebook
              • Partager sur Twitter
              Qui mange un œuf mange un bœuf.
                29 avril 2011 à 22:59:06

                <?php
                	
                    include('cobd.php');
                     
                    // lancement de la requête. on sélectionne les news que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC) tout en ne sélectionnant que le nombre voulu de news à afficher (LIMIT)
                    $sql = 'SELECT auteur, titre, date, news FROM news ORDER BY date DESC;';  
                     
                    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
                    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
                     
                    // on compte le nombre de news stockées dans la base de données
                    $nb_news = mysql_num_rows($req);  
                     
                    if ($nb_news == 0) { 
                       echo 'Aucune news enregistrée.</div>';  
                    }  
                    else { 
                       // si on a au moins une news, on l'affiche
                       while ($data = mysql_fetch_array($req)) { 
                     
                          // on décompose la date
                          sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec); 
                     
                          // on affiche les résultats
                		  
                		  
                		  
                		  
                		   echo ' <div class="article"><h2>' , htmlentities(trim($data['titre'])) , '</h2>';
                         
                          
                           
                          echo '<p class="separateur"></p><BR><FONT SIZE="+1"><p>' , nl2br(htmlentities(trim($data['news']))) , '</p></font><br /><br><br>'; 
                		  
                		   echo ' <p>&nbsp;&nbsp;&nbsp;Par : &nbsp; ' , htmlentities(trim($data['auteur'])) , '';
                echo '<small>&nbsp;&nbsp; Postée le : ' , $jour , '/' , $mois , '/' , $an , ' à ' , $heure , ':' , $min , ':' , $sec , '</small> <br></p> <br></div>';		   
                       }  
                    }  
                    // on libère l'espace mémoire alloué à cette requête
                    mysql_free_result ($req);  
                     
                    // on ferme la connexion à la base de données
                    mysql_close ();  
                    ?>
                


                Au dessus du code des includes sont présent pour le reste du site donc du <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
                • Partager sur Facebook
                • Partager sur Twitter
                Yellow Skies, Création d 'applications web
                  29 avril 2011 à 23:01:22

                  tu as la fonction mb_detect_encoding($str) dans php qui te détectera à priori l'encodage pour l'adapter à celui de ta page, sinon fais un utf8_decode
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 avril 2011 à 23:02:36

                    "<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />" ?
                    Le problème vient de là, la page est toujours en ISO-8859-1.
                    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
                    

                    UTF-8 partout ou UTF-8 nulle part. ^^
                    Après si tu ne veux pas tout le site en UTF-8, tu peux recopier les includes et changer juste pour cette page, mais je te le déconseille.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Qui mange un œuf mange un bœuf.
                      29 avril 2011 à 23:03:55

                      J'ai trouvé !

                      Par exemple pour le titre
                      UTF8_decode($data['titre'])
                      et la miracle tout marche.

                      C'est ton encode() qui m'avais mis la puce à l'oreille.

                      Par contre je vais regardé la fonction que tu ma proposé pour aller plus loin.
                      Question bête, je débute, mais sa veut dire que dans tout mes formulaires, dans mes prochains sites =D je serais toutjours obligé d'encodé, décodé etc ? Il n'existe pas de fonction universel ?

                      Je préfére iso-8859-1 =p
                      au passage j'ai testé, de mettre tout en uft8 comme dit précédemment mais sa ne changeait rien, seul le UFT8_decode() à marché.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Yellow Skies, Création d 'applications web
                        29 avril 2011 à 23:06:44

                        Je te déconseille fortement l'utilisation de ces fonctions (utf8_encode, utf8_decode, etc.), il est beaucoup plus simple de passer ton charset complet en UTF-8 (base de données, connexion, fichiers et headers). Car là, oui, tu seras toujours obligé d'encoder et de décoder tes chaînes, ce qui est pas très pratique...

                        EDIT : dans ce cas, repasse ta base en iso aussi. Aucun intérêt de stocker des données en utf-8 pour les afficher en 8859-1.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Qui mange un œuf mange un bœuf.
                          29 avril 2011 à 23:08:23

                          J'ai eu ce problème récemment, c'est à cause du htmlentities qui convertit les accents en leur entité html, ou un truc dans le genre :p . Je te conseille de remplacer ça par htmlspecialchars ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 avril 2011 à 23:10:14

                            c'et vrai qu'il est préférable de rester dans le même charset dans la base et dans la page, ça diminue les calculs à faire.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 avril 2011 à 23:10:47

                              Merci Arriv,
                              @cybertueur: oui c'est idiot de decodé recodé à chaque fois, donc si je met ma dbb tout en iso 8859 sa marcherais ? (enfin pas besoin de décodé/recodé par derrière)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Yellow Skies, Création d 'applications web
                                29 avril 2011 à 23:12:48

                                Oui, il faut mettre la base de données, la table et les champs à nouveau en iso-8859-1. :)
                                Et retirer le "SET NAMES UTF8" de ton code si ce n'est déjà fait. Et ensuite, plus besoin de encode/decode.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Qui mange un œuf mange un bœuf.
                                  29 avril 2011 à 23:14:02

                                  Je vous remercie beaucoup.
                                  Bonne fin de soirée.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Yellow Skies, Création d 'applications web

                                  Incorrect string value: '\xE0 \xE9' for column 'news' at row

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown