2010-06-05 5 views
2

J'essaye de mettre en place un simple formulaire de contact PHP pour un site web et j'ai besoin d'aide pour modifier le PHP pour lister plusieurs éléments d'un menu de sélection et j'apprécierais l'aide. Je suis un graphiste, pas un développeur, donc beaucoup de ceci est bien au-dessus de ma tête. Ceci est la problématique ici:PHP email formulaire multiple select

<label for="Events[]">Which Event(s) Will You Be Attending?</label> 
    <div class="input-bg"> 
       <select name="Events[]" size="6" multiple="MULTIPLE" class="required" id="Events[]"> 
       <option value="Wednesday">Portfolio Show June 16</option> 
       <option value="Thursday">Portfolio Show June 17</option> 
       <option value="Saturday">Graduation Ceremony</option> 
       <option value="Saturday Eve">Graduation Party</option> 
       <option value="Not Sure">Not Sure</option> 
       <option value="Not Coming">Not Coming</option> 
       </select> 
     </div> 

Et voici le PHP:

<?php 

// CHANGE THE VARIABLES BELOW 

$EmailFrom = "[email protected]"; 
$EmailTo = "[email protected]"; 
$Subject = "Graduation RSVP"; 

$Name = Trim(stripslashes($_POST['Name'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Guests = Trim(stripslashes($_POST['Guests'])); 
$Events = Trim(stripslashes($_POST['Events'])); 

// prepare email body text 
$Body = ""; 
$Body .= "Name: "; 
$Body .= $Name; 
$Body .= "\n"; 
$Body .= "Email: "; 
$Body .= $Email; 
$Body .= "\n"; 
$Body .= "Guests: "; 
$Body .= $Guests; 
$Body .= "\n"; 
$Body .= "Events: "; 
$Body .= $Events; 
$Body .= "\n"; 

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 

// redirect to success page 
// CHANGE THE URL BELOW TO YOUR "THANK YOU" PAGE 
if ($success){ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=http://justgooddesign.net/graduation\">"; 
} 
else{ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=http://justgooddesign.net/graduation/error.html\">"; 
} 
?> 

Toute aide est vraiment apprécié!

Répondre

3

$ _POST ['Events'] sera un tableau. Vous pouvez utiliser la fonction implode() pour les joindre à une virgule chaîne séparée:

$Events = Trim(stripslashes(implode(",", $_POST['Events']))); 

Sinon, vous pouvez itérer les utiliser individuellement une déclaration foreach.

+0

Merci, cela m'a beaucoup aidé! Une grande partie de ces choses passe juste au-dessus de ma tête. – Justin

+0

Nous commençons tous quelque part, juste heureux d'aider :-) –

1

Si vous ne souhaitez pas joindre les événements par des virgules mais que vous souhaitez les utiliser d'une autre manière, vous pouvez loop through the events pour une boucle foreach. Au lieu de

$Body .= $Events; 

Vous pouvez utiliser:

foreach($Events as $event) { 
    $Body .= '- $event\n'; 
} 

Cet exemple serait, mais chaque événement sur sa propre ligne avec un « - » devant elle, ce qui en fait ressembler à une liste à puces.

+0

+1 pour un exemple de 'foreach' qui, certes, j'étais trop paresseux pour fournir :-) –

3

Lorsque le nom d'un élément dans votre formulaire se termine par des crochets, cela signifie que PHP placera les valeurs dans un tableau. En d'autres termes, si la personne choisit les deux premières options, la valeur de $_POST['Events'] sera la même que array('Wednesday', 'Thursday'). Si vous voulez juste une chaîne qui contient toutes les options (quelque chose comme "Mercredi Jeudi"), vous pouvez utiliser implode(). Si vous souhaitez vérifier la présence d'un élément spécifique, vous pouvez utiliser in_array(). Par exemple:

if (in_array('Wednesday', $_POST['Events'])) 
{ 
    echo 'You selected Wednesday!'; 
} 

En note, je recommande de repenser certaines commandes qui permettent plusieurs sélections. Beaucoup de gens ne sont pas habitués à ce comportement et ne réaliseront pas qu'ils peuvent en choisir plus d'un. Les cases à cocher sont beaucoup plus claires.