Probleme de checkbox avec formulaire PHP - Programmation
TomsGuide.com : 700 000 inscrits répondent à toutes vos questions high-tech et informatique.
Pour obtenir de l'aide, inscrivez-vous gratuitement !
 




Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Probleme de checkbox avec formulaire PHP
 
Profil : IDNaute
Plus d'informations

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

?>

Liens sponsorisés


Inscrivez-vous ou connectez-vous pour masquer ceci.

http://www.sim07.net
Profil : Administrateur
Plus d'informations

Change le nom du input name="different"

Profil : IDNaute
Plus d'informations

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!

Profil : Extensionaute
Plus d'informations
Profil : IDNaute
Plus d'informations

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.

Profil : IDNaute
Plus d'informations

Aidez-moi svp!!!

Profil : Extensionaute
Plus d'informations

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

Profil : IDNaute
Plus d'informations

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

Profil : Extensionaute
Plus d'informations

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

Profil : IDNaute
Plus d'informations

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

Code :
  1. <form method="post" action="test2contact.php">
Code :
  1. <form method="post" action="test2contact.php">

Profil : Extensionaute
Plus d'informations

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)

Profil : IDNaute
Plus d'informations

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

Profil : Extensionaute
Plus d'informations

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 .= !!

Profil : IDNaute
Plus d'informations

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