Моя контактная форма не включает сообщения и другую информацию в сообщениях электронной почты.
Есть "Неизвестный отправитель" и "Без темы". 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";
}
?>
Я буду рад за любые намеки.
Спасибо за все ваши ответы. Наконец, мне удалось найти решение. Я раньше не использовал firebug, но благодаря этому я смог найти сообщение об ошибке. Теперь скрипт работает нормально.
Это не было в коде, но в.htaccess переписывать правило для.php файлов, которое вызывало ошибку 301 для запроса ajax (../contact вместо.. /contact.php).
У меня есть одна.php-страница (загрузчик файлов), и я подумал, что добавление другого правила для дружественных ссылок для этого было бы хорошей идеей.
Вы используете два символа доллара в строке: $$ headers = 'MIME-Version: 1.0'. "\ Г\п";
Удалите "$" и повторите попытку.
Там, где я проверяю ваш код файла contact.php, все в порядке. Но вам нужно одно, если использовать firefox. пожалуйста, утешите свой код. Я имею в виду, когда вы открываете firebug, будет одна консоль настроек. с помощью которого вы можете проверить, будет ли ваша ценность наряду с переменной, или они пусты.
Я думаю, что ваша ценность не будет в PHP файле. используйте консоль, и вы можете легко исправить свою ценность.
Надеюсь, это имеет смысл для вас.
Проверьте, получает ли ваш php-скрипт имя, адрес электронной почты и сообщение. Вы можете проверить это, используя
var_dump($_POST);
Если сервер не получает эти переменные, попробуйте отправить data_html в качестве объекта: change
data: data_html,
в
data: {name: name, email: email, message: message}
Я не тестировал его, но я всегда использую этот способ отправки данных с js на сервер.