nipopadyuk
Постоялец
- Регистрация
- 3 Авг 2010
- Сообщения
- 52
- Реакции
- 3
- Автор темы
- #1
Доброго дня.
Прошу помочь с проблемой.
Есть 2 формы обратной связи, есть 2 скрипта обработчика, и есть два скрипта на ajax которые ловят кнопку "отправить" и выводят сообщения об успешной отправки.
В первом случае простая форма, 2 поля, все работает прекрасно:
Во втором случае, форма сложнее, и отправляет файл, который выбирает пользователь на своем компьютере. если я убираю ajax код, то все работает, письмо уходит, и сразу идет редирект на скрипт обработчик. если оставить ajax, то при нажатии кнопки, появляется заглушка "ваша заявка отправлена", но по факту, скрипт не отрабатывается, и письмо не уходит.
Помогите пожалуйста сделать заглушку, и чтобы скрипт при этом обрабатывался.
Прошу помочь с проблемой.
Есть 2 формы обратной связи, есть 2 скрипта обработчика, и есть два скрипта на ajax которые ловят кнопку "отправить" и выводят сообщения об успешной отправки.
В первом случае простая форма, 2 поля, все работает прекрасно:
HTML:
<form action="index1.php" id="colback-1" method="POST">
<input type="text" name="name" id="name" class="reveal-modal-colback-form-filed-1" value="Ваше Имя:*" onfocus="if (this.value == 'Ваше Имя:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваше Имя:*';}" /><br />
<input type="text" name="phone" id="phone" class="reveal-modal-colback-form-filed-2" value="Телефон:*" onfocus="if (this.value == 'Телефон:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Телефон:*';}" /><br />
<input type="submit" id="form-key-colback-1" value="" class="reveal-modal-colback-form-key-1" />
</form>
PHP:
<?php
/* Здесь проверяется существование переменных */
if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
/* Сюда впишите свою эл. почту */
$address = "мыло";
/* А здесь прописывается текст сообщения, \n - перенос строки */
$mes = "Тема: Заказ обратного звонка на сайте ФУТБОЛКИ В САМАРЕ\nТелефон: $phone\nИмя: $name";
/* А эта функция как раз занимается отправкой письма на указанный вами email */
$sub='Заказ'; //сабж
$email='Заказ <vpluce.ru>'; // от кого
$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
ini_set('short_open_tag', 'On');
header('Refresh: 3; URL=index.html');
?>
Код:
$(document).ready(function () {
$('#colback-1').bind('submit', function(con) {
con.preventDefault();
var isFormValid = true;
$('#colback-1 [type=text]').each(function(){
var znach = $(this).val();
var defZnach = $(this).prop('defaultValue');
if (znach == defZnach) {
$('#znach_no_colback-1').show()
$('#znach_no_colback-1').text('Вы не заполнили обязательные поля!');
isFormValid = false;
}
});
if ( isFormValid == true ) {
$.ajax({
url: $(this).attr('action'),
async:true,
type: 'POST',
data: $(this).serialize(),
success: function(data){ $('#znach_colback_head-1').text(data)
$('#znach_colback_text-1-1').text(data)
$('#znach_colback_text-1-2').text(data);}
});
$('#colback-1').ajaxComplete(function(){
$('#colback-1').hide();
$('#znach_no_colback-1').hide();
$('#znach_colback-1').show()
$('#znach_colback_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
$('#znach_colback_text-1-1').text('Наши менеджеры свяжуться');
$('#znach_colback_text-1-2').text('с Вами в ближайшее время.');
});
}
});
$('#znach_no_colback-1').hide();
$('#znach_colback-1').hide();
});
Во втором случае, форма сложнее, и отправляет файл, который выбирает пользователь на своем компьютере. если я убираю ajax код, то все работает, письмо уходит, и сразу идет редирект на скрипт обработчик. если оставить ajax, то при нажатии кнопки, появляется заглушка "ваша заявка отправлена", но по факту, скрипт не отрабатывается, и письмо не уходит.
Помогите пожалуйста сделать заглушку, и чтобы скрипт при этом обрабатывался.
HTML:
<form action="index2.php" method="post" id="buklet-1" enctype="multipart/form-data">
<input name="name" type="text" class="snap-point-1-content-form-filed-1" value="Ваше Имя:*" onfocus="if (this.value == 'Ваше Имя:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваше Имя:*';}" />
<input name="tel" class="snap-point-1-content-form-filed-2" value="Телефон:*" onfocus="if (this.value == 'Телефон:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Телефон:*';}" type="tel" />
<input name="email" class="snap-point-1-content-form-filed-3" value="E-mail:*" onfocus="if (this.value == 'E-mail:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'E-mail:*';}" />
<textarea name="message" class="snap-point-1-content-form-filed-4" placeholder="
Если у тебя нет подходящего изображения, опиши что ты хочешь видеть на своей будущей футболке, и мы найдем решение абсолютно бесплатно!"></textarea>
<input name="file" type="file" class="snap-point-1-content-form-key-1" />
<br><br>
<input value="Отправить" name="sendMail" type="submit" class="snap-point-1-content-form-key-1" />
</form>
PHP:
<?php
$to = 'мыло';
if ( isset( $_POST['sendMail'] ) ) {
$name = substr( $_POST['name'], 0, 64 );
$tel = substr( $_POST['tel'], 0, 64 );
$email = substr( $_POST['email'], 0, 64 );
$message = substr( $_POST['message'], 0, 250 );
if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
$filepath = $_FILES['file']['tmp_name'];
$filename = $_FILES['file']['name'];
} else {
$filepath = '';
$filename = '';
}
$body = "Имя:\r\n".$name."\r\n\r\n";
$body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
$body .= "E-mail:\r\n".$email."\r\n\r\n";
$body .= "Описание заказа:\r\n".$message;
send_mail($to, $body, $email, $filepath, $filename);
}
// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $body, $email, $filepath, $filename)
{
$subject = 'Тестирование формы с прикреплением файла с сайта proverstka.com.ua';
$boundary = "--".md5(uniqid(time())); // генерируем разделитель
$headers = "From: ".$email."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
$multipart = "--".$boundary."\r\n";
$multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
$body = $body."\r\n\r\n";
$multipart .= $body;
$file = '';
if ( !empty( $filepath ) ) {
$fp = fopen($filepath, "r");
if ( $fp ) {
$content = fread($fp, filesize($filepath));
fclose($fp);
$file .= "--".$boundary."\r\n";
$file .= "Content-Type: application/octet-stream\r\n";
$file .= "Content-Transfer-Encoding: base64\r\n";
$file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$file .= chunk_split(base64_encode($content))."\r\n";
}
}
$multipart .= $file."--".$boundary."--\r\n";
mail($to, $subject, $multipart, $headers);
}
?>
Код:
$(document).ready(function () {
$('#buklet-1').bind('submit', function(con) {
con.preventDefault();
var isFormValid = true;
$('#buklet-1 [type=text]').each(function(){
var znach = $(this).val();
var defZnach = $(this).prop('defaultValue');
if (znach == defZnach) {
$('#znach_no_buklet-1').show()
$('#znach_no_buklet-1').text('Вы не заполнили обязательные поля!');
isFormValid = false;
}
});
if ( isFormValid == true ) {
$.ajax({
url: $(this).attr('action'),
async:true,
type: 'POST',
data: $(this).serialize(),
success: function(data){ $('#znach_buklet_head-1').text(data)
$('#znach_buklet_text-1-1').text(data)
$('#znach_buklet_text-1-2').text(data);}
});
$('#buklet-1').ajaxComplete(function(){
$('#buklet-1').hide();
$('#znach_no_buklet-1').hide();
$('#znach_buklet-1').show()
$('#znach_buklet_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
$('#znach_buklet_text-1-1').text('Наши менеджеры свяжуться');
$('#znach_buklet_text-1-2').text('с Вами в ближайшее время.');
});
}
});
$('#znach_no_buklet-1').hide();
$('#znach_buklet-1').hide();
});