За последние 24 часа нас посетили 19185 программистов и 1639 роботов. Сейчас ищут 948 программистов ...

Выбор e-mail в форме обратной связи

Тема в разделе "Прочие вопросы по PHP", создана пользователем ant_30, 20 сен 2013.

  1. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    Всем доброго времени суток. Вопрос, собственно, в том, чтобы организовать пользователю выбор, кому отправить e-mail через форму обратной связи.

    HTML форма вида:
    Код (Text):
    1.  
    2. <form action="send.php" method="POST">
    3. <table border="0" cellspacing="1" cellpadding="3" align="center">
    4. <tr>
    5. <td width="150">Имя:<font color="red">*</font></td>
    6. <td colspan="2">
    7. <input type="hidden" name="zagolovok" value="Сообщение со страницы 'Контакты' (site.ru)">
    8. <input type="text" name="user" size="20" maxlength="25"></td>
    9. </tr>
    10. <tr>
    11. <td width="150">Ваш E-mail:<font color="red">*</font></td>
    12. <td colspan="2"><input type="email" name="email" size="20"></td>
    13. </tr>
    14. <tr>
    15. <td width="150">Тема:<font color="red">*</font></td>
    16. <td colspan="2"><input type="text" name="tema" size="50" maxlength="50"></td>
    17. </tr>
    18. <tr>
    19. <td width="150">Текст сообщения:<font color="red">*</font></td>
    20. <td colspan="2"><textarea cols="48" rows="6" name="mes" maxlength="500"></textarea></td>
    21. </tr>
    22. <tr>
    23. <td width="150"></td>
    24. <td><input type="submit" name="ok" value="Отправить"></td>
    25. </tr>
    26. </table>
    27. </form>
    Обработчик, с помощью которого будет произведена отправка, соответственно (файл send.php):
    Код (Text):
    1.  
    2. <?php
    3.         if($_POST['ok']) {
    4.         $email=$_POST['email'];
    5.         if (empty($email)) {
    6.         echo "E-mail вводить <a href='fguestbook.php'>обязательно</a>.<br>"; } else {
    7.  
    8.         $tema = $_POST['tema'];
    9.         if (empty($tema)) {
    10.         echo "Необходимо <a href='fguestbook.php'>указать тему</a> сообщения.<br>"; } else {
    11.  
    12.         $user = $_POST['user'];
    13.         if (empty($user))  {
    14.         echo "Вы не ввели свое имя. <a href='fguestbook.php'>Представьтесь</a>, пожалуйста.<br>"; } else {
    15.  
    16.         $mes = $_POST['mes'];
    17.         if (empty($mes)) {
    18.         echo "Необходимо <a href='fguestbook.php'>ввести</a> текст сообщения<br>"; } else {
    19.  
    20.         $zagolovok = $_POST['zagolovok'];
    21.         $zagolovok = '=?koi8-r?B?'.base64_encode(convert_cyr_string($zagolovok, "w","k")).'?=';
    22.         $to = 'name@site.ru';
    23.         $from=$email;
    24.  
    25. $tema = htmlspecialchars(stripslashes($tema));
    26. $user = htmlspecialchars(stripslashes($user));
    27. $mes = htmlspecialchars(stripslashes($mes));
    28.  
    29.         mail($to, $zagolovok, 'Пользователь: '.$user."\n".'--------------------'."\n".'Тема сообщения: '.$tema."\n".'--------------------'."\n".'Текст сообщения: '."\n".$mes."\n", "From:".$from);
    30.         echo '<table border=0 width=100% height=100%><tr><td align=center><font size=6 color=green>Спасибо! Ваше письмо отправлено.</font><br><br><font size=4><a href=form.php>Вернуться обратно</a></font></td></tr></table>';
    31.          }
    32.        }
    33.      }
    34.    }
    35.  }
    36. ?>
    (в действительности все это будет выглядеть малость посложнее, т.к. здесь не указал признаков капчи.)

    Теперь хочу вставить в форму дополнительное поле, где пользователь выбирает, кому отправить письмецо:

    Код (Text):
    1.  
    2. <select name=email >
    3. <option value=name1@domain.ru selected>Админ 1
    4. <option value=name2@domain.ru>Админ 2
    5. <option value=name3@domain.ru>Админ 3
    6. </option>
    7. </select>
    Но в этом случае адреса e-mail будут "светиться" в html коде, что не есть хорошо в плане защиты e-mail от спам-ботов.

    Как мне прикрутить этот вариант, чтобы в html коде не было видно e-mail адресов, котрые прописаны в форме?
    Уже третьи сутки бьюсь над этим, ничего путного не нахожу.

    Заранее всем спасибо
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем это юзеру выбирать такое? о_О
     
  3. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    На сайте будет 3 раздела, за каждый раздел отвечает определенное лицо. Нужно сделать так, чтобы можно было обратиться к админу определенного раздела, не тревожа остальных. Вот именно этого я и добиваюсь.
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Правильно ли я понял, есть форма обратной связи где человек пишет свое письмо.Отправляет письмо твое приложение?

    Ну пропиши что то в html селекте, когда запрос прийдет к тебе проверишь что данные правильные и отправишь письмо.Мейлы будут прописаны в скрипте.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    может лучше посылать их на один имеил к которому имеют доступ все админы , но делать пометку в теме сообщения.

    а выбор админа не отличается от выбора любого другого параметра в HTML формах. Что вас конкретно смущает?
     
  6. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    Об этом тоже думал, но это не выход - нужно отправлять непосредственно нужному лицу...
    Когда-то попадался подобный скрипт (с возможностью выбора адресата), почти весь и-нет перекопал, не вижу... А можно было бы оттуда вариант извлечь...
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я чета не понимаю в чем затык. вы хотите чтобы вам дали код обработки одного выпадающего списка или кучки радио? тогда это в фриланс за деньги или в бесплатную помощь, если вы сами не собираетесь ничего делать или платить.
     
  8. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    Здесь без разницы, кучка радио или выпадающий список - все одно.
    Я не прошу мне код писать или не делаю никому заказа. Просто прошу "навести" на правильное решение. Остальное сам сделаю. Мне нужно понять, как организовать это дело. Ну пропишу я адреса внутри обработчика, а вот как эти адреса через "селект" заставить работать (да так, чтобы в html коде не светились) - вот этого понять не могу...
    Если пропишу адреса внутри select, через неделю все эти почтовые ящики будут загажены спамом...
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да по номеру =)
     
  10. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    ну, в общем, всем спасибо...
    с str_replace() все получилось
     
  11. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А это тут причем?
     
  12. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    Замена полученной записи из формы на нужную (в данном случае на e-mail получателя).
    Полностью готовый вариант, может кому еще пригодится
    Форма:
    Код (Text):
    1. <form action="send.php" method="POST">
    2. <table border="0" cellspacing="1" cellpadding="3" align="center">
    3. <tr>
    4. <td width="150">Ваше имя:</td>
    5. <td colspan="2">
    6. <input type="hidden" name="zagolovok" value="Сообщение со страницы 'Контакты' (site.ru)">
    7. <input type="text" name="user" size="30" maxlength="25"></td>
    8. </tr>
    9. <tr>
    10. <td width="150">Ваш E-mail:</td>
    11. <td colspan="2"><input type="email" name="email"  size="30"></td>
    12. </tr>
    13. <tr>
    14. <td width="150">Получатель:</td>
    15. <td colspan="2">
    16. <select name=adresat  style="width: 400px;">
    17. <option value=em1 selected>Админ 1
    18. <option value=em2>Админ 2
    19. <option value=em3>Админ 3
    20. </option>
    21. </td>
    22. </tr>
    23. <tr>
    24. <td width="150">Тема:</td>
    25. <td colspan="2"><input type="text" name="tema"  style="width: 400px;" maxlength="50"></td>
    26. </tr>
    27. <tr>
    28. <td width="150">Текст сообщения:</td>
    29. <td colspan="2"><textarea style="width: 400px;" rows="8" name="mes" maxlength="500"></textarea></td>
    30. </tr>
    31. <tr>
    32. <td width="150">Проверочный код:</td>
    33. <td><img src="../captcha.php" name="captcha" size="20"></td><td><input type=text name=kapcha  size=10 style='font-size:18px; text-align:center' maxlength="10"></td>
    34. </tr><tr>
    35. <td width="150"></td>
    36. <td><input type="submit" name="ok" value="Отправить"></td>
    37. </tr>
    38. <tr>
    39. <td colspan="3" align="center"><br><b>Все поля должны быть заполнены</b></td>
    40. </tr>
    41. </table>
    42. </form>
    Обработчик
    Код (Text):
    1. <?php
    2. session_start();
    3. if($_POST['kapcha'] != $_SESSION['rand_code']) echo "Неверно введён проверочный код, или не заполнено одно из полей. <a href=form.php>Попробуйте снова...</a>";
    4. else {
    5. $adresat=$_POST['adresat'];
    6. $adresat = str_replace("em1","name1@site.ru",$adresat);
    7. $adresat = str_replace("em2","name2@site.ru",$adresat);
    8. $adresat = str_replace("em3","name3@site.ru",$adresat);
    9.  
    10.  
    11.         if($_POST['ok']) {
    12.         $email=$_POST['email'];
    13.         if (empty($email)) {
    14.         echo "E-mail вводить <a href=form.php>обязательно</a>.<br>"; } else {
    15.  
    16.         $tema = $_POST['tema'];
    17.         if (empty($tema)) {
    18.         echo "Необходимо <a href=form.php>указать тему</a> сообщения.<br>"; } else {
    19.  
    20.         $user = $_POST['user'];
    21.         if (empty($user))  {
    22.         echo "Вы не ввели свое имя. <a href=form.php>Представьтесь</a>, пожалуйста.<br>"; } else {
    23.  
    24.         $mes = $_POST['mes'];
    25.         if (empty($mes)) {
    26.         echo "Необходимо <a href=form.php>ввести</a> текст сообщения<br>"; }
    27.  
    28. else
    29. {
    30.  
    31.         $zagolovok = $_POST['zagolovok'];
    32.         $zagolovok = '=?koi8-r?B?'.base64_encode(convert_cyr_string($zagolovok, "w","k")).'?=';
    33.         $to = $adresat;
    34.         $from=$email;
    35.  
    36.  
    37.         mail($to, $zagolovok, 'Пользователь: '.$user."\n".'--------------------'."\n".'Тема сообщения: '.$tema."\n".'--------------------'."\n".'Текст сообщения: '."\n".$mes."\n", "From:".$from);
    38.         echo '<table border=0 width=100% height=100%><tr><td align=center><font size=6 color=green>Спасибо! Ваше письмо отправлено.</font><br><br><font size=4>Перенаправление...</font></td></tr></table>';
    39.            }
    40.          }
    41.        }
    42.      }
    43.    }
    44.  }
    45. ?>
    Если где-то, в чем-то запутался, прошу подправить
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    йоперный стыд, бро... Три раза подряд дергать str_replace, рассчитывая, что хотя бы один из них сработает, при том, что данные в запросе могут быть любыми..

    Код (PHP):
    1. switch ($_POST['adresat']){
    2. case('em1'): $adresat =  'name1@site.ru'; break;
    3. case('em2'): $adresat =  'name2@site.ru'; break;
    4. case('em3'): $adresat =  'name3@site.ru'; break;
    5. default: die ('<h1>ГРЯЗНЫЙ ХАКЕР, ТЫ УМРЕШЬ ЧЕРЕЗ 7 ДНЕЙ!!!</h1>'); break; //на случай, если чьи-то шаловливые ручонки пришлют левые данные.
    6. }
     
    spiritus_infernus нравится это.
  14. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    Спасибо, вариант тоже неплохой. Хоть и предыдущий тоже работает, единственный минус в том, что действий больше выполняется при обработке...

    ps/ прошу сильно не пинать, я в этом деле новичок... пока только изучаю php
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тоже? :) Он не "тоже неплохой", он правильный.
    Оно не работает. Оно прокатывает.
    Сразу такой тебе совет - никогда не бери за привычку оценивать что-то по принципу "лишь бы работало". Так и зубы можно дергать через задницу, только вот гуманно ли? :)
    Надо всегда относиться к своему коду критически. Ругать его. Он всегда в чем-то будет не доделан. Твой, мой, любой. У меня было что мысли в кучу, написал огромную приблуду, радуюсь, на след утро глянул на свежую голову - а там...мать моя женщина...и еще 2 дня убил на рефакторинг.
    не просто больше, в три таза больше. 300% увеличение нагрузки на сервер. Я уже не раз давал тут совет и дам его тебе - умножай все на миллион. Как будто разом к тебе пришел миллион человек. И сразу поймешь, где много, а где нет. В коде, если ты хочешь сделать что-то красивое, что-то эффективное, что-то по-настоящему хорошее, не должно быть ничего лишнего. Кроме того, это не единственный минус. Я не просто так написал про то, что у тебя нет гарантий никаких в коде. Мой код гарантирует, что любой результат будет обработан. Твой код гарантирует, что с вероятностью 33% одна из строчек скорректирует строку нужным образом, при условии, что входящие данные будут строго те, которые они знают. Да, можно твой код, кстати, записать в одну строку, но он все равно не безопасен.

    Я открою страничку твоего сайта, найду эту форму, открою код страницы, заменю значения и вуаля - я вбиваю любой email, и твоя система пошлет на него любое письмо. Через тебя можно будет слать спам. Просто потому что строка не будет обработана и пойдет дальше в том виде, в каком пришла.

    Интернет - крайне агрессивная среда. Пользователь здесь - твой противник, а не друг.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    через массив по-круче будет-то.

    Добавлено спустя 36 секунд:
    когда придет, он наймет кодера. :D
     
  17. ant_30

    ant_30 Новичок

    С нами с:
    13 июл 2013
    Сообщения:
    32
    Симпатии:
    0
    Спасибо за разъяснение. Я это уже понял после того, как написал предыдущий пост. Еще раз огромное спасибо за помощь