problem de "

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 15:16

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 ?

Mammouth du PHP | 19672 Messages

22 août 2005, 15:21

str_replace("\"","\\\"", $var);
:)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 15:31

ç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 ?

Mammouth du PHP | 19672 Messages

22 août 2005, 15:38

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 15:49

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 ?

Mammouth du PHP | 19672 Messages

22 août 2005, 15:57

  1. str_replace()
  2. addslashes()
  3. insertion
  4. extraction
  5. stripslashes()
  6. affichage
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 16:18

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>

Mammouth du PHP | 19672 Messages

22 août 2005, 16:22

Ç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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 16:30

à 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.

Mammouth du PHP | 19672 Messages

22 août 2005, 16:38

normalement, la sortie directe devrait afficher des données avec des \" et non des " tout court...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 16:44

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:
Modifié en dernier par VaN le 22 août 2005, 16:54, modifié 1 fois.

Mammouth du PHP | 19672 Messages

22 août 2005, 16:54

La ligne de code est écrite comment pour afficher les données
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 16:54

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

Mammouth du PHP | 19672 Messages

22 août 2005, 16:56

et à ce moment là, comment sont les valeus brutes : \\\" ou déjà \"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VaN
Mammouth du PHP | 1107 Messages

22 août 2005, 17:04

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.
Modifié en dernier par VaN le 22 août 2005, 17:10, modifié 2 fois.