Votre question

Probleme de checkbox avec formulaire PHP

Tags :
  • Html
  • Programmation
Dernière réponse : dans Programmation
15 Août 2005 13:01:28

Bonjour,
Voilà mon problème:
je souhaite réaliser un formulaire dans lequel j'intègre des cases à cocher pour lesquelles il est possible d'en sélectionner plusieures.
Seulement si j'en coche plusieures, il me prend en compte uniquement la dernière cochée.
Pouvez-vous m'aider à rédiger mon code PHP (et HTML si celui-ci est faux)car ça fait plusieurs jour que je me prends la tête? Merci.

Code HTML:
<form method="post" action="test2contact.php">
<p>Civilité:
<input name="civilite" type="checkbox" id="civilite" value="monsieur">
Monsieur
<input name="civilite" type="checkbox" id="civilite" value="madame">
Madame
<input name="civilite" type="checkbox" id="civilite" value="mademoiselle">
Mademoiselle </p>
<p>
<input type="submit" name="Submit" value="Envoyer">
</p>
</form>

CODE PHP:
<?php

$destinataire= "monadresse@domaine.fr";
$objet = "Formulaire de contact";
$headers = "From: monsite.fr\n\r";
$headers .= "MIME-Version: 1.0\n\r";
$headers .= "Content-Type: text/html; charset=iso-8859-1\n\r";


$civilite =
$items = "monsieur";
$items .= "madame";
$items .= "mademoiselle";

for ($i = 0; $i <= $items; $i++) {

$civilite = $_POST['civilite'];}

$msg = "civilite = $civilite";


echo nl2br($msg);

mail($destinataire, $objet, $headers, $msg);

echo("<p><font face=verdana size=2>Votre message a bien été envoyé.<br>Merci d'avoir rempli ce formulaire.</font>"); echo("<p> </p><p> </p><p align=\"center\" ><a href=\"test2contact.htm\"><strong>Retour</strong></a></p>");

?>

Autres pages sur : probleme checkbox formulaire php

15 Août 2005 13:15:17

Change le nom du input name="different"
15 Août 2005 15:00:13

En fait je tiens à garder civilité. Mais en fait je crois qu'il faut utiliser des [] (name="civilite[]") mais dans mon mail ça m'écris civilite=array (au lieu de monsieur, madame etc...). Tu comprends? et puis je souhaite vraiment recevoir monsieur ET madame dans mon mail si la personne coche ces 2 cases!
Contenus similaires
15 Août 2005 15:15:31

je suis déjà allé sur ce site (et plein d'autres d'ailleurs), mais j'y comprends rien et c'est pour ça que j'ai besoin qu'on m'aide par rapport à mon cas.
15 Août 2005 17:52:48

Aidez-moi svp!!!
a c 232 L Programmation
15 Août 2005 18:47:42

<form method="post" action="">
<p>Civilité:
<input name="civilite[]" type="checkbox" id="civilite" value="monsieur">
Monsieur
<input name="civilite[]" type="checkbox" id="civilite" value="madame">
Madame
<input name="civilite[]" type="checkbox" id="civilite" value="mademoiselle">
Mademoiselle </p>
<p>
<input type="hidden" name="poster">
<input type="submit" name="Submit" value="Envoyer">
</p>
</form>

<?php

if (isset($poster)) {

echo $civilite[0];
echo $civilite[1];
echo $civilite[2];
}
?>
15 Août 2005 22:55:24

j'ai repris ton code mais j'obtiens dans mon mail civilite=Array(1) Array(2) Array(3) (même si j'en coche qu'un!!!)
Qu'est ce qu'il faut faire pour obtenir civilite=monsieur,mademoiselle par exemple si je coche monsieur et mademoiselle???
a c 232 L Programmation
16 Août 2005 09:17:33

