2015-09-03 3 views
1

Моя контактная форма не включает сообщение и другую информацию в сообщениях электронной почты.Контактная форма отправляет пустые письма

Существует «Неизвестный отправитель» и «Без темы». Email содержит мои теги (from :, subject :, message :), но после них не записывается контент.

Я пробовал еще несколько скриптов, но они дали тот же результат.

Мой JS код

(function($){ 
$(document).ready(function() { 
    $('#submit-form').click(function(e){ 

     e.preventDefault(); 
     var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
     var name = $('#rp_name').val(), 
      email = $('#rp_email').val(), 
      subject = $('#rp_subject').val(), 
      message = $('#rp_message').val(), 
      data_html, 
      success = $('#success'); 

     if(name === ""){ 
      $('#rp_name').val('Please enter your name.'); 
     } 

     if(subject === ""){ 
      $('#rp_subject').val('Please enter your name.'); 
     } 

     if(email === ""){ 
      $('#rp_email').val('Your email is required.'); 
     }else if(reg.test(email) === false){ 
      $('#rp_email').val('Invalid Email Address.'); 
     } 

     if(message === ""){ 
      $('#rp_message').val('Message is required.'); 
     } 

     if(message !== "" && name !== "" && reg.test(email) !== false) { 
      data_html = "name=" + name + "&email="+ email + "&message=" + message + "&subject="+ subject; 

      alert(data_html); 
      $.ajax({ 
       type: 'POST', 
       url: 'php_helpers/contact_form.php', 
       data: data_html, 
       success: function(msg){ 

        if (msg == 'sent'){ 
         success.html('<div class="alert alert-success">Message <strong>successfully</strong> sent!</div>') ; 
         $('#rp_name').val(''); 
         $('#rp_email').val(''); 
         $('#rp_message').val(''); 
        }else{ 
         success.html('<div class="alert alert-error">Message <strong>not</strong> sent! Please Try Again!</div>') ; 
        } 
       } 
      }); 

     } 
     return false; 
    }); 
}); 
})(jQuery); 

Мой PHP код

<?php 

$to = 'email'; // I changed it 

$subject = $_POST['subject']; 

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

$fields = array(
    0 => array(
     'text' => 'Imie', 
     'val' => $_POST['name'] 
    ), 
    1 => array(
     'text' => 'Email', 
     'val' => $_POST['email'] 
    ), 
    2 => array(
     'text' => 'WIADOMOSC', 
     'val' => $_POST['message'] 
    ) 
); 

$message = ""; 

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

$$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 
$headers .= 'From: '. $email . "\r\n" . 'X-Mailer: PHP/' . phpversion(); 


mail($to, $subject, $message, $headers); 

if ($message){ 
echo 'sent'; 
}else{ 
echo 'failed'; 
} 
} else { 
echo "Don't access this file directly"; 
} 
?> 

Я буду рад за любые подсказки.

+0

Вы уверены, что получаете значения на странице PHP? –

+0

Спасибо за подсказку. В файле .htaccess существует правило перезаписи для .php-файлов, которые вызывают проблемы с ajax-сообщением. Решаемые. – Kuszluk

ответ

0

Там, где я проверяю ваш код файла contact.php в порядке. Но вам нужно одно, если использовать firefox. пожалуйста, утешите свой код. Я имею в виду, когда вы открываете firebug, будет одна консоль настроек. с помощью которого вы можете проверить, будет ли ваша ценность наряду с переменной, или они пусты.

Я думаю, что ваше значение не будет в файле PHP. используйте консоль, и вы можете легко исправить свою ценность.

Я надеюсь, что это имеет смысл для вас.

+0

Я впервые использовал firebug сегодня, и это дало мне подсказку, в которой я нуждался, спасибо! – Kuszluk

+0

Приветствую вас ............... –

0

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

var_dump($_POST); 

Если сервер не получает эти переменные, попробуйте отправить data_html как объект: изменения

data: data_html, 

в

data: {name: name, email: email, message: message} 

я не сделал протестируйте его, но я всегда использую этот способ отправки данных с js на сервер.

+0

Я написал код таким образом, что теперь он более читаем, спасибо. – Kuszluk

0

Вы используете два символа доллара в строке: $$ headers = 'MIME-Version: 1.0'. "\ Г \ п";
Удалите «$» и повторите попытку.

+0

Я исправил его, но это было не так. – Kuszluk

+0

Ya firebug - отличный инструмент для отладки ошибок JavaScript. – rahul

0

Спасибо за все ваши ответы. Наконец, мне удалось найти решение. Я раньше не использовал firebug, но благодаря этому я смог найти сообщение об ошибке. Теперь скрипт работает нормально.

Это было не в коде, а в .htaccess правило перезаписи для .php-файлов, которое вызывало ошибку 301 для запроса ajax (../contact вместо ../contact.php).

У меня есть одна .php-страница (загрузчик файлов), и я подумал, что добавление другого правила дружественной ссылки для этого было бы хорошей идеей.

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