Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Обратная связь, не много допилить.

, При отправке письма, вывести сообщение об успешной отправке.
Статус пользователя drivemaster
сообщение 28.10.2014, 11:31
Сообщение #1


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Доброго времени суток, помогите разбирающиеся в php с несложной задачей.

Есть вот такой обработчик формы обратной связи с вложением ( взят отсюда )

php код обработчика
Код
<?php

  if(empty($_POST['mail_to'])) exit("Введите адрес получателя");

  // проверяем правильности заполнения с помощью регулярного выражения

  if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to']))
     exit("Введите адрес в виде somebody@server.com");

  $_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to']));

  $_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject']));

  $_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg']));

  $picture = "";

  // Если поле выбора вложения не пустое - закачиваем его на сервер

  if (!empty($_FILES['mail_file']['tmp_name']))

  {

    // Закачиваем файл

    $path = $_FILES['mail_file']['name'];

    if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;

  }

  $thm = $_POST['mail_subject'];

  $msg = $_POST['mail_msg'];

  $mail_to = $_POST['mail_to'];

  // Отправляем почтовое сообщение

  if(empty($picture)) mail($mail_to, $thm, $msg);

  else send_mail($mail_to, $thm, $msg, $picture);

  // Вспомогательная функция для отправки почтового сообщения с вложением

  function send_mail($to, $thm, $html, $path)

  {

    $fp = fopen($path,"r");

    if (!$fp)

    {

      print "Файл $path не может быть прочитан";

      exit();

    }

    $file = fread($fp, filesize($path));

    fclose($fp);

    

    $boundary = "--".md5(uniqid(time())); // генерируем разделитель

    $headers .= "MIME-Version: 1.0\n";

    $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";

    $multipart .= "--$boundary\n";

    $kod = 'koi8-r'; // или $kod = 'windows-1251';

    $multipart .= "Content-Type: text/html; charset=$kod\n";

    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";

    $multipart .= "$html\n\n";



    $message_part = "--$boundary\n";

    $message_part .= "Content-Type: application/octet-stream\n";

    $message_part .= "Content-Transfer-Encoding: base64\n";

    $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";

    $message_part .= chunk_split(base64_encode($file))."\n";

    $multipart .= $message_part."--$boundary--\n";



    if(!mail($to, $thm, $multipart, $headers))

    {

      echo "К сожалению, письмо не отправлено";

      exit();

    }

  }

?>


Всё работает нормально, но при отправке не выводится сообщение о том что письмо отправлено ( ну этого соответственно и не должно быть судя по коду :)), после нажатия на кнопку отправить, письмо отправляется а браузер отображает пустую страницу. Мне необходимо чтобы выводился echo текст при успешной отправке, чтобы не было пустой страницы.

Добавить доп поля и так далее я и сам смогу, в вот куда прописать вывод echo при успешной отправке, в этом скрипте, никак не могу сообразить :D

Спасибо :)

Отредактировал: drivemaster, - 28.10.2014, 11:35
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя onotole
сообщение 28.10.2014, 13:15
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Скрытый текст

Код
<?php
// Получение данных. (Пора забывать о глобальных переменных ($_FILES исключение))
$mail_to = filter_input(INPUT_POST, 'mail_to', FILTER_VALIDATE_EMAIL);
$thm = filter_input(INPUT_POST, 'mail_subject', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$msg = filter_input(INPUT_POST, 'mail_msg', FILTER_SANITIZE_FULL_SPECIAL_CHARS);

// Проверки
if(!$mail_to) {
    exit("Введите адрес в виде somebody@server.com");
}

if(!$msg) {
    exit("Нельзя отправлять пустое письмо");
}


$picture = "";

// Если поле выбора вложения не пустое - закачиваем его на сервер
if (!empty($_FILES['mail_file']['tmp_name'])) {
    // Закачиваем файл
    $path = $_FILES['mail_file']['name'];
    if (copy($_FILES['mail_file']['tmp_name'], $path))
        $picture = $path;
}

// Отправляем почтовое сообщение
if(empty($picture))
{
    if(@mail($mail_to, $thm, $msg)) {
        echo "Письмо успешно отправлено";
    } else {
        echo "Ошибка отправки сообщения";
    }
}

else
{
    if(send_mail($mail_to, $thm, $msg, $picture)) {
        echo "Письмо успешно отправлено";
    } else {
        echo "Ошибка отправки сообщения";
    }
}

// Вспомогательная функция для отправки почтового сообщения с вложением

function send_mail($to, $thm, $html, $path)
{
    $fp = fopen($path,"r");
    if (!$fp) {
        return false;
    }

    $file = fread($fp, filesize($path));
    fclose($fp);

    $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    $headers .= "MIME-Version: 1.0\n";
    $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $multipart .= "--$boundary\n";
    $kod = 'koi8-r'; // или $kod = 'windows-1251';
    $multipart .= "Content-Type: text/html; charset={$kod}\n";
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    $multipart .= "{$html}\n\n";
    $message_part = "--$boundary\n";
    $message_part .= "Content-Type: application/octet-stream\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: attachment; filename = \"{$path}\"\n\n";
    $message_part .= chunk_split(base64_encode($file))."\n";
    $multipart .= $message_part."--$boundary--\n";

    if(!@mail($to, $thm, $multipart, $headers)) {
        return false;
    }
    return true;
}



Отредактировал: onotole, - 28.10.2014, 13:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 28.10.2014, 16:45
Сообщение #3
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

drivemaster,
за отправку письма, отвечатет

Код
if(empty($picture))
   mail($mail_to, $thm, $msg);
else
   send_mail($mail_to, $thm, $msg, $picture);


тут mail() отправляет письмо... а send_mail(), это функция, в которой тоже в конечном итоге отправляется письмо с функцией mail(). Но там добавлено оформление и т.д.

сделайте проверку так:

Код
if(empty($picture))
{
     if(@mail($mail_to, $thm, $msg))
          echo "Письмо успешно отправлено";
     else
          echo "Ошибка отправки сообщения";
}
else
     send_mail($mail_to, $thm, $msg, $picture);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя drivemaster
сообщение 28.10.2014, 17:21
Сообщение #4


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Спасибо!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: