[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Форма "Обратная связь"
zulfukar
Установил на сайт скрипт Обратной связи (использую как Задать вопрос), все работает, но при отправке не проверяет 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>


файл 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 'Отправлено письмо с вложениями.';
}
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.