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

Résolu
Greg -  
 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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    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
    1. Greg
       
      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
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > 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.
        0
  2. Greg
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour, peux-tu partager ce qui est affiché par le print_r?
      0
  3. Greg
     
    Array([maliste] => mondernierchoix)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      d'où viennent
      'liste-choix-titre-pop-liste'
      et
      mondernierchoix
      ?
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Au niveau de ton select, ajoute des crochet au niveau du name
      <select name="maliste[]"
      
      0
  4. Greg
     
    @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
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      @Greg cela n'aide pas si tu embrouilles ce que tu nous montres.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Greg
     
    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
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Oui, tu peux concaténer la variable $a avec ce que tu veux...
      0
  7. Greg
     
    merci beaucoup de ton aide ! je clos le sujet
    0