Page 1 sur 1

Conditions dans un formulaire

Posté : 15 mars 2008, 15:15
par boobz
Bonjour,

J'ai un formulaire avec 5 étapes. A la troisième je dois demander à l'utilisateur s'il veut en faire une utilisation pro ou privée. Pour cela j'ai utilisé un switch, qui marche. Ensuite selon la réponse j'affiche le reste de mon formulaire. Certains champs sont obligatoires et je dois faire un test pour savoir s'il est renseigné ou pas. Une fois que tous les champs sont bons je les insère dans une BD. Voilà l'exposé de la situation. Maintenant le code ... dont je coupe une partie.
if ( ($PARAM['action_form'] == "inserer" && $PARAM['use'] == "pro") && (!isset($PARAM['genre']) && !isset($PARAM['prenom']) && !isset($PARAM['nom'])  ) ) {
$errori = 1;

} elseif ( ($PARAM['action_form']=="inserer" && $PARAM['use'] == "private") && ($PARAM['genre'] == "" || $PARAM['prenom'] == "" || $PARAM['nom'] == "") ) {
$errori = 1;

} elseif ($errori !=1) {
$prenom = addslashes($PARAM[prenom]);
$nom = addslashes($PARAM[nom]);

$sql = "insert into table ....";
$query = mysql_query($sql);
print "<script>";
print " self.location='step4.php';";
print "</script>";
exit;
}
Plus bas dans le code je teste si les champs sont remplis et si ce n'est pas le cas, je réécris le formulaire en rouge pour bien signifier qu'il faut les remplir.

Mon problème est que quel que soit l'endroit où je place les parenthèses je saute directement au step4.php. J'ai essayé de ne pas tout mettre dans une grande parenthèse, mais dans ce cas, soit un cas marche et l'autre pas, soit c'est l'inverse.

Ma question est pourquoi cela ne marche pas comme désiré, est-ce que cette méthode est la bonne et si non quelles sont les alternatives ?

Pour résumer, j'ai un tas de cheveux au pied de ma chaise et comme il ne m'en reste plus beaucoup, je sollicite votre connaissance pour m'en épargner quelqu'uns.

D'avance merci !


PS : pourquoi n'y a-t-il pas de jolies couleurs dans le code ?

Re: Conditions dans un formulaire

Posté : 15 mars 2008, 15:45
par Cyrano
PS : pourquoi n'y a-t-il pas de jolies couleurs dans le code ?
Parce qu'au lieu du bouton [code] il aurait fallu utiliser le bouton [PHP] : tu peux éditer ton message pour modifier.

Posté : 15 mars 2008, 18:50
par AB
Déjà tu a des erreurs ici
$prenom = addslashes($PARAM[prenom]);
$nom = addslashes($PARAM[nom]);
il faudrait écrire
$prenom = addslashes($PARAM['prenom']);
$nom = addslashes($PARAM['nom']);
ensuite après ta requête pourquoi faire une redirection en javascript ?
normalement cela pourrait se faire en php
header("Location: step4.php");exit();

Posté : 16 mars 2008, 08:34
par boobz
Déjà tu a des erreurs ici
$prenom = addslashes($PARAM[prenom]);
$nom = addslashes($PARAM[nom]);
il faudrait écrire
$prenom = addslashes($PARAM['prenom']);
$nom = addslashes($PARAM['nom']);
ok. mais je ne pense que ça soit la source du soucis. D'ailleurs en ajoutant les simple quotes, ça ne change rien au problème.
ensuite après ta requête pourquoi faire une redirection en javascript ?
normalement cela pourrait se faire en php
header("Location: step4.php");exit();
c'est une partie du code qui existait déjà et qui marche. Merci pour l'alternative en PHP, ça m'a fait apprendre quelque chose.

