UPDATE ... SET

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Mihawk Messages postés 4753 Statut Contributeur -
Bonjour à tous !

J'ai besoin d'aide svp.

J'ai deux feuilles pour editer un champ dans la base de données, mais j'ai un problème et sollicite votre aide.

index.php a ceci :
<form action="add_notes.php" method="get">
<textarea name="BlocNotes" id="input" style="width:100%; height:200px;"><?php echo utf8_encode(stripslashes($data['BlocNotes'])); ?></textarea>
<input name="envoyer" type="submit" class="btn blue" id="button" value="Enregistrer la note" />
</form>

La seconde feuilles qui est add_notes.php a ceci :
<?php
if(isset($_POST['BlocNotes'])) $BlocNotes=$_POST['BlocNotes']; else $BlocNotes=""; 
if(empty($BlocNotes)){echo '<div class="Erreur">Il n\'y a aucune note dans le Bloc notes.</div>';}
else {$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)  or die('Erreur de connexion '.mysql_error()); mysql_select_db(MYSQL_BASE,$db)  or die('Erreur de selection '.mysql_error());
$sql = "UPDATE Alifat_Blocnotes SET BlocNotes='$BlocNotes' WHERE NumId='1'";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo '<div class="Message">Bloc notes enregistré avec succès.</div>';
mysql_close();} ?>


Si je garde else $BlocNotes=""; j'ai le message d'erreur qui s'affiche. Et si je le retire, j'ai une édition bizarre.
Le texte initial est : les élèves vont êtres surpris, et s'il y avait du danger...
Si j'edite donc j'aurai ceci : les Ãf©lÃf¨ves vont Ãfªtres surpris, et s'il y avait du danger...

Or j'avais juste demandé à supprimer ", et s'il y avait du danger..."

L'édition ne s'exécute pas entièrement.

Pouvez-vous m'aider svp ?
Merci d'avance.

34 réponses

  • 1
  • 2
Résumé de la discussion

