Множественный выбор формы электронной почты PHP

Я пытаюсь настроить простую контактную форму PHP для веб-сайта, и мне нужна помощь в изменении PHP для отображения нескольких элементов из меню выбора, и я был бы признателен за помощь. Я графический дизайнер, а не разработчик, поэтому многое из этого выше моего понимания. Это проблемная область здесь:

    <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>

И вот 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\">";
}
?>

Любая помощь действительно приветствуется!


person Justin    schedule 05.06.2010    source источник


Ответы (3)


$_POST['Events'] будет массивом. Вы можете использовать функцию implode(), чтобы объединить их в строку, разделенную запятыми. :

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

Кроме того, вы можете перебирать их по отдельности, используя оператор foreach.

person Andy E    schedule 05.06.2010
comment
Спасибо, это очень помогло! Большая часть этого материала проходит мимо моей головы. - person Justin; 06.06.2010
comment
Мы все с чего-то начинаем, просто рады помочь :-) - person Andy E; 06.06.2010

Когда имя элемента в вашей форме заканчивается скобками, это означает, что PHP поместит значения в массив. Другими словами, если человек выберет первые два варианта, значение $_POST['Events'] будет таким же, как array('Wednesday', 'Thursday'). Если вам просто нужна строка, содержащая все параметры (что-то вроде «Среда, четверг»), вы можете использовать имплодировать(). Если вы хотите проверить наличие определенного элемента, вы можете использовать in_array( ). Например:

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

В качестве примечания я бы порекомендовал переосмыслить элементы управления выбором, которые допускают множественный выбор. Многие люди не привыкли к такому поведению и не понимают, что могут выбрать более одного. Флажки стали намного понятнее.

person matthewwithanm    schedule 05.06.2010

Если вы не хотите соединять события запятыми, но хотите использовать их каким-либо другим способом, вы можете перебирать события для foreach цикла. Вместо

$Body .= $Events;

Вы можете использовать:

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

В этом примере каждое событие будет располагаться в отдельной строке со знаком «-» перед ним, что сделает его похожим на маркированный список.

person Trey Hunner    schedule 05.06.2010
comment
+1 за пример foreach, который, по общему признанию, мне было лень предоставить :-) - person Andy E; 05.06.2010