Отправка значений по умолчанию с помощью PHP - PullRequest
3 голосов
/ 13 декабря 2011

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

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

if (function_exists('htmlspecialchars_decode')) $message[2] = htmlspecialchars_decode($message[2], ENT_QUOTES);     

$body = "$name[0]: $name[2]\r\n\r\n";
$body .= "$email[0]: $email[2]\r\n\r\n";
$body .= "$phone[0]: $phone[2]\r\n\r\n";
$body .= "$service: $service\n";
$body .= "$message[0]:\r\n$message[2]\r\n";

if (!$from) $from_value = $email[2];
else $from_value = $from;

require_once('formfiles2/class.phpmailer.php');

$mail = new PHPMailer();

$mail->SetFrom($from_value);  
$mail->AddReplyTo($email[2]);
$mail->Subject = "$subject";
$mail->Body = $body;
$mail->AddAddress($to);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
}

Я тоже это пробовал:

$body .= "Service" .(is_array($_REQUEST['service']) ? implode("\n",$_REQUEST['service']) : $_REQUEST['service']);

Вот эта часть формы:

<form method="post" class="cForm" action="#cform"> 

.....

<tr>
<td>
<input type="checkbox" name="service" value="sweeping" /> Sweeping<br />
<input type="checkbox" name="service" value="litter" /> Litter Maintenance<br /> 
<input type="checkbox" name="service" value="snow" /> Snow Removal<br />
<input type="checkbox" name="service" value="wash" /> Power Washing<br /> 
</td>
<td>
<input type="checkbox" name="service" value="striping" /> Parking Lot Re-Striping<br />
<input type="checkbox" name="service" value="concrete" /> Asphalt/Concrete Work<br /> 
<input type="checkbox" name="service" value="lawn" /> Lawn Care<br />
</td>
<tr>

....

</form>

Итак, я думаю, что мне просто не хватает чего-то в моем синтаксисе, добавляя массив в тело. Дай мне знать! Заранее спасибо за любую помощь!

Ответы [ 4 ]

4 голосов
/ 13 декабря 2011

Вы не можете иметь несколько флажков с одним и тем же именем. Это будет вести себя как выбор вариантов. Несколько проверенных значений просто перезапишут друг друга.

Вы должны адаптировать свои записи к чему-то вроде:

<input type="checkbox" name="service[stripping]" value="striping" /> Parking Lot Re-Striping<br />
<input type="checkbox" name="service[concrete]" value="concrete" /> Asphalt/Concrete Work<br /> 
<input type="checkbox" name="service[lawn]" value="lawn" /> Lawn Care<br />

(Не нужно быть ассоциативным. Простой services[] уже подойдет. Просто кажется более приятным и ясным.)

Затем объедините входящий массив в текстовый список:

$service = join(", ", $_REQUEST["service"]);
1 голос
/ 13 декабря 2011

или назовите свои флажки как массив без индексов: service[]

, тогда вы можете

if (isset($_POST['service'])) {
    foreach ($_POST['service'] as $key => $val) {
        // do what you need
    }
}
1 голос
/ 13 декабря 2011

если у вас одинаковое имя для типа ввода, вы должны добавить имя с массивом, например name="service[]"

1 голос
/ 13 декабря 2011

Измените имя флажка на массив, например,

<input type="checkbox" name="service[]" value="sweeping" /> Sweeping
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...