[Résolu]envoi valeur checkbox par mail

Petit nouveau ! | 6 Messages

30 juin 2006, 13:29

Bonjour,
j'ai un super modèle de formulaire téléchargé probablement ici qui explique comment récupérer les valeurs des boutons radio, checkbox, textarea etc. Donc ça marche pour la récupération des valeurs, mon problème c'est qu'il faudrait envoyer ces valeurs ensuite par mail.. Sinon ça marche mais pas la valeur d'un checkbox avec choix multiple.

formulaire
<td><input name="chambre[]" type="checkbox" value="chambre1" <?php if(test("chambre1")){echo " checked=\"checked\"";} ?> />
          Réserver</td>

<td><input name="chambre[]" type="checkbox" value="chambre2" <?php if(test("chambre2")){echo " checked=\"checked\"";} ?> />
          Réserver</td>

<td><input name="chambre[]" type="checkbox" value="chambre3" <?php if(test("chambre3")){echo " checked=\"checked\"";} ?> />
          Réserver</td>

<td><input name="chambre[]" type="checkbox" value="chambre4" <?php if(test("chambre4")){echo " checked=\"checked\"";} ?> />
          Réserver</td>

et ce petit code qui va avec mais qui n'a probablement rien à faire avec le problème mais je vous le mets quand même :

Code : Tout sélectionner

function test($choix) { global $chambre; for ($i = 0; $i < count($chambre); $i++) if($choix==$chambre[$i]) return true; }
POur l'afficher sur la page de confirmation (ce qui marche):

Code : Tout sélectionner

if($chambre) { print "Vous avez réservé : "; for ($i = 0; $i < count($chambre); $i++) { echo $chambre[$i]." - "; } print "<br />\n";
Si je l'envoie par mail, la valeur n'est pas transmise, il me marque : Array, voici le code :
$dest1 = "[email protected]";
$exp = "From: [email protected]";
$sujet = "Formulaire de réservation";
$texte = $texte."\r\n";
$texte = $texte."Une réservation a été faite pour: ".$chambre."\r\n";
$texte = $texte."et/ou : ".$etage."\r\n";
$texte = $texte."Pour combien de nuits : ".$nuits."\r\n";
$texte = $texte."Pour combien de personnes : ".$personnes."\r\n";
...etc...
mail($dest1, $sujet, $texte, $exp);
Est -ce que quelqu'un saurait ? Merci.[/b]
Modifié en dernier par laura le 03 juil. 2006, 15:34, modifié 3 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 juin 2006, 13:41

C'est tout à fait normal, avec ce système tu récupères un tableau rempli des valeurs des cases cochées.

Et "Array" veut dire tableau.
Si tu veux avoir la liste des valeurs dans ton mail, il faut que tu boucles sur ce tableau, et que tu concatènes les valeurs dans une chaîne.
Un peu comme si tu voulais les afficher.

Exemple :
foreach($chambres as $valeurChambre) {
   $texte = $texte."Une réservation a été faite pour: ";
   $texte.= $valeurChambre."\n";
}

Petit nouveau ! | 6 Messages

30 juin 2006, 15:03

merci beaucoup de m'avoir aidée mais je n'y arrive pas.

ce que j'ai pour l'instant est apparemment loin de ce qu'il faudrait mais c'est juste un essai parmi d'autres..
$chambre = array("chambre1", "chambre3", "chambre3", "chambre4");
foreach($chambre as $valeurChambre){ 
$texte = $texte."Une réservation a été faite pour: "; 
$texte.= $valeurChambre."\n"; 
} 
et dans le mail j'ai :

Une réservation a été faite pour: chambre1
Une réservation a été faite pour: chambre2
Une réservation a été faite pour: chambre3
Une réservation a été faite pour: chambre4

toujours pareil même si j'en réserve qu'une seule, 2,3.. Je continue à chercher mais si tu aurais le temps de m'expliquer un petit peu plus, ce serait génial.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 juin 2006, 15:09

Ben je ne sais pas trop quoi expliquer de plus... avec le petit code que tu as mis en exemple le résultat est tout à fait normal.

Tu définis un tableau avec 4 cellules, puis le foreach parcourt ce tableau...

Si tu mets juste la boucle pour tester à la récupération de ton formulaire ça ne marche pas ?

Petit nouveau ! | 6 Messages

30 juin 2006, 16:13

mais je ne sais pas faire des boucles par ci et des concatenations par là.. Oui, sur la page de confirmation je récupère la valeur de checkbox, si c'est ça ce que tu me demandes..

bon, j'essaie de trouver comment on utilise foreach même si je ne vois pas le rapport avec mon problème (pas plutôt quelque chose style "si le bouton est "checked" envoie-moi la valeur" ?), bon je suis débutant, comme tu as certainement compris.

Eléphant du PHP | 95 Messages

30 juin 2006, 16:17

regarde mon post http://www.phpfrance.com/forums/voir_sujet-20120.php, il peut peut-être t'être utile ^^

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 juin 2006, 16:29

(pas plutôt quelque chose style "si le bouton est "checked" envoie-moi la valeur" ?)
ça, ça se fait tout seul
Seul les valeurs des cases cochées sont transmises, un soucis de moins donc.

Code : Tout sélectionner

<td><input name="chambre[]" type="checkbox" value="chambre1" <?php if(test("chambre1")){echo " checked="checked"";} ?> /> Réserver</td> <td><input name="chambre[]" type="checkbox" value="chambre2" <?php if(test("chambre2")){echo " checked="checked"";} ?> /> Réserver</td> <td><input name="chambre[]" type="checkbox" value="chambre3" <?php if(test("chambre3")){echo " checked="checked"";} ?> /> Réserver</td> <td><input name="chambre[]" type="checkbox" value="chambre4" <?php if(test("chambre4")){echo " checked="checked"";} ?> /> Réserver</td>
Avec ce code, vu que tu as appellé tes checkbox chambre[], avec des crochets, tu vas récupérer un tableau.
Celui-ci contiendra uniquement les valeurs des cases cochées.
C'est à dire que si je coche la première et la troisième, tu récupèreras ce tableau :
$chambre = Array(
   0 => "chambre1",
   1 => "chambre3",
);
Si tu utilises directement la variable $chambre, il t'affiche Array, ce qui est normal. Il faut récupérer chaque valeur indépendamment.

C'est là qu'intervient le foreach().
Cette fonction permet de boucler sur un tableau et de récupérer les valeurs de chaque cellule.
Donc à chaque tout de boucle, tu vas récupérer la valeur, et la concaténer dans une chaîne, que tu mettras dans ton mail.

Est-ce que tu vois un peu mieux ?

Tu peux regarder le lien que Ben-J t'as filé, ou celui-ci dans la FAQ :
Récupérer la saisie avec des cases à cocher
Ce dernier étant un exemple tout simple.

Bon courage.

Petit nouveau ! | 6 Messages

03 juil. 2006, 12:12

..encore un petit coup de pouces, j'y suis presque !!

le mail pose toujours un problème puisque dès qu'on réserve deux chambres, il n'en envoie qu'une (par contre quand on réserve qu'une seule, ça marche ! yes !) :
$tabChambres = (isset($_POST['chambre']))?$_POST['chambre']:null;
echo "Réservation à été faite pour :<br>";
if (!empty($tabChambres)) {
    foreach($tabChambres as $cle => $valeur) {
        echo $cle.' : '.$valeur.'<br>';
    }
}

