Преобразование PHP-скрипта для генерации электронной почты для работы с переменными строками в форме - PullRequest
1 голос
/ 15 мая 2011

Я использую скрипт PHP для генерации электронного письма на основе информации из формы. Форма имеет переменное количество строк.

Я преобразовал имена входов в каждой строке в форме в массив, добавив [] после имени, чтобы данные во всех строках были доступны для генерации электронной почты.

Тем не менее, я не знаю, как это сделать, как построить PHP так, чтобы он мог генерировать электронное письмо с правильным количеством строк в письме.

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

Интересно, есть ли способ заставить PHP прочитать массив для любого количества строк и сгенерировать письмо с правильным количеством строк? Я включил PHP, как он стоит ниже.

Спасибо

Ник

<?php

$EmailFrom = "";
$EmailTo = "";
$Subject = "";
$Name = Trim(stripslashes($_POST['name'][0])); 
$Email = Trim(stripslashes($_POST['email'][0])); 
$Telephone = Trim(stripslashes($_POST['telephone'][0]));
$Name2 = Trim(stripslashes($_POST['name'][1])); 
$Email2 = Trim(stripslashes($_POST['email'][1])); 
$Telephone2 = Trim(stripslashes($_POST['telephone'][1]));
$Name3 = Trim(stripslashes($_POST['name'][1])); 
$Email3 = Trim(stripslashes($_POST['email'][1])); 
$Telephone3 = Trim(stripslashes($_POST['telephone'][2])); 
$Name4 = Trim(stripslashes($_POST['name'][1])); 
$Email4 = Trim(stripslashes($_POST['email'][1])); 
$Telephone4 = Trim(stripslashes($_POST['telephone'][3])); 
$Name5 = Trim(stripslashes($_POST['name'][1])); 
$Email5 = Trim(stripslashes($_POST['email'][1])); 
$Telephone5 = Trim(stripslashes($_POST['telephone'][4])); 

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}

// prepare email body text
$Body = "New bookings have been made for the Ajahn Amaro Retreat as follows:";
$Body .= "\n";
$Body .= "\n";
$Body .= "name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "\n";
$Body .= "email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "\n";
$Body .= "telephone: ";
$Body .= $Telephone;
$Body .= "\n";
$Body .= "\n";
$Body .= "\n";
$Body .= "name: ";
$Body .= $Name2;
$Body .= "\n";
$Body .= "\n";
$Body .= "email: ";
$Body .= $Email2;
$Body .= "\n";
$Body .= "\n";
$Body .= "telephone: ";
$Body .= $Telephone2;
$Body .= "\n";
$Body .= "\n";
$Body .= "\n";
$Body .= "name: ";
$Body .= $Name3;
$Body .= "\n";
$Body .= "\n";
$Body .= "email: ";
$Body .= $Email3;
$Body .= "\n";
$Body .= "\n";
$Body .= "telephone: ";
$Body .= $Telephone3;
$Body .= "\n";
$Body .= "\n";
$Body .= "\n";
$Body .= "name: ";
$Body .= $Name4;
$Body .= "\n";
$Body .= "\n";
$Body .= "email: ";
$Body .= $Email4;
$Body .= "\n";
$Body .= "\n";
$Body .= "telephone: ";
$Body .= $Telephone4;
$Body .= "\n";
$Body .= "\n";
$Body .= "\n";
$Body .= "name: ";
$Body .= $Name5;
$Body .= "\n";
$Body .= "\n";
$Body .= "email: ";
$Body .= $Email5;
$Body .= "\n";
$Body .= "\n";
$Body .= "telephone: ";
$Body .= $Telephone5;
$Body .= "\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=payment.html\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Сделайте что-то подобное, перебирая один из массивов данных:

foreach($_POST['name'] as $i => $name){
   echo $name;
   echo $_POST['email'][$i];
   echo $_POST['telephone'][$i];
}

За исключением того, что вместо печати данных добавьте его в строку, которая будет телом вашего письма.

1 голос
/ 15 мая 2011

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

$body = '';
$row_count = count($_POST['name']);

for($i = 0; $i < $row_count; $i++)
{
  // variable sanitation...
  $name = trim(stripslashes($_POST['name'][$i]));
  $email = trim(stripslashes($_POST['email'][$i]));
  $telephone = trim(stripslashes($_POST['telephone'][$i]));

  // this assumes name, email, and telephone are required & present in each element
  // otherwise you will have spurious line breaks. 
  $body .= $name . "\n\n" . $email . "\n\n" . $telephone . "\n\n";
}

// send email 
$success = mail($emailTo, $subject, $body, "From: <$EmailFrom>");

Также на чисто стилистической ноте ваши переменные должны начинаться со строчных букв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...