Récupérer un select multiple dans le corps d'un mail [Résolu]

Signaler
-
 Greg -
Bonjour à tous,
j'aurai besoin de votre aide. Sur mon site j'ai un formulaire HTML lié à un PHP qui m'envoie un mail. J'arrive à récupérer toutes les infos que je souhaite sans problème, sauf celles provenant d'une liste à choix multiple. Cela ne me retourne que le dernier choix coché.

Quelqu'un aurait une idée?

Merci de votre aide

extrait formulaire html
<form method="post" id="form" action="monfichier.php">
...
<select name="maliste" multiple="multiple" size="4" id="maliste">
           <option value="choix1">choix1</option>
           <option value="choix2">choix2</option>
           <option value="choix3">choix3</option>
           <option value="choix4">choix4</option>
</select>
...
</form>

et donc extrait fichier php qui m'envoie un mail
<?php
 $destinataire = '***@***';

    $expediteur = $_POST['email'];
     
    $objet = $_POST['subject'];
     
    $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
    $headers .= 'Content-type: text/html; charset=utf-8'."\n"; // l'en-tete Content-type pour le format HTML
    $headers .= 'From: '.$_POST['email'].'<'.$expediteur.'>'."\n"; // Expediteur
     
    $message =  '<div style="width: 100%; text-align: left;"> 
     une case de mon formualire : '.$_POST['caseformulaire'].'
     une autre case de mon formualire : '.$_POST['autrecaseformulaire'].'
                    ICI JE VEUX QUE S'INSCRIVE LES CHOIX DE MA LISTE
     </div>';
    
 $message= nl2br($message);
  
    if(mail($destinataire, $objet, $message, $headers))
    {
        echo '<script languag="javascript" style="top:200px;">alert("Votre message a bien été envoyé ");</script>';
    }
    else // Non envoyé
    {
        echo '<script languag="javascript">alert("Votre message n\'a pas pu être envoyé");</script>';
    }
    
?>

EDIT : Ajout des balises de code.

6 réponses

Messages postés
31456
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021
3 277
Bonjour,

Commence par faire un print_r de ta variable $_POST pour voir à quoi elle ressemble lors tu selectionnes plusieurs valeurs.
print_r($_POST);


Normalement.. tu devrais y voir un array..
De là, il ne te reste plus qu'à faire une boucle pour récupérer toutes les valeurs dans ton mail.


$values = !empty($_POST['maliste']) ? $_POST['maliste'] : NULL;

if($values ){
  foreach ($values as $a){
      echo $a;
  }
}



PS: à l'avenir, merci d'utiliser les balises de code pour poster du code sur le forum.
Explications ( à lire entièrement ! ) disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci pour cette réponse rapide.

Malheureusement, je dois faire un truc de mal parce que ça ne me change rien.

Que dois-je mettre dans cette partie de code pour que cela fonctionne?

$message =  '<div style="width: 100%; text-align: left;"> 
     une case de mon formualire : '.$_POST['caseformulaire'].'
     une autre case de mon formualire : '.$_POST['autrecaseformulaire'].'
                    ICI JE VEUX QUE S'INSCRIVE LES CHOIX DE MA LISTE
     </div>';


Merci

PS: désolé de pas avoir utiliser les balises
Messages postés
31456
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021
3 277 > Greg
Montres nous ce que tu as essayé ( y compris le print_r que je t'ai demandé ) ...
et on verra comment t'aider à le corriger.
Voilà, je suis débutant en PHP, l'erreur est surement là, mais je n'y arrive pas

print_r($_POST);
	$values = !empty($_POST['liste-choix-titre-pop-liste']) ? $_POST['liste-choix-titre-pop-liste'] : NULL;

if($values ){
  foreach ($values as $a){
      echo $a;
  }
}
	$destinataire = '***@***';
    // Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
    $expediteur = $_POST['email'];
     
    $objet = $_POST['subject'];
     
    $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
    $headers .= 'Content-type: text/html; charset=utf-8'."\n"; // l'en-tete Content-type pour le format HTML
    $headers .= 'From: '.$_POST['email'].'<'.$expediteur.'>'."\n"; // Expediteur
     $message =  '<div style="width: 100%; text-align: left;"> 
     une case de mon formualire : '.$_POST['caseformulaire'].'
     une autre case de mon formualire : '.$_POST['autrecaseformulaire'].'
                    ICI JE VEUX QUE S'INSCRIVE LES CHOIX DE MA LISTE
     </div>';
Messages postés
14287
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021
804
bonjour, peux-tu partager ce qui est affiché par le print_r?
Array([maliste] => mondernierchoix)
Messages postés
14287
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021
804
d'où viennent
'liste-choix-titre-pop-liste'
et
mondernierchoix
?
Messages postés
31456
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021
3 277
Au niveau de ton select, ajoute des crochet au niveau du name
<select name="maliste[]"
@yg_be c'est le nom de maliste (le vrai nom ^^) et mon dernierchoix c'est le dernier truc selectionné dans ma liste.

@jordane45 maintenant le print renvoi

Array([maliste] => Array ([0] => mon 1er choix [1] => mon deuxieme choix))

mais le mail que je reçoit ne mention que le deuxième choix
Messages postés
31456
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021
3 277
Et bien donc,
Il faut boucler dessus pour afficher les infos dans le mail

	$values = !empty($_POST['liste-choix-titre-pop-liste']) ? $_POST['liste-choix-titre-pop-liste'] : NULL;

    $destinataire = '***@***';
    // Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
    $expediteur = $_POST['email'];
     
    $objet = $_POST['subject'];
     
    $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
    $headers .= 'Content-type: text/html; charset=utf-8'."\n"; // l'en-tete Content-type pour le format HTML
    $headers .= 'From: '.$_POST['email'].'<'.$expediteur.'>'."\n"; // Expediteur
     $message =  '<div style="width: 100%; text-align: left;"> 
     une case de mon formualire : '.$_POST['caseformulaire'].'
     une autre case de mon formualire : '.$_POST['autrecaseformulaire'];
                  
    if($values ){
       foreach ($values as $a){
          $message .= $a;
       }
     }

    $message .=' </div>';
Messages postés
14287
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 février 2021
804
@Greg cela n'aide pas si tu embrouilles ce que tu nous montres.
Merci beaucoup ça fonctionne, mais ça m'inscrit mes différents choix sans espace

"choix 1choix2"

il y a une solution pour les espacé ou mettre une virgule?
Messages postés
31456
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 février 2021
3 277
Oui, tu peux concaténer la variable $a avec ce que tu veux...
merci beaucoup de ton aide ! je clos le sujet