Добрый день.
Сразу хочу сказать что в программировании я мало что понимаю, но потребовалось сделать вот что.
Встала жёстакая потребность для создания формы обратной связи которая в зависимости выбранного значения (города) отсылает письмо на закреплённый за эти значением (городом) список e-mail адресов.
как это сделать стандартными ср-ми не разобрался и написал свой снипет.
<?php
// Выставляем локали
setlocale(LC_ALL, ’ru_RU.CP1251’, ’rus_RUS.CP1251’, ’Russian_Russia.1251’);
// Убираем ненужные символы из GPC
if ( get_magic_quotes_gpc() )
{
if ( $_GET ) array_stripslashes($_GET );
if ( $_POST ) array_stripslashes($_POST );
if ( $_COOKIE ) array_stripslashes($_COOKIE);
}
// Объявляем некоторые переменные
$showForm = true; // Показывать форму
$errors = array(); // Список ошибок
// Переменные для описания полей письма
$mailFrom = isset($_POST[’from’ ]) ? $_POST[’from’ ] : null; // e-mail Отправителя
$mailRecipient = isset($_POST[’recipient’]) ? $_POST[’recipient’] : null; // e-mail Получателя
$mailImy = isset($_POST[’imy’ ]) ? $_POST[’imy’ ] : null; // Имя отправителя
$mailText = isset($_POST[’text’ ]) ? $_POST[’text’ ] : null; // Текст письма
// Проверяем пост-данные
if ( $_POST )
{
// Форма была отправлена, выполняем обработку
// Проверяем адрес получателя по шаблону регулярных выражений
// Адрес получателя указан правильно, пробуем отправить письмо
// Подготавливаем заголовки письма
$mailHeaders = array();
$mailHeaders[] = ’Content-Type: text/plain; charset=windows-1251’;
$mailHeaders[] = ’Content-Transfer-Encoding: 8bit’;
$mailHeaders[] = ’From: ’. $mailFrom;
// Пробуем отправить письмо
if ( mail($mailRecipient, $mailSubject, $mailText, join("\n", $mailHeaders)) )
{
// Письмо успешно отправлено
?>
<p>Ваш вопрос успешно отправлен!</p>
<p><a href="/">На главную</a></p>
<?php
// Запрещаем вывод формы
$showForm = false;
}
else
{
// Отправка письма провалилась
$errors[’mailsend’] = ’Не удалось задать вопрос.’;
}
}
// Показ формы для отправки сообщения
if ( $showForm )
{
?>
<!-- Форма отправки письма -->
<p>Для отправки вопроса заполните данную форму и нажмите кнопку "Отправить".</p>
<form method="POST">
<table>
<?php
if ( $errors )
{
// Вывод сообщений об ошибках
?>
<tr>
<td colspan="2">
<div class="errors"><?php echo join(’
’. PHP_EOL, $errors)?></div>
</td>
</tr>
<?php
}
?>
<tr>
<td>Имя</td>
<td><input type="text" name="imy" size="40" value="Ваше имя" /></td>
</tr>
<tr>
<td>e-mail</td>
<td><input type="text" name="from" size="40" value="Ваш e-mail" /></td>
</tr>
<tr>
<td>Город</td>
<td><select name="recipient" id="type-select">
<option value="
[email protected]">Москва</option>
<option value="
[email protected],
[email protected]">Питер</option>
</select>
</tr>
<tr>
<td>Текст письма</td>
<td><textarea name="text" cols="42" rows="10">Текст вопроса</textarea></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Отправить" /></td>
</tr>
</table>
</form>
<?php
}
// Вывод нижней части страницы
/**
* Экранирование опасных символов html
*
* @param string $html
* @return string
*/
function hEscape($html)
{
return strtr
(
$html,
array
(
’&’ => ’&’ ,
’"’ => ’"’,
’\’’ => ’’’,
’<’ => ’<’ ,
’>’ => ’>’
)
);
}
/**
* @desc Убирает слэши из строки или массива
* @param array|string $data Входящие данные, где нужно убрать кавычкм
* @return void
*/
function array_stripslashes (& $data )
{
if ( is_array($data) )
array_walk($data, __FUNCTION__);
else
$data = strtr($data, array(’\\\\’ => ’\\’, ’\\\’’ => ’\’’, ’\\"’ => ’"’));
}
?>
Но в данной форме нет защиты от спама, а соответственно вопрос. Как прикрутить сюда стандартную капчу или подскажите как сделать стандартными средствами то что мне нужно.
Спасибо за внимание.
ps: при вставке кода в тэг [ code ] возникает проблема с кодировкой.