Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   отправка сообщений обратной связи (https://javascript.ru/forum/server/2859-otpravka-soobshhenijj-obratnojj-svyazi.html)

madgals 18.02.2009 17:30

отправка сообщений обратной связи
 
есть форма:


<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
	    <p><input name="to[]" type="checkbox" value="rozn" checked /> Для розничных клиентов</p>
		<p><input name="to[]" type="checkbox" value="opt" /> Для оптовых и корпоративных клиентов</p>
		<p><input name="to[]" type="checkbox" value="coop" /> Сотрудничество по проектам</p>
		<p><input name="to[]" type="checkbox" value="prices" /> Товары и цены</p>
		<p><input name="to[]" type="checkbox" value="service" /> Сервис и гарантия</p>
		<p><input name="to[]" type="checkbox" value="ordinary" /> Общие вопросы</p>
		<p><input name="to[]" type="checkbox" value="vacancy" /> Работа в компании</p>
    	<span class="mailer">От кого:</span> <br />
		<input name="from" type="text" size="50"/><br />
		<span class='t2'>например, </span>
		<span class='t2' style='color:#3ac2db; font-weight:bold;
 background: url(/images/pt.jpg) repeat-x bottom;'>user@example.com
</span><span class="t2"> или </span>
		<span class='t2' style='color:#3ac2db; font-weight:bold; 
background: url(/images/pt.jpg) repeat-x bottom;'>
User &lt;user@example.com&gt;</span>
		<br /><br />
		<span class="mailer">Тема сообщения:</span> <br />
		<input name="subject" type="text" size="50"/>
		<br /><br />
		<span class="mailer">Текст сообщения:</span> <br />
		<textarea name="body" cols="50" rows="10"></textarea><br /><br />
		<input name="mailer" type="submit" class="mailer" value="Отправить" />
</form>



и есть скрипт обработки:


if (count($_POST["to"])>1) { 
                for ($i=0; $i<count($_POST["to"]); $i++) { 
                    switch ($_POST["to"][$i]) { 
                        case "rozn": 
                            $MailTo="1@domen.ru"; 
                            $MailCC=""; 
                            break; 
                        case "opt": 
                            $MailTo="2@domen.ru"; 
                            $MailCC=""; 
                            break; 
                        case "coop": 
                            $MailTo="3@domen.ru"; 
                            $MailCC="2@dome.ru,4@domen.ru"; 
                            break; 
                        case "prices": 
                            $MailTo="5@domen.ru"; 
                            $MailCC="6@domen.ru,2@domen.ru"; 
                            break; 
                        case "service": 
                            $MailTo="7@domen.ru"; 
                            $MailCC="4@domen.ru"; 
                            break; 
                        case "ordinary": 
                            $MailTo="4@domen.ru"; 
                            $MailCC="5@domen.ru"; 
                            break; 
                        case "vacancy": 
                            $MailTo="8@domen.ru"; 
                            $MailCC="7@domen.ru,6@domen.ru,5@domen.ru,6@domen.ru"; 
                            break; 
                    } 
                    $MailSubj = htmlspecialchars($_POST["subject"]); 
                    $MailFrom = htmlspecialchars($_POST["from"]); 
                    $MailMessage = htmlspecialchars($_POST["body"]); 
                    $headers = 'From:'. $MailFrom. "\r\n"; 
                    $headers .= 'Cc:'. $MailCC; 
                    @mail($MailTo, $MailSubj, $MailMessage, $headers); 
} 
}


В итоге 4@domen.ru получит 3 одинаковых письма, 5@domen.ru - 2 письма и т.д. Как избежать этого ? В phpclub просьба не отправлять. Модераторы сегодня неадекватны более чем когда либо.

Андрей Параничев 18.02.2009 18:24

Во-первых, насколько я понимаю, вам нужно изменить первое условие на:
if (count($_POST["to"])>0) {

Иначе, для розничных клиентов вообще не сработает.

Цитата:

Сообщение от madgals
В итоге 4@domen.ru получит 3 одинаковых письма, 5@domen.ru - 2 письма и т.д.

"В итоге", это если все галочки отмечены? Если да, то вам, скорее всего, придется организовать 2 цикла: в первом вы будете собирать массивы адресов Mailto и MailCC, а во втором - отправлять письма. И до отправки писем нужно вычислить разницу между двумя массивами адресов, и убрать дублирование из MailCC.

madgals 18.02.2009 19:27

спасибо за беспокойство ) на том же пхп клабе один модератор успел подкинуть эту идею пока другой модератор не удалил тему ))

x-yuri 26.02.2009 23:32

лучше пользуйся какой-нибудь готовой библиотекой, потому что через твою форму можно легко спам рассылать
кстати, зачем ты там htmlspecialchars используешь?


Часовой пояс GMT +3, время: 12:35.