Problème d'encodage et de sauvegarde d'un champ BlocNotes entre une page de saisie et le script de mise à jour MySQL. La chaîne est affichée avec utf8_encode et le formulaire utilise la méthode GET, ce qui peut entraîner des caractères corrompus et une édition partielle. Des solutions proposées incluent retirer utf8_encode et ajouter onsubmit='editor.post()' afin que les mises à jour du WYSIWYG se répercutent correctement dans la textarea lors de l'enregistrement. En pratique, l'utilisation de POST plutôt que GET et une gestion cohérente du charset peuvent aussi éviter les textes affichés en pseudo-encodage lors des réouvertures.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Mihawk Messages postés 4753 Statut Contributeur 846
     
    Et en virant le <script>....</script> du form et en le mettant en fin de page ?!
    1
  2. Utilisateur anonyme
     
    J'ai installé le script chez moi pour voir.
    Il ne semble pas poser de problème d'encodage, il ne faut pas mettre la fonction utf8_encode, c'est tout.
    Par contre, il ne prend en compte les modifications qu'en mode source. Et ceci qu'on soit en utf8 ou pas, qu'il y ait des caractères spéciaux ou pas.

    Je n'ai pas trouvé de manuel de cet éditeur, tu as un lien sur le site de l'éditeur (du logiciel)?
    1
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Ce qui est bizarre c'est que j'utilise aussi cet éditeur.
      Mon initialisation n'est pas la même, mais en tout cas ça marche à merveille !
      0
    2. Utilisateur anonyme
       
      Comment as-tu fait pour l'utiliser ? Il y avait un vrai manuel, ou simplement un exemple ?
      0
    3. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Normalement l'exemple à cette page fonctionne bien.
      0
  3. Utilisateur anonyme
     
    Je viens de trouver la solution pour le problème de non-prise en compte dans l'édition. Il faut lire ce qui est écrit sur le site de l'éditeur
    Keep in mind that before posting you will need to call the instance.post() function to ensure that the latest changes in the WYSIWYG translate into the text area.
    Autrement dit, il suffit d'ajouter onsubmit="editor.post()" dans la balise <form> et chez moi ça marche très bien.
    1
    1. Utilisateur anonyme
       
      Tu pouvais aussi faire la même chose avec le onclick du bouton de validation
      0
  4. Melooo Messages postés 1476 Statut Membre 84
     
    Salut,
    Essayes de mettre ceci :
    <?php
    if(isset($_POST['BlocNotes'])) $BlocNotes=$_POST['BlocNotes']; else $BlocNotes=""; 
    if(empty($BlocNotes)){echo '<div class="Erreur">Il n\'y a aucune note dans le Bloc notes.</div>';}
    else {$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)  or die('Erreur de connexion '.mysql_error()); mysql_select_db(MYSQL_BASE,$db)  or die('Erreur de selection '.mysql_error());
    $sql = "UPDATE Alifat_Blocnotes SET BlocNotes='stripslashes($BlocNotes)' WHERE NumId='1'";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    echo '<div class="Message">Bloc notes enregistré avec succès.</div>';
    mysql_close();} ?>
    

    J'ai juste rajouté un stripslashes à ta variable $BlocNotes étant donné que tu es susceptible d'avoir des simples quotes
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mihawk Messages postés 4753 Statut Contributeur 846
     
    Hello,

    La syntaxe

    if (condition) action2 ; else action1;

    Est à proscrire autant que possible. Il faut privilégier la syntaxe :

    if (condition){
       action2;
    } else {
       action1;
    }
    0
  7. Utilisateur anonyme
     
    Bonjour

    Je me demande comment, avec method="get", tu retrouves tes données dans $_POST.
    SInon, ce que tu observes est lié au fait que tu utilises la fonction utf8_encode. Nous n'avons qu'une partie de ton code, mais on peut supposer que ton encodage est incohérent quelque part entre entre ton éditeur, ta base de données et tes balises méta. Pour essayer de contourner le problème, tu utilises utf8_encode, ce qui marche sur des données initialement en iso8859-1. Quand tu reprends ces données, maintenant codées en utf8, et que tu appliques à nouveau la fonction utf8_encode, ça donne ce résultat.
    0
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Rha toujours là pour voir les incohérences du code toi ! ;-)
      0
    2. Utilisateur anonyme
       
      Ça me semble la démarche la plus naturelle pour trouver les causes des erreurs, non ? Même si dans ce cas précis, l'incohérence get / post n'a pas de rapport avec son problème d'encodage, on tombe dessus quand on regarde.
      0
    3. Mihawk Messages postés 4753 Statut Contributeur 846
       
      D'un côté je ne suis pas sûr que l'encodage soit son problème principal. Il me semble qu'il désirait supprimer une partie de sa phrase...
      0
    4. Utilisateur anonyme
       
      Bien sûr que si, c'est le problème..
      Il a voulu éditer une partie de sa phrase, c'est une saisie dans le textarea. Peu importe que dans cet exemple, il ait voulu supprimer une partie de sa phrase ou l'allonger, le problème c'est que quand il ré-affiche l'ancien texte, il y a des caractères 'anormaux'. D'ailleurs, s'il l'édite à nouveau, il en aura encore plus...
      0
    5. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Exactement le père. Si j'affiche l'ancien, les caractères sont encore plus anormaux !
      Si je supprime le code <javascrip> il prends tout en compte, y compris l'édition de la phrase...
      0
  8. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Oui, avec le code donné ci-dessus de Meloo, j'obtiens ceci :
    stripslashes(On test le bloc note maintenant !
    ÃfÂfÃ'©lÃfÂfÃ'¨ve
    ÃfÂfÃ'ªtre
    ÃfÂfÃ'®lots
    vÃfÂfÃ'Â'tre)


    Même le stripslashes(...) est affiché :D
    0
  9. Utilisateur anonyme
     
    Le seul moyen de t'en tirer, c'est d'être cohérent entre ton éditeur de texte, ta base de données et ta balise meta d'encodage. Le lien de Mihawk est un bon point de départ pour bosser le sujet, mais il ne faut pas espérer résoudre ton problème en ajoutant des utf8_encode au petit bonheur à la chance. Et si tu as l'impression d'avoir résolu ton problème comme ça (rappelle-toi une histoire de fond rouge et de fond vert), tu peux être sûr qu'il ressurgira.
    0
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      En effet, l'un des problème majeur des webmasters est que leurs bases sont en UTF-8 mais que leurs DOCTYPE HTML sont spécifiés en ISO-8859... D'où quelques incohérences.

      Il faut donc généralement encoder en UTF-8 avant l'insertion et décoder les données de la base avant affichage sur la page.
      0
    2. Utilisateur anonyme
       
      Il faut donc généralement encoder en UTF-8 avant l'insertion et décoder les données de la base avant affichage sur la page
      Il ne faut ni encoder, ni décoder, sauf si on importe des données depuis des fichiers extérieurs dont on ne maîtrise pas le codage.
      Quand on travaille en utf8, on fait tout en utf8. C'est comme si tu disais que pour travailler en français, il faut traduire en anglais pour insérer dans la base de données, et retraduire en français pour afficher. C'est faisable, mais absurde, tu perdras des informations lors de la traduction, et ça donnera du boulot supplémentaire au serveur.
      Je n'ai parcouru que rapidement le lien que tu as donné à Sinistrus, j'espère que ce n'est pas là-dedans que tu as trouvé ce conseil car c'est une très mauvaise idée.
      0
  10. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Ça ne résout pas mon problème :S
    L'édition ne se fait toujours pas.
    Ni avec l'encodage ni avec l'édition de la phrase...
    Je vais vous donner mes deux pages, les codes entiers si ça ne vous dérange pas.

    Page index.php :
    <?php
    $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
    mysql_select_db(MYSQL_BASE,$db);
    $sql = 'SELECT * FROM Alifat_Blocnotes WHERE NumId=1';
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    while($data = mysql_fetch_assoc($req)){
    ?>
    <form action="add_notes.php" method="get">
    
    <textarea name="BlocNotes" id="BlocNotes" style="width:100%; height:200px;"><?php echo utf8_encode(stripslashes($data['BlocNotes'])); ?></textarea>
    <script type="text/javascript">
    	new TINY.editor.edit('editor',{
    	id:'BlocNotes',
    	width:'100%',
    	height:280,
    	cssclass:'te',
    	controlclass:'tecontrol',
    	rowclass:'teheader',
    	dividerclass:'tedivider',
    	controls:['bold','italic','underline','strikethrough','|','subscript','superscript','|',
    			  'orderedlist','unorderedlist','|','outdent','indent','|','leftalign',
    			  'centeralign','rightalign','blockjustify','|','unformat','|','undo','redo','n',
    			  'image','hr','link','unlink','|','cut','copy','paste','print'],
    	footer:true,
    	fonts:['Calibri'],
    	xhtml:true,
    	cssfile:'style.css',
    	bodyid:'editor',
    	footerclass:'tefooter',
    	toggle:{text:'source',activetext:'wysiwyg',cssclass:'toggle'},
    	resize:{cssclass:'resize'}
    });
    </script>
    <input name="envoyer" type="submit" class="btn blue" id="button" value="Enregistrer la note" />
        </form>


    Page add_notes.php :
    <?php
    if(isset($_POST['BlocNotes'])) $BlocNotes=$_POST['BlocNotes']; else $BlocNotes=""; 
    if(empty($BlocNotes)){echo '<div class="Erreur">Il n\'y a aucune note dans le Bloc notes.</div><script type="text/javascript">window.setTimeout("location=(\'index.php\');",1000)</script>';}
    else {$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)  or die('Erreur de connexion '.mysql_error()); mysql_select_db(MYSQL_BASE,$db)  or die('Erreur de selection '.mysql_error());
    mysql_query("SET NAMES 'utf8'");
    $sql = "UPDATE Alifat_Blocnotes SET BlocNotes='$BlocNotes' WHERE NumId='1'";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    echo '<div class="Message">Bloc notes enregistré avec succès.</div><script type="text/javascript">window.setTimeout("location=(\'index.php\');",1000)</script>';
    mysql_close();} ?>


    Donc là, si je laisse dans tout les cas le
    else $BlocNotes=""; 
    j'aurai le message du
    <div class="Erreur"></div>
    et si je le retire, j'aurai une édition uniquement sur les caractères spéciaux.
    Maintenant et ce qui est bizarre, c'est que si je modifie mon texte en mode "source" depuis mon textarea, et clique pour éditer, l'édition se fait avec succès a l'exception des caractères spéciaux...

    En mode mise en forme, pas d'édition de phrases
    En mode mise en forme, transformation des caractères spéciaux
    En mode source, édition avec succès
    En mode source, transformation des caractères spéciaux
    0
  11. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    J'ai changé ma table en utf8_bin

    Problème de caractères spéciaux dans :
    Mode mise en forme : Résolu
    Mode source : Résolu

    Maintenant :
    Si je reste en mode mise en forme et édite = Refus d'édition
    Si je reste en mode source et édite = Résolu
    Si je suis en mode mise en forme et modifie le texte puis affiche la source et reviens en mise en forme et édite = Résolu
    0
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      So what ?
      0
  12. Utilisateur anonyme
     
    Ta page index m'étonne
    pas de balise doctype, pas de balise html, pas de balise meta pour signaler que tu travailles en utf8 ? Tu ne travailleras jamais correctement en utf8 comme ça
    0
  13. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Non ne t'inquiète pas pour ce détail, c'est pour ne pas bourrer la page de code.
    Le problème de l'encodage fonctionne maintenant, tout est réglé a l'exception de l'édition en mode mise en forme et/source.

    En mode mise en forme :
    http://data.imagup.com/12/1153554776.jpg
    Il n'édite rien

    En mode source :
    http://data.imagup.com/11/1153554769.jpg
    Il édite avec succès

    Si je modifie en mode mise en forme et affiche la source et reviens en mise en forme, il édite.
    Si je reste en mise en forme et édite, il ne fait rien...
    0
  14. Utilisateur anonyme
     
    Non ne t'inquiète pas pour ce détail,
    Ce ne sont pas des détails. Mais je veux bien arrêter de m'inquiéter pour toi.
    tout est réglé a l'exception de
    Donc tout n'est pas réglé.
    Comme je te l'ai déjà dit, tu règles des cas particuliers. Tant que tu ne t'attaqueras pas au vrai problème, ça continuera.
    0
  15. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Oups... désolé !
    Voici ma partie entête :
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>


    Ma base est en utf8_bin et le reste du code est au dessus de ce poste.

    Y a t-il autre chose qui vous aiderais à m'aider :$ ?
    0
  16. Utilisateur anonyme
     
    Malheureusement, je n'ai pas la moindre idée si ton éditeur javascript traite correctement l'utf8 ou non. Je suis allé voir sur leur site (je ne lai pas tout fouillé non plus), je n'ai pas trouvé l'information.

    Car sinon, en retirant ta fonction utf8_encode, et en revoyant la façon d'utiliser stripslashes, ça a l'air correct.
    0
  17. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Le script est de tinyeditor : http://www.scriptiny.com/2010/02/javascript-wysiwyg-editor/

    Je penses, mais ne suis pas sûr que dans le <script> en dessous du textearea, il y a id:'BlocNotes',
    mais pas de name:'', (ça n'existe pas)

    Vous pensez que le problème "peut" venir de là ?
    0
  18. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Effectivement, c'est ce que je pensais...
    J'ai ajouter dans ce code :
    <textarea name="BlocNotes" id="BlocNotes" style="width:100%; height:200px" onKeyUp="document.getElementById('BlocNotes2').value = this.value"><?php echo utf8_encode(stripslashes($data['BlocNotes'])); ?></textarea>
    <script type="text/javascript">
    new TINY.editor.edit('editor',{
    	name:'BlocNotes',
    	id:'BlocNotes',
    	width:'100%',
    	height:280,
    	cssclass:'te',
    	controlclass:'tecontrol',
    	rowclass:'teheader',
    	dividerclass:'tedivider',
    	controls:['bold','italic','underline','strikethrough','|','subscript','superscript','|',
    			  'orderedlist','unorderedlist','|','outdent','indent','|','leftalign',
    			  'centeralign','rightalign','blockjustify','|','unformat','|','undo','redo','n',
    			  'font','size','style','|','image','hr','link','unlink','|','cut','copy','paste','print'],
    	footer:true,
    	fonts:['Calibri','Courier New','Verdana','Arial','Georgia','Trebuchet MS'],
    	xhtml:true,
    	cssfile:'style.css',
    	bodyid:'editor',
    	footerclass:'tefooter',
    	toggle:{text:'source',activetext:'wysiwyg',cssclass:'toggle'},
    	resize:{cssclass:'resize'}
    });
    </script>
    Pour avoir dans un autre Textarea le contenue de mon premier textarea.
    En mode mise ne forme il n'affiche rien mais en mode source il copie le contenu du premier au second...

    Donc le problème vient du javascript.
    Je penses que si j'arrive à mettre le "name" en valeur, il prendra en compte l'enregistrement... qu'en pensez-vous ?
    0
  19. Utilisateur anonyme
     
    Non, ce qui compte, c'est qu'il y aitr id et name dans ta balise textarea, et c'ets bien le cas.
    Pour vérifier si c'est le script qui nous embête, on va essayer de s'en passer
    Retire le passage <script..</script> après le texarea
    Retire la fonction utf8_encode avant le textarea
    Et regarde si ça édite bien maintenant (avec des nouveaux messages, les anciens sont corrompus désormais)
    0
  20. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Effectivement, c'est le <script..</script> qui pose problème.
    Lorsque je le retire, il affiche un textarea "normal" et lors de l'édition il fait ce qu'il faut.
    Si je remet, alors il se transforme (le textarea) en mode mise en forme (comme l'image ci-dessus) et nous pose ce problème...
    0
  • 1
  • 2