Как запрограммировать форму обратной связи

Грех - не использовать чужой код, а грех в нём не разбираться(с). Следуя этой истине, иногда полезно взять уже готовое решение, проверенное временем. Естественно, если вы с нуля напишите форум, это будет огромный плюс в плане практики, но пока вы это сделаете уйдёт не мало времени. Да и не факт, что вы сумеете его довести до функциональности бесплатных альтернатив. Поэтому, когда я взялся написать скрипт для формы обратной связи, то решил поискать что-нибудь готовое. Оказывается, есть очень популярный класс для работы с почтовым сервером class.phpmailer.php

Скачать его можно отсюда: https://phpmailer.codeworxtech.com.

В нём очень много полезных функций.

Сначала я просмотрел переменные, которые использует этот класс, и отметил для себя нужные.

var $Subject для темы письма

var $Body хранит сообщение письма.

var $From тут указываем e-mail от кого присылается письмо.

var $FromName а здесь имя отправителя.

Потом выбрал необходимые функции.

function AddAddress() здесь указываем ваш адрес, на который будут приходить письма и ваше имя.

function IsHTML() нужна, чтобы выставить формат письма.

function AddAttachment() если вы хотите разрешить прикреплять файлы к письму.

function send() ну и естественно письмо надо отправить, эта функция как раз для этого

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

form.html

<form action="index.php" method=post enctype="multipart/form-data">
<div align="center">
<br>Имя<br>
<input type="text" name="name" size="40">
<br>тема<br>
<input type="text" name="title" size="40">
<br>Контактный email<br>
<input type="text" name="email" size="40">
<br>Файл<br>
<input name="files" type="file" size="28">
<br>Сообщение<br>
<textarea rows="10" name="mess" cols="30"></textarea>
<br><br><input type="submit" value="send" name="submit">
</div>
</form>

index.php

<?php

    include "form.html";

    function send_mail() {
       
        $name  = htmlspecialchars($_REQUEST['name']);
        $email = htmlspecialchars($_REQUEST['email']);
   
        //  проверка на наличие имени
        if (empty($name)) {
            echo "не введено имя"; 
        } else {
           
        //  проверка правильности e-mail
       
        if(!preg_match("/^[0-9a-z_\.\-]+@[0-9a-z_\.\-]+\.[a-z]{2,6}$/i", $email)) {
            echo "неправильно введён e-mail";
        } else {
   
            $message = '<b>Hello from</b>'.$_REQUEST['name'].'<br /> <b>мой email </b>'.$_REQUEST['email'].'<br /> '.$_REQUEST['mess'];

            // подключаем класс
           
            include "class.phpmailer.php";

            $mail = new PHPMailer();
            $mail->From = $_REQUEST['email'];      
            $mail->FromName = $_REQUEST['name'];  
            $mail->AddAddress('megaadmin@yandex.ru','админу');
            $mail->IsHTML(true);      
            $mail->Subject = $_POST['title'];  
           
            if(isset($_FILES['files'])) {
               
                if($_FILES['files']['error'] == 0) {
                    $mail->AddAttachment($_FILES['files']['tmp_name'],$_FILES['files']['name']);
                }
       
            }
           
            $mail->Body = $message;
            if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
           
            echo 'письмо отправлено.';
        }
    }  
}

if (!empty($_POST['submit'])) send_mail();

?>

Надеюсь, он кому-нибудь пригодится 😉 Кстати, для вас это будет хорошим примером, чтобы использовать уже полученные знания.





Читайте также:



