Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2020, 00:02   #1
zulfukar
Новичок
Джуниор
 
Регистрация: 04.11.2020
Сообщений: 2
По умолчанию Форма "Обратная связь"

Установил на сайт скрипт Обратной связи (использую как Задать вопрос), все работает, но при отправке не проверяет 2 поля <select> (выбрано в них что-то или нет).
И еще нужно прикрутить какую-нибудь капчу, чтобы спамеры не доставали.
Сам не смог справиться с этим, знаний не хватает. Помогите пожалуйста.
Заранее благодарю.

P.S в скрипте есть код для возможности отправления файла. Оно мне не нужно, но я не разобрался как его удалить, поэтому я просто вырезал хтмл код из формы, чтобы его не было видно на сайте. Было бы неплохо удалить этот, лишний для меня код.

Код:
<div class="sub-title comadd"><h3>Задать вопрос!</h3></div>
        <div style="color: #f00;" id="result"></div>
        <img src="/feedback/ajax-loader.gif" id="load-indicator" alt="loading" style="position:absolute; z-index:1000; display:none;" />
 
<form method="post" action="/feedback/mails_sender.php" id="feedback" name="feedback" enctype="multipart/form-data">
    <div class="comment">
                <fieldset>
                        <select name="sex">
                            <option>Выберите Ваш пол *</option>
                            <option value="Мужчина">Мужчина</option>
                            <option value="Женщина">Женщина</option>
                        </select>
                </fieldset>
                <fieldset>
                        <input name="youremail" type="text" placeholder="Эл. @ почта *" size="20" />
                </fieldset>
                <fieldset>
                        <select name="option">
                            <option>Выберите сотрудника *</option>
                            <option value="Сергей">Сергей</option>
                            <option value="Иван">Иван</option>
                            <option value="Николай">Николай</option>
                            <option value="Антон">Антон</option>
                            <option value="Виктор">Виктор</option>
                        </select>
                </fieldset>
                <fieldset>
                        <textarea name="message" id="sendtext" placeholder="Текст сообщения *" style="resize: vertical; width: 98%; height: 130px; display: block;" cols="40" rows="5"></textarea>
                </fieldset>
    </div>
<table><tr><td style="padding-right:20px;">                
    <div class="send">
        <input name="to" type="hidden" value="send" />
        <button type="submit" class="sub">Отправить</button>
    </div>
</td><td>
        <input name="to" type="hidden" value="Очистить" />
        <button type="reset" class="sub">Очистить</button>
</td></tr>
</table>
</form>
 
        <script>
            // этот участок кода нужен только для отображения гифки
            // которая даёт пользователю понять, что что-то происходит
            // и нужно подождать
            $(document).ready(function () {
                $(document).ajaxStart(function () {
                    // найдем элемент с изображением загрузки и уберем невидимость:
                    var imgObj = $("#load-indicator");
                    imgObj.show();
                    // вычислим в какие координаты нужно поместить изображение загрузки,
                    // чтобы оно оказалось в серидине страницы:
                    var centerY = $(window).scrollTop() + ($(window).height() + imgObj.height()) / 2;
                    var centerX = $(window).scrollLeft() + ($(window).width() + imgObj.width()) / 2;
                    imgObj.offset({
                        left: centerX,
                        top: centerY
                    });
                });
                //скрываем изображение после окончания AJAX-запроса
                $(document).ajaxStop(function () {
                    $("#load-indicator").hide();
                });
            });
 
            // назначаем действие на такое событие как отправка формы
            $("#feedback").submit(function (evtObj) {
                evtObj.preventDefault();
                // Если элемент формы fileforsending содержит значения (т.е. выбран файл для отправки),
                // то вместо AJAX-запроса используем FormData()
                // поскольку файлы через AJAX-запросы не передаются                
 
                 {
                    var form = $(this);
                    $.ajax({
                        // Здесь файл, который обрабатывает полученные от пользователя данные и отправляет почту
                        url: "/feedback/mails_sender.php",
                        type: "POST",
                        data: form.serialize(),
                        // Действия в случае успешной отправки AJAX-запроса (а не письма!)
                        // Здесь data - полученное от mails_sender.php сообщение
                        success: function (data) {
                            if (data === "Отправлено письмо без вложений.") {
                                $("#result").html("Отправлено письмо без вложений.");
                                // Письмо отправлено, сбрасываем данные формы
                                document.getElementById("feedback").reset();
                                // Следующая строка после успешной отправки сообщения
                                // перенаправляет пользователь на любую страницу/сайт
                                // достаточно раскомментировать её и поменять адрес сайта webware.biz
                                // на ваш собственный
                                // document.location.href = "http://";
                            } else {
                                $("#result").html(data);
                            }
                        },
                        error: function (data) {
                            $("#result").html("Результат выполнения: " + data);
                        }
                    });
                }
            });
        </script>
zulfukar вне форума Ответить с цитированием
Старый 05.11.2020, 00:03   #2
zulfukar
Новичок
Джуниор
 
Регистрация: 04.11.2020
Сообщений: 2
По умолчанию

