Problemes d'affichage de variable

GanJasTeR
Invité n'ayant pas de compte PHPfrance

09 avr. 2006, 02:45

Bonjour à tous.
Voila même en relisant les cours du SDZ je n'ai pas réussi à trouver solution a mon problème qui est le suivant :

Sur une page devis.php, il y a 3 champs a remplir et quelques case a cocher. L'action de ce formulaire est une page connexe qui est confirmation.php.

J'aimerais que sur cette page confirmation, si on a coché design, une étoile apparaisse a coté de Design :,
et qu'une variable design soit définie à 25 afin que l'on puisse faire un total en fin de page.

Voici déja la structure de ma BDD :

Image

Voila donc les cases à cocher partent de design pour aller jusqu'à divers.
Et pour expliquer plus amplement mon problème, un peu de code :)

Confirmation.php

Code : Tout sélectionner

<tr height="30"> <td align="left" width="150"><b>Nom :</b></td> <td align="center" width="150"><?php echo $_POST['nom']; ?></td> </tr> <tr height="30"> <td align="left" width="150"><b>Mail :</b></td> <td align="center" width="150"><?php echo $_POST['mail']; ?></td> </tr> <tr height="30"> <td align="left" width="150"><b>Client :</b></td> <td align="center" width="150"><?php echo $_POST['client']; ?></td> </tr> <tr height="30"> <td align="left" width="150"><b>Design :</b></td> <td align="center" width="150"> <?php if(@$_POST['design'] == 1) { echo "*"; } else { echo ""; } ?> </td> </tr>
Devis.php

Code : Tout sélectionner

<tr height="30"> <td width="100" align="left"><b>Design</b></td> <td width="100" align="center"><input type="checkbox" name="design" /></td> </tr> <tr height="30"> <td width="100" align="left"><b>Codage PHP</b></td> <td width="100" align="center"><input type="checkbox" name="codage" /></td> </tr> <tr height="30"> <td width="100" align="left"><b>Base de données</b></td> <td width="100" align="center"><input type="checkbox" name="bdd" /></td> </tr> <tr height="30"> <td width="100" align="left"><b>Administration</b></td> <td width="100" align="center"><input type="checkbox" name="admin" /></td> </tr> <tr height="30"> <td width="100" align="left"><b>Divers</b></td> <td width="100" align="center"><input type="checkbox" name="divers" /></td> </tr> <tr height="30"> <td width="100" align="left"><b>Adaptation CMS</b></td> <td width="100" align="center"><input type="checkbox" name="cms" /></td> </tr> <input type="hidden" name="id_devis" />
Voila je n'ai aucun problème pour la transmission des champs de texte, mais pour mes cases :(
Dans le code confirmation.php je n'ai mis que jusqu'à la case design, après tout si une marche toutes les autres marchent mais la, ce n'est pas le cas ^^

Voila en espérant avoir été assez explicite, merci de votre attention sur ce post :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 avr. 2006, 09:36

Une case à cocher a pour valeur par défaut "on" lorsqu'elle est cochée et n'est pas envoyée lorsqu'elle ne l'est pas :)

Tu peux donc soit rajouter l'attribut value dans ta checkbox :

Code : Tout sélectionner

<input type="checkbox" name="design" value="1" />
En mettant la valeur à 1 puisque c'est ce que tu utilises après

Ou le mieux est encore non pas de tester si la valeur de $_POST['checkbox'] est égale à 1, mais simplement de tester s'il est défini (puisque quand la case à coché n'est pas cochée, il n'est pas envoyé)
if(isSet($_POST['checkbox'])) { // si la case est définie, quel que soit sa valeur, c'est qu'elle a été cochée
  echo " * "; // on affiche l'étoile
}
// le else n'est pas utile, puisque si la case n'est pas cochée, on ne fait rien :)

Eléphant du PHP | 451 Messages

09 avr. 2006, 12:34

Pour compléter la réponse de Ryle, je pense qu'il faut que tu codes les checkboxes en leur donnant toujours le même nom. Par exemple à la place de :

Code : Tout sélectionner

<input type="checkbox" name="admin" /> <input type="checkbox" name="divers" />
Mettre :

Code : Tout sélectionner

<input type="checkbox" name="MyCb[]" value="admin" /> <input type="checkbox" name="MyCb[]" value="divers" />
Dans ce cas tu vas récupérer un tableau MyCb avec $MyCb[0] qui contient "admin" (si la checkbox était cochée).
En mettant MyCb[] tu ne recevras, après validation, du formulaire que celles qui on été cochées et les indices seront affectés automatiquement.
Si tu veux qu'une case soit cochée dès le départ, je crois qu'i faut lui rajouter CHECKED.
Bonne chance :)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

GanJasTeR
Invité n'ayant pas de compte PHPfrance

09 avr. 2006, 16:15

Merci pour vos réponses ce problème est résolu :)
Mais maintenant toujours plus fort ^^
J'aimerais que si la case est cochée, une variable contenant un prix (donc un numéro) soie définie, afin qu' à la fin de la page un total soit calculé avec l addition de toutes les variables des cases, si elles existent :)

Voici mon code :

Confirmation.php

Code : Tout sélectionner

<tr height="30"> <td align="left" width="150"><b>Design :</b></td> <td align="center" width="150"> <?php if(@$_POST['design'] == 1) { $design = 25; echo ''.$design.' €'; } else { echo ""; } ?> </td> </tr> <tr height="30"> <td align="left" width="150"><b>Codage :</b></td> <td align="center" width="150"> <?php if(@$_POST['codage'] == 1) { $codage = 15; echo ''.$codage.' €'; } else { echo ""; } ?> </td> </tr> <tr height="30"> <td align="left" width="150"><b>Base de données :</b></td> <td align="center" width="150"> <?php if(@$_POST['bdd'] == 1) { $bdd = 5; echo "*"; } else { echo ""; } ?> </td> </tr> <tr height="30"> <td align="left" width="150"><b>Administration :</b></td> <td align="center" width="150"> <?php if(@$_POST['admin'] == 1) { $admin = 5; echo "*"; } else { echo ""; } ?> </td> </tr> <tr height="30"> <td align="left" width="150"><b>Divers :</b></td> <td align="center" width="150"> <?php if(@$_POST['divers'] == 1) { echo "*"; } else { echo ""; } ?> </td> </tr> <tr height="30"> <td align="left" width="150"><b>Adaptation CMS :</b></td> <td align="center" width="150"> <?php if(@$_POST['cms'] == 1) { $cms = 10; echo "*"; } else { echo ""; } ?> </td> </tr> <tr height="30"> <td align="center" width="200" colspan="2"><b>----------------------------------------------------</b></td> </tr> <tr height="30"> <td align="left" width="150"><b>Total :</b></td> <td align="center" width="150"> <?php if(isset($design) AND isset($codage) AND isset($bdd) AND isset($admin) AND isset($cms)) { $total = $design + $codage + $bdd + $admin + $cms; echo $total; } ?> </td> </tr>
*

Voila c'était un peu long mais j'ai mis toutes les case à cocher.
Le problème dans ce code c'est qu'il faut cocher toutes les cases pour avoir un total, si on en décoche une le total ne s'affiche pas.
Merci :)

GanJasTeR
Invité n'ayant pas de compte PHPfrance

09 avr. 2006, 16:22

C'est bon j'ai réslou désolé d'avoir reposté sans avoir eu un minimum de réfléxion... J'ai simplement définie mes variables $design,$codage... à = 0 dans les else {}

Merci encore :)