[html / Php] Gestion Des Quotes

salut

je tape une requete sql dans un textarea
j’execute la requete
je la garde
je veux la renvoyer dans le textarea sur un clic de bouton

mon problème est généralisable à tout texte
l’idée c’est que quand on tape un texte dans un champs et qu’on l’envoie dans une vaiable php, tout va bien
mais quand on tente de remettre le contenu de cette variable dans le champ : tout va mal

le problème vient des caractère spéciaux comme les quotes ’ (délimiteur de chaine dans la requete sql) et des doubles quotes " (pour les alias comportant des espaces), les signes < et > , etc

en effet, le navigateur n’interprete pas comme il faut dc, ça interrompt des chaine là où il ne faut pas, ça créer des balises inexsitantes (ex : a<b AND c>d )

j’ai essayé de remplacer les quotes par &quot, < pat &lt, etc …
sauf qu’il revoye directement ça dans le chams, sans les remplacer

comment faire alors ?
merci ++

les fonctions comme htmlspecialchars ou htmlentities ne t’aident pas ?

bah non, pasque si ma chaine se retrouve avec des &quot et des &lt et tout, bah qd il va vouloir la mettre dans le champ, il va copier texto, il va pas les interpréter
ça va bien pour l’affichage simple, mais après …

Oui salut j’ai eu exactement le même problème que toi…
Je voulais faire la partie administration d’un site, et mettre des informations dans des textarea pour pouvoir les modifier et les sauvegarder…

Je cherche le code de la page et je te dis ça…


//à l'entrée de ta base de données
$text=addslashes($text); //protection des quotes (se fait auto chez free, d'où un str_replace()
$sql="UPDATE ... SET ... $text ...";

//à la sortie de ta base de données texte dans la variable $text
$text=str_replace("\\","",htmlentities($text)); //on enlève toutes les protections '\'

//ici on affiche
echo "<textarea>$text</textarea>";

Voilà je viens de vérifier le code source de ma page et ça fonctionne exactement comme cela !

EDIT : euuh par contre vu que c’était pour une partie admin, tu peux te passer des htmlentities… Je m’en sert parce que je réaffichais ça par la suite sur une page web… lol désolé mais sinon pour les quotes voilà ça fonctionne chez moi …

tu connais pas stripslashes() ?

Je ne sais pas ce que tu fais exactement, mais j’aurai tendance à utiliser htmlspecialchars qu’à l’affichage. Car dans ce cas, le navigateur remplace visuellement &lt; par < et en plus, quand t’envoie le formulaire c’est aussi remplacé (c’est con à dire, mais on sait jamais).

Si tu veux sauvegarder, tu sauvegardes sans htmlspecialchars (avec un mysql_escape_string, etc) et réellement, quand tu affiche, tu te sert d’htmlspecialchars.

en fait moi ce que je voulais c faire des requetes SQL vers une base oracle, pasque meme un petit formulaire basic, c mieux que SQLplus

le truc consiste en 1 textarea, un submit, et un bouton"recommencer"

je tape ma requete et je submit (ça rappelle la meme page)
ça raffiche le formulaire, puis la requete que je viens d’envoyer, puis les résultats

le bouton recommencer : c là qu’est le problème : de tete :
onclick=‘montextarea.value=‘ma requete sql’
en fait oui, la requete je l’“affiche”, mais pas graphiquement c tout, mais elle est ds le code html
si je la laisse tel quel, si elle contient des " ou des <> , ça risque d’afficher pas ce qu’il faut
si j’utilise les htmlspecialchar, sur clic ça affichera ça bien ds le textarea, mais Oracle risque de pas tout comprendre

alors évidemment je pourrai mettre onclick=window.history.go(-1)
je crois que ça marche, mais ça serait trop facile

l’idée serait éventuellement de passer la requette dans une fonction inverse de htmlspecialchar
ce qui pourrait aussi poser des problèmes …

Utilise <![CDATA[ et ]]> pour la protéger dans ton textarea alors? Et fout le dans une script javascript, et pas dans un attribut onclick où tu ne pourras pas utiliser CDATA.

oui, onclick= mafonctionjs, ya pas de pb
je cherche comment marche le CDATA là, si jamais tu connais un site qui explique ça bien … :slight_smile:

La documentation XML ?

<script type="text/javascript">
...

<![CDATA[var x = "
requête
";]]>
</script>