Не работает форма с прикреплением файла

E1
На сайте с 28.11.2015
Offline
0
1602

Здравствуйте!

Пишу уже от безысходности, ибо 6 часов на это потратила... Подскажите, пожалуйста( Я не верстальщик ни разу, хтмл и пхп не знаю вообще. Но на существующий сайт понадобилось к форме добавить прикрепление файлов.

Сайт (форма во втором блоке дегустации) - http://up-biz.ru/

Каким-то чудом получилось добавить загрузку файла, но отсылаться вместе с формой он не хочет. Приходит письмо без файла.

НО!!! Если из папки js удалить файл для маски телефона jquery.maskedinput.js, то файлы ПРИСЫЛАЮТСЯ с формой, но перестает работать редирект на страницу спасибо (открывается пустая страница со словом ok) и, соответственно, пропадает маска телефона.

Если же файл маски вернуть, то редирект и маска работают, но прикрепленный файл не присылается...

Что не так?( Надо чтобы все и прикрепление файлов, и маска, и редирект работали одновременно. И еще почему-то когда отсылка файлов работает, то она не присылает 2 и больше файлов, только один.

Файл mail.php

<?php

$email = '123@mail.ru'; // адрес куда отправлять письмо, можно несколько через запятую
$subject = 'Заявка с сайта'; // тема письма
$message = 'Данные формы:'; // первая строчка письма
$smtp = 1; // отправлять ли через личный почтовый ящик, 1 - отправлять, 0 - через хостинг
$__smtp = array(
"host" => 'smtp.mail.ru', // сервер отправки писем (SMTP)
"auth" => true, // нужна ли авторизация (как правило нужна)
"secure" => 'ssl', // тип защиты
"port" => 465, // порт сервера
"charset" => 'utf-8', // кодировка
"username" => '123@mail.ru', // логин почтового сервера
"password" => '123456', // пароль к почте
"addreply" => '123@mail.ru', // адрес куда отвечать
"debug" => 0, // режим отладки, 1 - включить, 0 - выключить
);
foreach($_POST as $key => $value)
{ $fields .= str_replace('_',' ',$key).': <b>'.$value.'</b> <br />'; }
$message .= " <br />".$fields;
function smtpmail($to, $subject, $content, $attach=false)
{
global $success, $__smtp, $smtp;
require_once('./class-phpmailer.php');
$mail = new PHPMailer(true);
if($smtp) {$mail->IsSMTP();}
try {
$mail->Host = $__smtp['host'];
$mail->SMTPDebug = $__smtp['debug'];
$mail->SMTPAuth = $__smtp['auth'];
$mail->SMTPSecure = $__smtp['secure'];
$mail->Port = $__smtp['port'];
$mail->CharSet = $__smtp['charset'];
$mail->Username = $__smtp['username'];
$mail->Password = $__smtp['password'];
$mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
$to_array = explode(',', $to);
foreach ($to_array as $to){
$mail->AddAddress($to);
}
$mail->SetFrom($__smtp['addreply'], $__smtp['username']);
$mail->Subject = htmlspecialchars($subject);
$mail->MsgHTML($content);


// прикрепление картинки
if(isset($_FILES['attachimage'])) {
if($_FILES['attachimage']['error'] == 0){
if (!$mail->AddEmbeddedImage($_FILES['attachimage']['tmp_name'], 'my-attach', 'image.gif', 'base64', $_FILES['attachimage']['type']))
die ($mail->ErrorInfo);
$message .= '<br /><img src="cid:my-attach" border=0><br /> ';
}
}

$mail->Send();
echo('ok');
} catch (phpmailerException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
echo $e->getMessage();
}
}
smtpmail($email, $subject, $message);
?>

Файл mail.js

$('form').attr('action','/mail.php').attr('method','post');

$(function() {
///
selector = 'form'; // селектор для привязки (перед id формы нужно поставить знак #)
$(selector).submit(function(e) {

hide = 0; // 1 - прятать форму после отправки (0 - не прятать)
delay = 3000; // задержка исчезновения сообщения (0 - не скрывать)
success_msg = "Ваше сообщение успешно отправлено!"; // сообщение об успешной отправке
error_msg = "Ошибка отправки! Попробуйте позже."; // сообщение об ошибке
send_msg = 'Идет отправка...'; // сообщение об отправке (оставить пустым чтоб не показывать)
redirect = 'http://up-biz.ru/spasibo/'; // страница, на котороую перейти после отправки (оставить пустым чтоб не переходить)
mailer = 'mail.php'; // скрипт отправки почты

cur_id = '#'+$(this).attr('id');
submit_div = $(cur_id).find('[type = submit]');
submit_txt = submit_div.attr('value');
if(send_msg !== '') { submit_div.attr('value', send_msg); }
$('<input type="hidden" name="Форма" value="'+$(cur_id).attr('data-name')+'">').prependTo(cur_id);
$('<input type="hidden" name="Страница" value="'+document.location.href+'">').prependTo(cur_id);
e.preventDefault();
$.ajax({
type: 'post',
url: mailer,
data: $(this).serialize(),
success: function(result) {
if(result == 'ok'){ replay_class = '.w-form-done'; replay_msg = success_msg;
if(redirect !== '') { document.location.href = redirect; }
} else { replay_class = '.w-form-fail'; replay_msg = error_msg; }
replay_div = $(cur_id).siblings(replay_class);
replay_div.find('p').text(replay_msg);
replay_div.show();
if(hide) {$(cur_id).hide();}
submit_div.attr('value', submit_txt);
if(delay !== 0) { replay_div.delay(delay).fadeOut(); }
$(cur_id).trigger("reset");
}
});
});
///

});
дани мапов
На сайте с 06.09.2012
Offline
204
#1

selector = 'form';

попробуйте поменять на

selector = '#wf-form-Form-degustacia';

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
E1
На сайте с 28.11.2015
Offline
0
#2
дани мапов:
selector = 'form';
поменяйте на
selector = '#wf-form-Form-degustacia';

Форма отправляется, но файла в письме всё так же нет. А еще перестал работать редирект на остальных формах.

дани мапов
На сайте с 06.09.2012
Offline
204
#3
Ekater1na:
Форма отправляется, но файла в письме всё так же нет. А еще перестал работать редирект на остальных формах.

Верните все как раньше было и попробуйте в mail.js вместо

data: $(this).serialize(),

поставить

contentType: false,

processData: false,

data: new FormData(this),

E1
На сайте с 28.11.2015
Offline
0
#4
дани мапов:
contentType: false,
processData: false,
data: new FormData(this),

IT WORKS!!!

Только не отправляет больше одного файла.

дани мапов
На сайте с 06.09.2012
Offline
204
#5
Ekater1na:
IT WORKS!!!
Только не отправляет больше одного файла.

Добавьте еще поле type="file", обзовите, например, "attachimage2" и по аналогии с первым полем добавьте в mail.php обработку этого поля.

E1
На сайте с 28.11.2015
Offline
0
#6

дани мапов, нее, так не выйдет. Вдруг 3 захотят загрузить?) А поля только 2.

Просто у поля прописан атрибут multiple, который вроде как должен позволять загружать сразу несколько файлов. Во всяком случае тут так написано http://htmlbook.ru/samhtml5/formy/zagruzka-failov

А тут файлы-то загружаются, но отправляется только один.

Ладно, 1 отправляет и на том большое спасибо))

дани мапов
На сайте с 06.09.2012
Offline
204
#7

Если одно поле, тогда добавьте квадратные скобки

name="attachimage[]"

В $_FILES будет примерно такая структура, дальше уже сами попробуйте дописать код добавления картинки в письмо.


Array
(
[files] => Array
(
[name] => Array
(
[0] => 1.png
[1] => 2.png
)

[type] => Array
(
[0] => image/png
[1] => image/png
)

[tmp_name] => Array
(
[0] => /tmp/phpDQOZWD
[1] => /tmp/phpCELeSw
)

[error] => Array
(
[0] => 0
[1] => 0
)

=> Array
(
[0] => 32209
[1] => 64109
)

)

)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий