В последнее время у меня была проблема с прикреплением файла к электронной почте, я справляюсь с этим, спасибо вам, ребята, кстати. Теперь у меня есть следующая проблема, связанная с "фиксированным" подключением файла. На самом деле проблем больше, чем я думал. 1) в коде ниже, в плагине проверки, я подумал, что достаточно вызывать правила, сопредельные, как это "name: requred", но это не так. Чтобы сделать это, я должен вызвать форму class= "required", почему? Когда я удаляю class= "requred", валидация больше не существует.
2) Хорошо, поэтому class= "required", небольшая проблема, проверка правильности работы, но что происходит с submitHandler? ajax не запускается, обновляется сайт, и я получаю сообщение succes. Я хочу отправить электронную почту с вложением без refreshig.
3) чтобы усугубить ситуацию, "сообщение", которое я написал в правило uploaded_file, которое должно показать, когда файл не загружен, не появляется, ввел сообщение из атрибута title (в форме).
так что все не так, как я должен был. Что я могу исправить/исправить/изменить, чтобы заставить его работать? пожалуйста помогите
коды: форма:
<form method="post" name="formularzaplikacyjny" enctype="multipart/form-data" action="mail-attachment.php" id="formmail">
<div id="imiediv"><label for="name">Imię i nazwisko: <em>*</em> </label><br>
<input type="text" name="name" id="name" class="required" title="Wpisz swoje imię i nazwisko" placeholder="Jan Kowalski"></div><br>
<div id="emaildiv"><label for="email">Email: <em>*</em> </label><br>
<input type="text" name="email" class="required" id="email" title="Wpisz swój adres email" placeholder="[email protected]"></div><br>
<div id="listdiv"><label for="message">List motywacyjny: <em>*</em></label><br>
<textarea name="message" rows="5" cols="48" class="required" id="message" title="Wpisz treść listu motywacyjnego" placeholder="Tutaj zpowinna znaleźć się treść Twojego listu motywacyjnego" ></textarea></div>
<div id="cvdiv"><label for="uploaded_file">Wybierz plik CV: <em>*</em></label><br>
<input type="file" name="uploaded_file" title="<h3>Wybierz plik CV do przesłania</h3>" class="required" id="uploaded_file"></div><br>
<input type="submit" value="Prześlij" name="submit" id="submitbutton">
</form>
<div id="loading-mail">
<h2>Wysyłamy maila.....</h2>
</div>
Проверка:
$("#formmail").validate({
rules: {
email: {
required: true,
email: true
},
name: {
required: true
},
message: {
required: true
},
uploaded_file: {
requred: true
}
}, //koniec literału obiektowego rules
messages: {
email: {
required: "<h3>Podaj adres e-mail.</h3>",
email: "<h3>To nie jest prawidłowy <br>adres e-mail.</h3>"
},
name: {
required: "<h3>Podaj swoje imię i nazwisko.</h3>"
},
message: {
required: "<h3>Wpisz treść listu motywacyjnego.</h3>"
},
uploaded_file: {
requred: "<h3>Prześlij plik CV</h3>"
}
},submitHandler: function() {
var thisForm = $('#formmail');
$('#formmail').fadeOut(function(){
//Display the "loading" message
$("#loading-mail").fadeIn(function(){
//Post the form to the send script
$.ajax({
type: 'POST',
url: thisForm.attr("action"),
data: thisForm.serialize(),
//Wait for a successful response
success: function(data){
//Hide the "loading" message
$("#loading-mail").fadeOut(function(){
//Display the "success" message
$("#success").text(data).fadeIn();
});
}
});
});
});
}
}); // koniec funkcji validate
и отправку сценария:
<?php
require "PHPMailer/class.phpmailer.php";
$mail = new PHPMailer(true); //New instance, with exceptions enabled
$mail->CharSet = "UTF-8";
$bodys="<b>Podanie od:</b> ".$_POST['name']."<br/>"."<b>Adres e-mail: </b>".$_POST['email']."<br/>"."<b>Treść listu motywacyjnego: </b><br/>".$_POST['message'];
$mail->Body =$bodys;
$mail->IsSMTP(); // tell the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = 25; // set the SMTP server port
$mail->Host = "mail.xxx.linuxpl.info"; // SMTP server
$mail->Username = "username"; // SMTP server username
$mail->Password = "pass"; // SMTP server password
$mail->IsSendmail(); // tell the class to use Sendmail
$mail->AddReplyTo($_POST['email'],$_POST['name']);
$mail->From = $_POST['email']; //uzupełnij sobie
$mail->FromName = $_POST['name']; //uzupełnij sobie
$to = '[email protected]'; //na jaki mail wysłać np [email protected]
$mail->AddAddress($to);
$mail->Subject = "Nowe podanie o pracę";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->WordWrap = 80; // set word wrap
$mail->MsgHTML($bodys);
$plik_tmp = $_FILES['uploaded_file']['tmp_name'];
$plik_rozmiar = $_FILES['uploaded_file']['size'];
$plik_nazwa = $_FILES['uploaded_file']['name'];
if(is_uploaded_file($plik_tmp)) {
$nazwa_g=$plik_nazwa;
move_uploaded_file($plik_tmp, 'tmp_zal/'.$nazwa_g);
$mail->AddAttachment('tmp_zal/'.$nazwa_g, $nazwa_g);
}
$mail->IsHTML(true); // send as HTML
if(!$mail->Send())
{
echo "Błąd";
echo "Kod błędu: " . $mail->ErrorInfo;
}
else
{
echo 'Wiadomość została wysłana';
}
?>
Вопросы 1 и 3 являются, потому что вы опечатка required
, как из requred
в uploaded_file
правила и сообщения.
Для проблемы 2 вам нужно return false
из submitHandler
чтобы отменить submitHandler
по умолчанию
jQuery(function ($) {
$("#formmail").validate({
rules: {
email: {
required: true,
email: true
},
name: {
required: true
},
message: {
required: true
},
uploaded_file: {
required: true
}
}, //koniec literału obiektowego rules
messages: {
email: {
required: "<h3>Podaj adres e-mail.</h3>",
email: "<h3>To nie jest prawidłowy <br>adres e-mail.</h3>"
},
name: {
required: "<h3>Podaj swoje imię i nazwisko.</h3>"
},
message: {
required: "<h3>Wpisz treść listu motywacyjnego.</h3>"
},
uploaded_file: {
required: "<h3>Prześlij plik CV</h3>"
}
},submitHandler: function() {
var thisForm = $('#formmail');
$('#formmail').fadeOut(function(){
//Display the "loading" message
$("#loading-mail").fadeIn(function(){
//Post the form to the send script
$.ajax({
type: 'POST',
url: thisForm.attr("action"),
data: thisForm.serialize(),
//Wait for a successful response
success: function(data){
//Hide the "loading" message
$("#loading-mail").fadeOut(function(){
//Display the "success" message
$("#success").text(data).fadeIn();
});
}
});
});
});
return false
}
});
});
Демо: скрипка
Примечание. Представление ajax не будет работать из-за ввода файла в форме - для некоторых альтернатив см. Этот ответ