traitement addslashes et type hidden

Eléphant du PHP | 148 Messages

15 sept. 2005, 09:46

bonjour,
je suis devant une incompréhension
je suis avec un formulaire

je rentre une donnée dasn ce formulaire contenant un apostrophe
ensuite je passe dasn une fonction qui me traite les apostrophhe avec addslashes et qui insère cette donnée dans la base, jusqu'ici tout va bien

puis je peux ensuite revenir sur ce formualire pour le modifier
or ici je ne souhaite pas modifier ce champ je veux qu'il réapparraisse tel que je l'ai rentré mais la problème: en fait il apparait bien mais vu que je ne veux pas le changer je met un type hidden avec cette valeur mais visiblement ca ne marche aps parce que si je retourne une deuxième fois pour modifier la valeur est coupé au niveau de l'apostrophe

voici le code:

<?php if ($mode == MODE_INSERTION) { ?>

<TR>	<TD bgcolor="B3FCC8" rowspan=3>Mode de contact  :</TD>
				<TD colspan="3"><INPUT TYPE=radio NAME="ModePresentation" checked VALUE="par téléphone" id="par téléphone" /> <label for="par_téléphone"> par téléphone</label><br /></TD></TR>
   		<TR>	<TD colspan="3"><INPUT TYPE=radio NAME="ModePresentation" VALUE="par ecrit" id="par ecrit" />  <label for="par_ecrit"> par écrit </label><br /></TD>
   		<TR>	<TD colspan="3"><INPUT TYPE=radio NAME="ModePresentation" VALUE="à l'accueil du CAVA" id="à l'accueil du CAVA" />  <label for="à l'accueil du CAVA"> à l'accueil du CAVA </label><br /></TD>
   	
<?php } else if ($mode == MODE_MAJ){ ?>	

<?php } ?> 
		<TR>	<TD bgcolor="B3FCC8" >Mode de contact  :</TD>
				<TD colspan="3"><?php echo $val_defaut['ModePresentation']; ?></TD> 
	 			<INPUT TYPE=HIDDEN NAME=ModePresentation VALUE='<?= $val_defaut['ModePresentation']?>'></TD></TR>
		</TR>
					
   		
	<?php } ?>
ensuite la fonction qui insère dans ma base
$AncienNom =addSlashes((isset($_POST['AncienNom']))?$_POST['AncienNom']:null);
  $AncienPrenom =addSlashes((isset($_POST['AncienPrenom']))?$_POST['AncienPrenom']:null);
  $nom =addSlashes((isset($_POST['nom']))?$_POST['nom']:null);
  $prenom =addSlashes((isset($_POST['prenom']))?$_POST['prenom']:null);
  
$ModePresentation =addSlashes((isset($_POST['ModePresentation']))?
$_POST['ModePresentation']:null); 
  

 if ($mode == MODE_INSERTION)    
    $requete = "INSERT INTO Formulaire (nom, prenom, "
. "ModePresentation,"
. " VALUES ('$nom', '$prenom',$ModePresentation')";

else	
    $requete = "UPDATE Formulaire SET nom='$nom' , "
   . "ModePresentation='$ModePresentation', "
   . "WHERE nom = '$AncienNom' AND prenom='$AncienPrenom' ";
merci de bien vouloir m'aider

Eléphant du PHP | 493 Messages

15 sept. 2005, 09:54

ta requete SQL update est fausse ! il y avait une virgule en trop.

Code : Tout sélectionner

UPDATE Formulaire SET nom = '$nom', ModPresentation = '$ModePresentation' WHERE nom = '$AncienNom' AND prenom = '$AncienPrenom'
avant de poser des questions pour de si petites erreurs, merci de faire le debuggage tout seul avant ! tu aurais testé ta requete avec phpmyadmin ou encore mis un mysql_error() et tu aurais été fixé.

Eléphant du PHP | 493 Messages

15 sept. 2005, 09:54