$dest1 = "[email protected]";
$exp = "From: [email protected]";
$sujet = "Formulaire de réservation";
$texte = $texte."\r\n";

$texte = $texte."Une réservation a été faite pour: "; 
$texte = $texte.$cle.' : '.$valeur."\r\n"; 

etc

donc comment lui dire que s'il y a plusieurs réponses, eh ben, il faut les afficher toutes ! j'ai lu les réponses précédentes, je sais qu'il faudrait "concatener dans une chaîne".. avec if..else ? je n'ai pas réussi.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 juil. 2006, 13:44

donc comment lui dire que s'il y a plusieurs réponses, eh ben, il faut les afficher toutes ! j'ai lu les réponses précédentes, je sais qu'il faudrait "concatener dans une chaîne".. avec if..else ? je n'ai pas réussi.
Concaténer c'est "coller" deux valeurs ensembles, on le fait avec le point.
Tu n'as pas besoin de tester si tu as 1 chambre de réservée, 2, 3 ou 1000.

Il suffit que tu fasses une boucle sur ton tableau de chambres, et que tu concatènes chaque valeur trouvée dans une nouvelle variable "générale".
Tu as 3 chambres de réservées ? => les 3 vont être concaténées.
Tu n'en as qu'une ? la boucle s'arrêtera d'elle-même
$tabChambres = (isset($_POST['chambre']))?$_POST['chambre']:null;
// si le tableau n'est pas vide c'est qu'il y a au moins une chambre de réservée
if (!empty($tabChambres)) {
	$texteResa = "Une réservation a été faite pour : \n";
	// donc on boucle dessus pour concaténer chaque valeur rencontrée dans la variable de stockage $texteResa
	foreach($tabChambres as $cle => $valeur) {
		$texteResa .= $valeur."\n"; // .= va rajouter la valeur de $valeur au contenu de $texteResa
	}
} else {
	$texteResa = 'Aucune chambre n\'a été réservée.';
}

$dest1 = "[email protected]";
$exp = "From: [email protected]";
$sujet = "Formulaire de réservation";
$texte = $texte."\r\n"; // à quoi sert cette ligne ?

// on ajoute le texte dynamique généré dans la boucle au texte du mail
$texte = $texte.$texteResa;

// emballez, c'est pesé

Petit nouveau ! | 6 Messages

03 juil. 2006, 15:31

CA MARCHE !!!!! Oui d'accord, c'est normal, c'est toi qui l'as fait. Je te remercie enormement !!