Se connecter avec
S'enregistrer | Connectez-vous

Probleme de checkbox avec formulaire PHP

Dernière réponse : dans Programmation

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>");

?>

Lassé par la pub ? Créez un compte

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!
Expert Programmation

<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];
}
?>

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???
Expert Programmation

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

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">
Expert Programmation

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)

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
Lassé par la pub ? Créez un compte
Tom's guide dans le monde