je ne sais pas si c'est la cause de l'erreur mais corrige deja celle-là et soit plus clair dans tes explications !

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:05

Salut,
ça vient de ce que tu n'as pas mis le addslashes() au bon endroit. Je te suggère aussi d'écrire du code lisible, ça aide pas mal:
<?php
$AncienNom        = (isset($_POST['AncienNom'])        ? addSlashes($_POST['AncienNom'])        : null);
$AncienPrenom     = (isset($_POST['AncienPrenom'])     ? addSlashes($_POST['AncienPrenom'])     : null);
$nom              = (isset($_POST['nom'])              ? addSlashes($_POST['nom'])              : null);
$prenom           = (isset($_POST['prenom'])           ? addSlashes($_POST['prenom'])           : null);
$ModePresentation = (isset($_POST['ModePresentation']) ? addSlashes($_POST['ModePresentation']) : null);

if ($mode == MODE_INSERTION)
$requete = "INSERT INTO Formulaire (nom, prenom, ModePresentation)"
          ." VALUES ('$nom', '$prenom',$ModePresentation')";
else
$requete = "UPDATE Formulaire SET nom='". $nom ."', "
                               . "ModePresentation='". $ModePresentation ."', "
         . "WHERE nom = '". $AncienNom ."' "
         . "AND prenom='". $AncienPrenom ."' ";
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 148 Messages

15 sept. 2005, 10:14

alors merci a tous
je suis désolé pour la mise en page je n'ai aps regarder le message avant et les lignes étaient trop longue encore milles excuses
par contre il est bien évident que je ne vous appelle pas pour une virgule
d'ailleurs cela aurait planté le code
c'est juste qu'il y a normalement 45 données à insérer et j'ai voulu éviter de flooder et du coup je n'ai pas penser à enlever la virgule
bref cyrano ca ne marche pas non plus j'ai l'impression que quand je passe en mis à jour la variable n'est pas traité
vous voyez autre chose??

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:16

Refais le script complet de la manière dont je l'ai présenté et colle moi ça ici, on va bien voir.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 148 Messages

15 sept. 2005, 10:34

a mon avis l'erreur n'est pas dans cette page mais plutot dans cele ou je met le type hidden
je ne vois pas pourquoi il ne traite pas ma variable une deuxième fois
j'ai résolu le problème d'une manière différente
vu que je ne souhaite pas modifier cette variable après l'avoir rentrer il me suffisait juste de ne pas la remettre à jour (donc l'enlever dans le update et puis de l'afficher en allant la chercher dans la base)

par contre ca n'explique pas pourquoi ca ne fonctionne aps plus haut
cyrano tu m'a dmeandé de remettre tout le script mais il est bien trop long
tu verra qu'en utilisant un hidden ca ne passe pas et je ne sais pas pourquoi un type hidden est bien passer en post tout pareil??
je ne remet pas le code puisque j'ai fait un copier coller de ta solution et ca ne fonctionnait pas i ly a une erreur d'une autre nature
d'ailleurs pourrait tu me dire pourquoi mon addslashes est mal placé alors que ca fonctionne très bien sur tout le reste?


MERCI

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:38

Tu as mis le addslashes de manière complètement illogique : addslashes doit traiter une valeur, pas "l'existence d'une valeur" or tu l'avais mis autour du isset().

Pour le code, je ne parle pas de me mettre 2000 lignes de code, mais la partie que tu as mise mais complète.

Si tu as des messages d'erreur, ce serait bien de les connaître aussi. Enfin un détail qui peut t'aider pas mal, c'est d'ajouter une ligne de débuggage qui fasse afficher la requête à l'écran : tu seras vite fixé sur la validité de la requête.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 148 Messages

15 sept. 2005, 10:47

je n'avais aucun message d'erreur seulement l'affichage de la valeur sur mon formualire n'était aps la bonne puisqu'elle coupait au niveau de l'apostrophe
merci quand même mon problème étant résolu je continue parce que je suis à la bourre
mais je reviendrai mettre le script
merci