UPDATE ... SET

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

A voir également:

34 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Et en virant le <script>....</script> du form et en le mettant en fin de page ?!
1
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
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   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
Utilisateur anonyme
 
Comment as-tu fait pour l'utiliser ? Il y avait un vrai manuel, ou simplement un exemple ?
0
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
Voilà d'où moi je l'ai téléchargé :
http://www.scriptiny.com/2010/02/javascript-wysiwyg-editor/
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Normalement l'exemple à cette page fonctionne bien.
0
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
Utilisateur anonyme
 
Tu pouvais aussi faire la même chose avec le onclick du bouton de validation
0
Melooo Messages postés 1405 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   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
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
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Rha toujours là pour voir les incohérences du code toi ! ;-)
0
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
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   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
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
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
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
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
0
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
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   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
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
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
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
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
So what ?
0
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
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
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
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
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
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
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
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
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