Здравствуйте.
Совсем недавно стал изучать PHP поэтому никак не могу понять что происходит с таким кодом.
По одному уроку сделал скрипт отправки письма - работает хорошо, но вот чтобы дальше с ним работать - я хочу видеть, какие данные он отправляет в POST. Но тут происходит какая-то магия.
<html>
<head>
<title>Отправка писем с помощью PHPmailer</title>
<meta charset="utf-8">
</head>
<body>
<?php
if( $_POST ){
require_once "lib/class.phpmailer.php";
$mail = new PHPmailer;
$mail->IsSMTP();
$mail->Host = "127.0.0.1";
$mail->Port = 25;
$mail->CharSet = 'UTF-8';
$mail->Username = "xxxxx";// логин под которым заходим в почту
$mail->Password ="xxxx";// пароль от почты
$mail->SetFrom('root@localhost.com', 'Локальный компьютер'); // От кого отправлено письмо
//Тело письма
$mail->isHTML(true);
$mail->Subject = $_POST['subject'];
$mail->Body = "Имя: {$_POST['name']}<br> Email: {$_POST['email']}<br> Сообщение: " . nl2br($_POST['body']);
$mail->AltBody = "Имя: {$_POST['name']}\r\n Email: {$_POST['email']}\r\n Сообщение: {$_POST['body']}";
$address = "root@localhost.com"; // кому отправляем
$mail->AddAddress($address, 'xxxxxxxx');// можно дублировать
$mail->AddAttachment("files/mail.pdf");
if( $mail->send() ){
echo $answer = '1';
}else {
$answer = '0';
}
die( $answer );
}
echo "<pre>";
print_r($_POST);
echo "</pre>";
echo "<pre>";
foreach ($_POST as $key=>$value){
print_r("<p>".$key." = " . $value . "</p>");
};
echo "</pre>";
?>
<form action="" method="POST" id="contact"><!-- action если обработчик будет на другой странице-->
<p><label for="name">Имя</label><input id="name" name="name" type="text"><span></span></p>
<p><label for="">Тема</label><input id="subject" name="subject" type="text"><span></span></p>
<p><label for="">Email</label><input id="email" name="email" type="text"><span></span></p>
<p><label for="">Сообщение</label><textarea id="body" name="body" id="" cols="30" rows="10"></textarea><span></span></p>
<p><input type="submit" id="submit" name="submit" value="Выслать"><span></span></p>
</form>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function(){
$('#contact').submit(function(){
var errors = false;
$(this).find('span').empty();
$(this).find('input, textarea').each(function(){
if($.trim( $(this).val() ) == ''){
errors = true;
$(this).next().text('Не заполнено поле' + $(this).prev().text());
}
});
if(!errors) {
var data = $('#contact').serialize();// склеивает данные форму в qerystring
// console.log(data);
$.ajax({
url: 'index.php',
type: 'POST',
data: data,
beforeSend: function(){
$('#submit').next().text('Отправляю...');
},
success: function(res){
if(res){ // подумать почему res != 1;
console.log(res);
$('#contact').find('input:not(#submit), textarea').val('');
$('#submit').next().empty();
}else {
$('#submit').next().empty();
alert('Ошибка отправки');
}
},
error: function() {
alert('Ошибка');
}
});
}
return false;
})
});
</script>
</body>
</html>
Первое с чем я столкнулся - это то, что console.log(res); выводит не 1 или 0, а вот что в консоли:
<html>
<head>
<title>Отправка писем с помощью PHPmailer</title>
<meta charset="utf-8">
</head>
<body>
11
Объясните почему он цепляет HTML-код???
Далее не понимаю что происходит в этом участке
if( $mail->send() ){
echo $answer = '1';
}else {
$answer = '0';
}
echo $answer = '1'; я так понимаю - это 1чка после
</body>
Но я ее не вижу в документе, а вижу только в консоли.
И вообще, все что внутри этого условия - не выводится. Как будто бы $mail->send() на условие не реагирует.
Далее я хочу перехватить;
echo "<pre>";
print_r($_POST);
echo "</pre>";
- так выводится пустой массив Array();
ясно что последующий foreach ничего не вывел.
Как мне отобразить POST-данные?
Заранее спасибо.