Page 1 sur 2

problem de "

Posté : 22 août 2005, 15:16
par VaN
Bonjour a toute la communauté,
retour de vacances, alors je reviens sur php-france au grand malheur des habitués :lol:

Alors voilà, j'ai un probleme de "

comment faire pour afficher une donnée en valeur d'un champ texte, alors que celle-ci contient des " ?

l'affichage du " va fermer l'attribut, et donc ne pas ecrire la donnée en entiere.

Voilà les 3 alternatives que j'ai trouvé, chacun pose un probleme :

avec $var = Hello, variable avec des " et des ' et voila.
<input type="text" value="<?php echo $var ?>">
donne value="Hello, variable avec des'
<input type="text" value='<?php echo $var ?>'>
donne value='Hello, variable avec des " et des"
<input type="text" value=<?php echo $var ?>>
donne value=Hello,

Existe t'il une solution qui permette d'ecrire des ", des ' et des espaces ?

Posté : 22 août 2005, 15:21
par Cyrano
str_replace("\"","\\\"", $var);
:)

Posté : 22 août 2005, 15:31
par VaN
ça marche pas vraiment, j'obtiens [ Hello, variable avec des \ ] dans mon champ texte. dois je placer des addslashes() quand j'insere la donnée ? des stripslashes quand je la resssors ?

Posté : 22 août 2005, 15:38
par Cyrano
Si c'est pour des manipulations de données avec échanges avec un SGBD, oui, tu as grandement intérêt à utiliser addslashes et stripslashes de la manière dont tu l'as mentionné.

str_replace n'est là que pour traiter la chaine, addslashe la prépare pour insertion vers la base, mais les deux sont indépendantes et la seconde duit être utilisée seulement APRÈS la première.

Posté : 22 août 2005, 15:49
par VaN
je comprends pas bien ?

je dois faire un addslashes PUIS un str_replace au moment ou j'insere ma variable, et ensuite juste un stripslashes quand je la ressors ?

ou un addslashes quand je la rentre, et str_replace PUIS un stripslashes quand je la ressors ?

Posté : 22 août 2005, 15:57
par Cyrano
  1. str_replace()
  2. addslashes()
  3. insertion
  4. extraction
  5. stripslashes()
  6. affichage

Posté : 22 août 2005, 16:18
par VaN
ne marche pas, la valeur de l'input se stoppe juste avant le premier "

code :
if (isset ($_POST['titre']))
{	
	$titre = str_replace("\"","\\\"", $_POST['titre']); 
	$titre = addslashes($titre);
}
//j'insere $titre dans la bdd

//j'extrais $result['titre'] de la bdd
<td><input type="text" name="titre" size="31" value="<?php if (isset($result2['titre'])) { echo stripslashes($result2['titre']); } ?>" /></td>

Posté : 22 août 2005, 16:22
par Cyrano
Ça m'avance bien :-k

Ça fonctionne jusqu'à quel moment au juste ? as-tu essayé ta requête directement dans phpMyAdmin pour déjà voir ce qui ressort ?

À l'affichage, ça donne quoi ?

Posté : 22 août 2005, 16:30
par VaN
à l'affichage en dehors du value="", il me sort la donnée avec les ", nickel comme il faut. C'est donc bien l'utilisation des "" dans value ="..." qui fait foirer.

Posté : 22 août 2005, 16:38
par Cyrano
normalement, la sortie directe devrait afficher des données avec des \" et non des " tout court...

Posté : 22 août 2005, 16:44
par VaN
oui c'est ça, une sortie direct affiche les \", met un affichage avec stripslashes (toujours en dehors de value="" ) affiche le texte sans les \ (logique)

edit : allez viens faire ton 6000e post ici cyrano !!! :lol:

Posté : 22 août 2005, 16:54
par Cyrano
La ligne de code est écrite comment pour afficher les données

Posté : 22 août 2005, 16:54
par VaN
<input type="text" name="titre" size="31" value="<?php if (isset($result2['titre'])) { echo stripslashes($result2['titre']); } ?>" />

Posté : 22 août 2005, 16:56
par Cyrano
et à ce moment là, comment sont les valeus brutes : \\\" ou déjà \"

Posté : 22 août 2005, 17:04
par VaN
je viens de trouver une petite faille deja :
ce n'est pas
  1. str_replace()
  2. addslashes()
mais
  1. addslashes()
  2. str_replace()
car sinon le str_replace ne remplacera rien.

un echo juste apres str_replace me marque "
pourtant, la variable rentrée en bdd juste après est " (j'y comprends plus rien)

donc la valeur brute sortie est ", et la valeur apres stripslashes est "


edit : de toute façon, je ne vois pas comment mon probleme peut etre resolu.. pour l'html, un \ est un \, rien de plus, ce n'est pas un caractere special. et un " est un ", donc il ferme le " precedent. donc quoi qu'il arrive, l'affichage d'un " dans un value=".." fermera l'attribut, et donc me fera perdre la fin de ma valeur.