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

Résolu/Fermé
Greg - Modifié le 18 févr. 2021 à 11:22
 Greg - 18 févr. 2021 à 16:08
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

jordane45
Messages postés
35711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
4 194
18 févr. 2021 à 11:25
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
0
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
0
jordane45
Messages postés
35711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
4 194 > Greg
18 févr. 2021 à 12:30
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.
0
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>';
0
yg_be
Messages postés
19515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 juin 2022
1 127
18 févr. 2021 à 13:26
bonjour, peux-tu partager ce qui est affiché par le print_r?
0
Array([maliste] => mondernierchoix)
0
yg_be
Messages postés
19515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 juin 2022
1 127
18 févr. 2021 à 14:00
d'où viennent
'liste-choix-titre-pop-liste'
et
mondernierchoix
?
0
jordane45
Messages postés
35711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
4 194
18 févr. 2021 à 14:00
Au niveau de ton select, ajoute des crochet au niveau du name
<select name="maliste[]"
0
@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
0
jordane45
Messages postés
35711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
4 194
Modifié le 18 févr. 2021 à 14:57
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>';
0
yg_be
Messages postés
19515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 juin 2022
1 127
18 févr. 2021 à 14:59
@Greg cela n'aide pas si tu embrouilles ce que tu nous montres.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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?
0
jordane45
Messages postés
35711
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
4 194
18 févr. 2021 à 16:03
Oui, tu peux concaténer la variable $a avec ce que tu veux...
0
merci beaucoup de ton aide ! je clos le sujet
0