2015-12-01 2 views
-1

У меня есть сценарий ajax, который помещает все мои данные в скрипт contact-form.php (email). Все работает, кроме флажков. Когда я получаю электронное письмо, он просто показывает пустое поле.Опубликовать несколько флажков с помощью ajax

Это код, который я получил в настоящее время:

<div class="col-md-6"> 
<h3 style="margin-top:30px;">Type raam</h3> 
    <div> 
     <label> 
      <input type="checkbox" name="checkbox" id="checkbox1" value="Kantel"> 
      <span>Kantel</span> 
     </label> 
    </div> 
    <div> 
     <label> 
      <input type="checkbox" name="checkbox" id="checkbox2" value="Schuif"> 
      <span>Schuif</span> 
     </label> 
    </div> 
    <div> 
     <label> 
      <input type="checkbox" name="checkbox" id="checkbox3" value="Deuropening"> 
      <span>Deuropening</span> 
     </label> 
    </div> 
    <div> 
     <label> 
      <input type="checkbox" name="checkbox" id="checkbox4" value="Draai"> 
      <span>Draai</span> 
     </label> 
    </div> 
    <div> 
     <label> 
      <input type="checkbox" name="checkbox" id="checkbox5" value="Draai/kantel"> 
      <span>Draai/kantel</span> 
     </label> 
    </div> 
</div> 

Почтовый скрипт:

<?php 
session_cache_limiter('nocache'); 
header('Expires: ' . gmdate('r', 0)); 

header('Content-type: application/json'); 

// Enter your email address 
$to = '[email protected]'; 

$subject = $_POST['subject']; 

if($to) { 
    $name = $_POST['name']; 
    $email = $_POST['email']; 

    $fields = array(
     0 => array(
      'text' => 'Naam', 
      'val' => $_POST['name'] 
     ), 
     1 => array(
      'text' => 'Email adres', 
      'val' => $_POST['email'] 
     ), 
     2 => array(
      'text' => 'Adres', 
      'val' => $_POST['adres'] 
     ), 
     3 => array(
      'text' => 'Afleveradres', 
      'val' => $_POST['afleveradres'] 
     ), 
     4 => array(
      'text' => 'Postcode', 
      'val' => $_POST['postcode'] 
     ), 
     5 => array(
      'text' => 'Plaats', 
      'val' => $_POST['plaats'] 
     ), 
     6 => array(
      'text' => 'Tweede plaats', 
      'val' => $_POST['plaats2'] 
     ), 
     7 => array(
      'text' => 'Telefoonnummer', 
      'val' => $_POST['telefoonnr'] 
     ), 
     8 => array(
      'text' => 'Mobiel nummer', 
      'val' => $_POST['mobielnr'] 
     ), 
     9 => array(
      'text' => 'Type raam', 
      'val' => $_POST['checkbox'] 
     ), 
     10 => array(
      'text' => 'Contactpersoon', 
      'val' => $_POST['contactpersoon'] 
     ), 
     11 => array(
      'text' => 'Bericht', 
      'val' => $_POST['message'] 
     ) 
    ); 

    $message = ""; 
    foreach($fields as $field) { 
     $message .= $field['text'].": " . htmlspecialchars($field['val'], ENT_QUOTES) . "<br>\n"; 
    } 

    $headers = ''; 
    $headers .= 'From: ' . $name . ' <' . $email . '>' . "\r\n"; 
    $headers .= "Reply-To: " . $email . "\r\n"; 
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 

    if (mail($to, $subject, $message, $headers)){ 
     $arrResult = array ('response'=>'success'); 
    } else{ 
     $arrResult = array ('response'=>'error'); 
    } 

    echo json_encode($arrResult); 

} else { 

    $arrResult = array ('response'=>'error'); 
    echo json_encode($arrResult); 

} 
?> 

Аякса сообщение:

// Ajax Submit 
$.ajax({ 
    type: "POST", 
    url: url, 
    data: { 
     "name": $("#contact-form #name").val(), 
     "email": $("#contact-form #email").val(), 
     "subject": $("#contact-form #subject").val(), 
     "adres": $("#contact-form #adres").val(), 
     "afleveradres": $("#contact-form #afleveradres").val(), 
     "postcode": $("#contact-form #postcode").val(), 
     "contactpersoon": $("#contact-form #contactpersoon").val(), 
     "plaats": $("#contact-form #plaats").val(), 
     "plaats2": $("#contact-form #plaats2").val(), 
     "telefoonnr": $("#contact-form #telefoonnr").val(), 
     "mobielnr": $("#contact-form #mobielnr").val(), 
     "checkbox": $("#contact-form #checkbox").map(function(){ return $(this).val(); }).get().join(","), 
     "message": $("#contact-form #message").val() 
    }, 

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

ответ

3
"checkbox": $("#contact-form #checkbox").map(function(){ return $(this).val(); }).get().join(","), 

Вы получаете каждый элемент с идентификатором checkbox и похлопывая их значения вместе с запятыми.

Есть только три основные проблемы:

  • Вам не разрешено более одного элемента с заданным идентификатором
  • Вы на самом деле имеют нулевые элементы с этим ID
  • Вы не проверяет увидеть, если галочки фактически проверяется или нет, прежде чем включать их в данные

Похоже, что вы на самом деле хотите:

$("#contact-form [name='checkbox']:checked") 

Обратите внимание, что использование данных с запятой является довольно нестандартным.

Было бы проще просто:

data: $("#contact-form").serialize() 

и использовать PHP «массив» соглашения об именах стилей для флажков:

name="checkbox[]" 

и затем прочитать $_POST['checkbox'] как массив значений (а не строка, разделенная запятыми).

+0

Так что я должен дать всем флажкам один и тот же идентификатор, а затем использовать сериализацию? – twan

+0

@twan - No. * Вам не разрешено использовать более одного элемента с данным ID *. Если вы используете 'serialize', то идентификаторы элементов управления формы не имеют значения (кроме ассоциирования с ними'

+0

Таким образом, строка флажка будет выглядеть примерно так: '" checkbox ": $ (" # contact-form #checkbox "). Serialize,'? Нужно ли мне что-то менять в своем почтовом письме? – twan

Смежные вопросы