файл mails_sender.php
Код:
<?php
 
// Адрес, куда отправляем письмо
$to = 'pochta@mail.ru';
 
// Получаем данные от пользователя
// Все данные обязательно нужно проверять на правильность!
$userEmail = filter_input(INPUT_POST, 'youremail', FILTER_VALIDATE_EMAIL);
$subject = filter_input(INPUT_POST, 'subject', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
$option = filter_input(INPUT_POST, 'option', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
$message = strip_tags(filter_input(INPUT_POST, 'message', FILTER_SANITIZE_MAGIC_QUOTES), '<p><a><b><div><br>');
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
$sex = filter_input(INPUT_POST, 'sex', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
 
// Проверка, что данные не пустые. 
// Нас не интересуют анонимки
if (empty($userEmail)) {
    die('Отсутствует или неверен адрес почты');
// Нас не интересуют послания с пустым сообщением
} elseif (empty($message)) {
    die('Отсутствует сообщение');
} elseif (empty($sex)) {
    $sex = '[Выберите Ваш пол]';
} elseif (empty($option)) {
    $option = '[Выберите сотрудника]';
}
// elseif (empty($subject)) {
//    $subject = '[тема не указана]';}
 
 
$the_file = '';
//Если пользователь выбрал файл для отправки
if (!empty($_FILES['fileforsending']['tmp_name'])) {
    // Закачиваем файл
    $path = $_FILES['fileforsending']['name'];
    if (copy($_FILES['fileforsending']['tmp_name'], $path)) {
        $the_file = $path;
    }
}
// Если есть прикреплённый файл, то заголовки чуть другие.
// Поэтому, в зависимости от того, отправил ли пользователь файл,
// выбираем, что делать дальше
$headers = null;
 
if (empty($the_file)) {
    // эта часть кода отвечает за отправку сообщений без вложений
    // собираем заголовки
    $headers = array();
    $headers[] = "MIME-Version: 1.0";
    $headers[] = "Content-type: text/html; charset=UTF-8";
    $headers[] = "From: $name <$userEmail>";
    $headers[] = "Bcc: JJ Chong <bcc@domain2.com>";
    $headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
    $headers[] = "Subject: Связь с администратором!";
    $headers[] = "X-Mailer: PHP/" . phpversion();
    // собираем текст письма
    $allmsg = "
    <p><b>Пол:</b> $sex</p>
    <p><b>E-mail:</b> $userEmail</p>
    <p><b>Сотрудник:</b> $option</p>
    <p><b>Сообщение:</b> $message</p>";
    $allmsg = " . $allmsg . ";
    // отправляем
    if (!mail($to, $subject, $allmsg, implode("\r\n", $headers))) {
        echo 'Письмо не отправлено - что-то не сработало.';
    } else {
        echo 'Ваше письмо успешно отправлено!';
    }
} else {
    // эта часть кода отвечает за отправку сообщений без вложений
    // читаем отправляемый файл в строку
    $fp = fopen($the_file, "r");
    if (!$the_file) {
        die("Ошибка отправки письма: Файл $the_file не может быть прочитан.");
    }
    $file = fread($fp, filesize($path));
    fclose($fp);
    // удаляем временный файл
    unlink($path);
    // собираем текст письма
    $allmsg = "
    <p><b>Пол:</b> $sex</p>
    <p><b>E-mail:</b> $userEmail</p>
    <p><b>Сотрудник:</b> $option</p>
    <p><b>Сообщение:</b> $message</p>";
    $allmsg = " . $allmsg . ";
    // генерируем разделитель
    $boundary = "--" . md5(uniqid(time()));
    // собираем заголовки
    $headers = array();
    $headers[] = "MIME-Version: 1.0";
    $headers[] = "From: $name <$userEmail>";
    $headers[] = "Bcc: JJ Chong <bcc@domain2.com>";
    $headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
    $headers[] = "Subject: Связь с администратором!";
    $headers[] = "X-Mailer: PHP/" . phpversion();
    $headers[] = "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    // собираем текст письма + приложенынй файл
    $multipart = array();
    $multipart[] = "--$boundary";
    $multipart[] = "Content-Type: text/html; charset=UTF-8";
    $multipart[] = "Content-Transfer-Encoding: Quot-Printed\r\n";
    $multipart[] = "$allmsg\r\n";
    $multipart[] = "--$boundary";
    $multipart[] = "Content-Type: application/octet-stream";
    $multipart[] = "Content-Transfer-Encoding: base64";
    $multipart[] = "Content-Disposition: attachment; filename = \"" . $path . "\"\r\n";
    $multipart[] = chunk_split(base64_encode($file));
    $multipart[] = "--$boundary";
    // отправляем
    if (!mail($to, $subject, implode("\r\n", $multipart), implode("\r\n", $headers))) {
        echo 'Письмо не отправлено - что-то не сработало.';
    } else {
        echo 'Отправлено письмо с вложениями.';
    }
}
zulfukar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" link90 Общие вопросы C/C++ 2 27.03.2016 12:34
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20
Окно "Обратная связь" Homebog PHP 6 27.08.2013 22:24