20 Ответов на “Как запрограммировать форму обратной связи”

  1. игорь

    что-то я всё сделал как написано, но на моём сайте не работает эта форма. подскажи неучу, как правильно интегрировать эту форму в мой сайт. помоги, очень надо!!!
    у меня на хосте поддерживается РНР.
    Заранее спасибо!

  2. Значит что-то сделано не как написано. Я же не знаю что у тебя за сайт. Ошибки хотя бы скинь :)

  3. Leonid

    Добрый день!

    А как я смогу увидеть, то что мне отправят с помощью form.html? Как работает данная форма?

    Спасибо!

  4. 2 Leonid: Не совсем понял вопрос “как я смогу увидеть, что мне отправят с помощью form.html”. То что отправят через нее придет Вам на почту :) Так она и работает..

  5. Михаил

    Warning: include() [function.include]: Failed opening ‘class.phpmailer.php’ for inclusion (include_path=’.:/usr/local/lib/php’) in /home/users/d/degavyman/domains/sanseb.ru/sendmail.php on line 25

    Fatal error: Class ‘PHPMailer’ not found in /home/users/d/degavyman/domains/sanseb.ru/sendmail.php on line 27
    Подскажие пожалуйста что это за ошибка

  6. novice

    Не может подключить файл class.phpmailer.ru, т.к. не находит его.

  7. Михаил

    Спасибо!
    Как мне создать файл class.phpmailer.ru?
    Я может быть неправильно выражаюсь но я далек от PHP а форма нужна.Подскажите что нужно сделать?

  8. novice

    Михаил, Вам нужно скачать PHPMailer отсюда: [ссылка]

  9. S3T

    поставил, настроил, но на мыло в полях “от кого”, “тема”, “кому” - вместо русских букв пришли закорючки - где искать причину проблемы?

  10. novice

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

  11. S3T

    уже разобрался, хост на UTF-8 оказался

  12. Оксана

    А какую тут кодировку нужно поставить?? Скрипт у меня работает. Но вместо нормально текста приходит что то типа п п п п яяяяя - вот такое вот. Побовала меня на разные кодировки все равно также. Подскажите что поменять нужно и где? Меня кодировку в index.php.

  13. novice

    Оксана, если отображается не то, что должно отображаться, это значит, что кодировка самого php-файла не такая, какую Вы записываете в него. Т.е. кодировка у него, к примеру, cp1251, а Вы пытаетесь внутри него преобразовать текст в другую кодировку с помощью iconv или еще как-то. Может быть кодировка базы у Вас не такая, какую Вы ожидаете (если Вы берете данные из базы).

  14. Оксана

    Ну я сделала все так, как написано у вас. Перекопировала код на страничку. И отдельно создала Index.php(Открыла Notepad, ввела код, который написан у вас. и Сохранила как php.). А также скачала вот этот файл class.phpmailer. А что я могу поменять, даже не знаю. Какой файл я могу вообще поредактировать?? Заранее спасибо.

  15. Оксана

    ну так кто нибудь поможет мне сделать так, чтоб сообщения приходили на рууском?? а то ничего не получается. с

  16. novice

    Оксана, присылайте свои наработки по этому поводу мне на - я посмотрю, в чем проблема.

  17. Оксана

    Здравствуйте! Я вам уже писала как-то. У меня просьба. Хочу изменить немного форму. У вас там есть строчки, имя, почта, тема и сам текст сообщения. А я хочу сделать например такие строчки: Имя, Фамилия, Почта, Телефон, ну или любую другую строчку, чтобы могли вписать туда данные. Текст сообщения убрать. Не подскажете как это сделать? Я пробовала сделать строчку фамилию, но там нет проверки, как в строчке Имя, ввели ли туда данные или нет. Буду рада если поможете сделать мне, а то в этом не разбираюсь.

  18. А как вставить поле для телефона ?
    С уважением.

  19. Эдуар

    Приветствую коллеги, помогите решить проблему: Нужно чтобы можно было прикрепить не только один фаил, а много если указан а то прикрепляется только последний фаил. чтобы одним инпутом можно было отослать несколько фаилов если их суммарный вес не привышает 20 мб .
    Можно как то пройтись циклом forich по массиву $_FILE[‘attachfile’][] и прикрепить все фалы к письму, находящиеся в массиве “attachfile”

  20. Антон

    Кто то поможет написать скрипт к такой форме?

    Добавить e-mail:

    Добавить тел:

    Добавить ссылку:

    Добавить картинку:


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map