Mais c'est les tests is qui me pose problème. Je réécris en virant l'inutile :
if ( ($PARAM['action_form'] == "inserer" && $PARAM['use'] == "pro") && (!isset($PARAM['genre']) && !isset($PARAM['prenom']) ) {
$errori = 1; 
qui correspond à mon premier cas où use=pro. Ce que le code est sensé faire est de vérifier que les champs genre et prénom sont renseigné et si ce n'est pas le cas, $errori =1.

Mais si on n'est pas dans le cas use=pro, mais dans celui use=private on devrait passer à la suite :
} elseif ( ($PARAM['action_form']=="inserer" && $PARAM['use'] == "private") && ($PARAM['genre']==""||$PARAM['nom']=="" ) {
$errori = 1;
et pareil dans ce cas. Si dans l'un ou l'autre cas, tous les champs sont renseignés, on devrait passer dans le dernier elseif et passer à la phase écriture dans la BD :

Remarque : dans le premier if j'ai utilisé !isset($PARAM['item'] et dans le second $PARAM['item'] == "". Cela revient au même non ?.

Ensuite on passe à l'écriture dans la BD avec une condition ($errori !=1) :

} elseif ($errori !=1) {
$prenom = addslashes($PARAM['prenom']);
$nom = addslashes($PARAM['nom']);

...
headers("Location: step4.php");exit;
}
}
Le problème c'est on passe directement dans ce dernier elseif comme si on ne passait jamais dans l'un deux premiers.. Et pourtant les champs ne sont pas renseignés. Mais pourquoi ??

Une idée ?

Merci d'avance.

Posté : 16 mars 2008, 11:28
par Berzemus
Déjà tu a des erreurs ici
$prenom = addslashes($PARAM[prenom]);
$nom = addslashes($PARAM[nom]);
il faudrait écrire
$prenom = addslashes($PARAM['prenom']);
$nom = addslashes($PARAM['nom']);
ok. mais je ne pense que ça soit la source du soucis. D'ailleurs en ajoutant les simple quotes, ça ne change rien au problème.
Puisqu'on en parle.. si tu mets du texte hors quotes, php pense qu'il s'agit d'une constante. Il n'en trouve pas, et donc il se dit (il est gentil php, mais faut pas en abuser) que c'est peut-être du texte.
D'habitude il lance une "notice", si il est configuré pour. (y'en a qui aiment ignorer les notices de php, c'est une mauvaise habitude). Donc a moins de vouloir faire mouliner php pour rien en lui laissant le soin de bien vouloir comprendre ce qu'on a voulu dire, le texte est a placer entre quotes.
Remarque : dans le premier if j'ai utilisé !isset($PARAM['item'] et dans le second $PARAM['item'] == "". Cela revient au même non ?.
Pas le moins du monde. La différence entre "n'existe pas" et "est égal à 0" est la même qu'entre "exister" et "pas exister". Être ou ne pas être..
si $var == 0 => $var existe.
si !isset($var) => $var ne peut être égal à 0.

Posté : 16 mars 2008, 11:52
par boobz
ok. mais je ne pense que ça soit la source du soucis. D'ailleurs en ajoutant les simple quotes, ça ne change rien au problème.
Puisqu'on en parle.. si tu mets du texte hors quotes, php pense qu'il s'agit d'une constante. Il n'en trouve pas, et donc il se dit (il est gentil php, mais faut pas en abuser) que c'est peut-être du texte.
D'habitude il lance une "notice", si il est configuré pour. (y'en a qui aiment ignorer les notices de php, c'est une mauvaise habitude). Donc a moins de vouloir faire mouliner php pour rien en lui laissant le soin de bien vouloir comprendre ce qu'on a voulu dire, le texte est a placer entre quotes.
Ok j'ai compris merci. Petite question, quelle est la variable de configuration de PHP pour avoir accès à ces "notices" ?
Remarque : dans le premier if j'ai utilisé !isset($PARAM['item'] et dans le second $PARAM['item'] == "". Cela revient au même non ?.
Pas le moins du monde. La différence entre "n'existe pas" et "est égal à 0" est la même qu'entre "exister" et "pas exister". Être ou ne pas être..
si $var == 0 => $var existe.
si !isset($var) => $var ne peut être égal à 0.
Ok, mais

$var == "" est différent de $var == 0 non ?

Dans mon formulaire, si l'utilisateur n'a pas rentré de données, que vaut $var ? 0, "", ou encore autre chose ?

Sinon pour ma question précédente, une idée ?

Merci pour tes réponses.

Posté : 16 mars 2008, 11:56
par Cyrano
Petite question, quelle est la variable de configuration de PHP pour avoir accès à ces "notices" ?
Édite ton php.ini et configure :

Code : Tout sélectionner

error_reporting = E_ALL | E_STRICT

Posté : 16 mars 2008, 12:51
par boobz
Oui effectivement, ça me dit plein de choses (parfois désagréables) maintenant ;-)

Merci