quand j'ai testé ça, j'obtiens monsieurmadame (quand j'ai coché les deux)

Sinon, rajoute un $civilite = $_POST['civilite'] !
Car chez mon fournisseur d'accès, il reconnait pas les $_POST['blabla'] met reconnait directement $blabla
16 Août 2005 19:55:53

Cette fois j'ai mieux appliqué ton code et je reçois ENFIN ce que je coche,merci!!!:
<form method="post" action="test2contact.php">
<p>Civilité:
<input type="checkbox" name="civilite[]" value="monsieur">Monsieur
<input type="checkbox" name="civilite[]" value="madame">Madame
<input type="checkbox" name="civilite[]" value="mademoiselle">Mademoiselle </p>
<p>
<input type="hidden" name="poster">
<input type="submit" name="Submit" value="Envoyer">
</p>
</form>

<?php

$destinataire= "monadresse@domaine.fr";
$objet = "Formulaire de contact";
$headers = "From: monsite.fr\n\r";
$headers .= "MIME-Version: 1.0\n\r";
$headers .= "Content-Type: text/html; charset=iso-8859-1\n\r";

if (isset($poster)) {

echo $civilite[0];
echo $civilite[1];
echo $civilite[2];
}

$civilite = $_POST['civilite'][0];
$civilite .= $_POST['civilite'][1];
$civilite .= $_POST['civilite'][2];

$msg = "civilite = $civilite";

echo nl2br($msg);

mail($destinataire, $objet, $headers, $msg);

echo("<p><font face=verdana size=2>Votre message a bien été envoyé.<br>Merci d'avoir rempli ce formulaire.</font>"); echo("<p> </p><p> </p><p align=\"center\" ><a href=\"test2contact.htm\"><strong>Retour</strong></a></p>");

?>

(Je tiens à dire que je teste en local avec easyphp)
Cependant, si je coche monsieur et madame un message d'erreur apparait car mademoiselle n'est pas cochée et voilà ce que mon client est censé lire:"
Notice: Undefined offset: 2 in c:\easyphp1-8\www\test2contact.php on line 18
civilite = monsieurmadame
Votre message a bien été envoyé.
Merci d'avoir rempli ce formulaire. " Comment faire pour que le message de "Notice" n'apparaisse pas quand on ne coche pas une valeur?



Retour
  1. <form method="post" action="test2contact.php">
  1. <form method="post" action="test2contact.php">
a c 232 L Programmation
16 Août 2005 20:14:30

Pour ce truc la :

$civilite = $_POST['civilite'][0];
$civilite .= $_POST['civilite'][1];
$civilite .= $_POST['civilite'][2];

C'est pas une bonne idée de faire ce truc je crois... c'est peut etre pour ça qu'il te met une erreur, car $_POST['civilite'][2] est pas défini, faudrait faire un test pour avoir la dernière valeur du tableau (je connais pas le code... mais y'a une fonction toute faite), et tu fais une boucle qui fait la même chose de 0 au nombre de valeurs que tu trouves moins 1.

(je sais pas si c'est très clair :-D)
16 Août 2005 20:45:01

un truc du genre :
for ($i=0 ; $i<2 ; $i++){
$civilite = $_POST['civilite'][0];
$civilite .= $_POST['civilite'][1];
$civilite .= $_POST['civilite'][2];
}
?????
En tout cas celle-ci ne marche pas
a c 232 L Programmation
16 Août 2005 23:14:41

gni ????
il te sert à quoi ton $i ? tu l'utilises même pas :lol: 

Ca serait plutot un $civilite .= $_POST['civilite']$i];
enfin je sais pas, je connais pas trop les .= !!
26 Août 2005 10:21:58

Essaie quelque chose comme ca...

$civilité="";
for ($i=0 ; $i<2 ; $i++){
if(isset($_POST['civilite'][$i]))
{
$civilite .= $_POST['civilite'][$i].", "; //on rajoute une virgule après chaque élément coché...
}
}
$civilite=rtrim($civilite," ,"); // on suprime la dernière virgule de la chaine
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS