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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 12:30   #1
batusai
 
Регистрация: 23.10.2010
Сообщений: 9
Восклицание Создание формы обратной связи!

Здравствуйте! Очень нужна помощь специалистов, так как сам я php сравнительно недавно начал изучать.
суть в следующем.

есть сайт тематики "разработка сайтов на joomla!" сам сайт решил сделать на php http://www.koblents.ru

На нем в разделе контакты сделана форма связи. Однако она реализована не так, как надо. Обработчик формы просто засовывает данные с формы в бд на сервере. В принципе это неплохо, однако к этому необходимо добавить автоматическую отправку этих же данных в виде письма на нужный почтовый ящик... Как правильно это реализовать? Если нужно могу прикрепить код файла, хотя там все и так понятно.

Подскажите, как сделать, чтобы с формы обратной связи данные также отправлялись письмом на нужную почту??
Не из обычных людей тот, которого манит дерево без цветов.
batusai вне форума Ответить с цитированием
Старый 23.10.2010, 12:50   #2
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

функция mail()

читайте: http://www.php.ru/manual/function.mail.html
Никки вне форума Ответить с цитированием
Старый 23.10.2010, 16:27   #3
kpachbiu
взагрузке.рф
Форумчанин
 
Аватар для kpachbiu
 
Регистрация: 13.06.2010
Сообщений: 117
Радость

Да скиптов обратной связи много разных!

Источник: Google.ru Найти: Простой скрипт обратной связи

Вот например:

PHP код:
<?
if (isset ($_POST['message'])) { 
$name = @ trim ($_POST['name']);
$contact = @ trim ($_POST['contact']);
$message = @ trim ($_POST['message']);
if (! 
$name or ! $contact or ! $message) echo ('<p style="color: red">Необходимо заполнить все поля</p>');
else { 
mail ("admin@site.ru",
      
"Сообщение с сайта (отправитель: $name)",
      
"$message \n\n Контакты: \n $contact");
      echo (
'<p style="color: green">Ваше сообщение получено, спасибо!</p>');
      
$_POST['name'] = $_POST['contact'] = $_POST['message'] = '';
}
}
?>
<form method="POST">
<p>Ваше имя:</p>
<input name="name" value="<?=@$_POST['name'];?>">
<p>Контактная информация для связи с вами (icq, e-mail или номер телефона):</p>
<input name="contact" value="<?=@$_POST['contact'];?>">
<p>Ваше сообщение:</p>
<textarea name="message"><?=@$_POST['message'];?></textarea>
<p><input type="submit" value=" Отправить "></p>
</form>
Дальше если будут вопросы, обращайся!
Взагрузке.рф - Файлы для людей
Ищу художника или веб-дизайнера для создания браузерной онлайн игры! icq 340-289-851
kpachbiu вне форума Ответить с цитированием
Старый 25.10.2010, 11:45   #4
batusai
 
Регистрация: 23.10.2010
Сообщений: 9
По умолчанию

Спасибо, kpachbiu !

На днях обязательно попробую реализовать и потом отпишусь.
Не из обычных людей тот, которого манит дерево без цветов.
batusai вне форума Ответить с цитированием
Старый 29.10.2010, 01:13   #5
batusai
 
Регистрация: 23.10.2010
Сообщений: 9
Смущение

Итак, попробовал способ, который мне предложили..однако ничего не вышло! добавил просто код который мне предложили, чтобы данные и в бд записывались и на почту отправлялись. Но на почту ничего не приходит. Вот код файла с формой и обработчика!

Форма:
Код HTML:
 <form action="zayavki.php" method="post" name="contacts">
         
         <input name="FIO" type="text" size="50" maxlength="80">
        
         <input name="mail" type="text" size="30" maxlength="80">
       
         <label>Пожалуйста, введите Ваш телефон:</label>
        
         <input name="mobile" type="text" size="30" maxlength="80">
        
         <textarea name="opisanie" cols="80"  rows="15"></textarea>
      
         <input name="submit" type="submit" id="submit" >
              
        </form>
Обработчик:

PHP код:
<?php 
if (isset($_POST['FIO'])) { $FIO $_POST['FIO'];}
    if (isset(
$_POST['mail'])) { $mail $_POST['mail'];}
    if (isset(
$_POST['mobile'])) { $mobile $_POST['mobile'];}
    if (isset(
$_POST['opisanie'])) { $opisanie $_POST['opisanie'];}

  
     if ((
$FIO != '') && ($mail != '') && ($mobile != '') && ($opisanie != ''))
      {
         
$result2 mysql_query("INSERT INTO ...");
$name = @ trim ($_POST['FIO']);
$mail = @ trim ($_POST['mail']);
$mobile = @ trim ($_POST['mobile']);
$message = @ trim ($_POST['opisanie']);
mail ("koblents@inbox.ru",
      
"Сообщение с сайта (отправитель: $name)",
      
"$message \n\n Контакты: \n $mobile");
       
       
              if (
$result2 == 'true')
         {
                       

             echo
"<p class='zayavka'>Ваша заявка принята!</p>";
             }
}
Не из обычных людей тот, которого манит дерево без цветов.
batusai вне форума Ответить с цитированием
Старый 29.10.2010, 10:03   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Тут нужно сначала чётко определить проблему - либо mail(), либо сам скрипт.

Для начала - проверьте,работает ли у вас на вашем хостинге функция mail().
Для этого вставьте в свой скрипт в любом месте простую отправку письма,без данных из формы:
PHP код:
mail("koblents@inbox.ru""Test message""Test message text"); 
Если это отработает как нужно, и письмо прийдёт на почту - значит проблема в самом скрипте.
Который у вас весьма загадочен:
1.Сначала мы проверяем данные из формы на существование,и если они есть - определяем рад переменных из данных Формы ($FIO, $mail, $mobile, $opisanie):
PHP код:
if (isset($_POST['FIO'])) { $FIO $_POST['FIO'];} 
if (isset(
$_POST['mail'])) { $mail $_POST['mail'];} 
if (isset(
$_POST['mobile'])) { $mobile $_POST['mobile'];} 
if (isset(
$_POST['opisanie'])) { $opisanie $_POST['opisanie'];} 
2. Затем - если ВСЕ эти переменные не пусты ( != '') - мы снова переопреопределяем их же из тех же данных Формы (зачем,если уже определили,и проверили на пустоту?):
PHP код:
if (($FIO != '') && ($mail != '') && ($mobile != '') && ($opisanie != '')) 
      {
           
$name = @ trim ($_POST['FIO']); 
           
$mail = @ trim ($_POST['mail']); 
           
$mobile = @ trim ($_POST['mobile']); 
           
$message = @ trim ($_POST['opisanie']); 
Тут ключевой момент - в вашем скрипте функция mail() отрабатывает,только если не пусты переменные из п.1.
Вам нужно проверить - передаются ли данные в них.Самый простой способ - вывести эти переменные в браузер после их определения:
PHP код:
// ваш код
if (isset($_POST['FIO'])) { $FIO $_POST['FIO'];} 
if (isset(
$_POST['mail'])) { $mail $_POST['mail'];} 
if (isset(
$_POST['mobile'])) { $mobile $_POST['mobile'];} 
if (isset(
$_POST['opisanie'])) { $opisanie $_POST['opisanie'];}

// проверочный вывод
echo $FIO '<br/>';
echo 
$mail '<br/>';
echo 
$mobile '<br/>';
echo 
$opisanie '<br/>'
Ваша функция mail() будет срабатывать,только если вы увидите все четыре переменные.

PS: рекомендую сразу обезопасить все данные,которые вводит Пользователь.
Все данные из Формы нужно обработать функцией htmlspecialchars():
PHP код:
if (isset($_POST['FIO'])) { $FIO htmlspecialchars($_POST['FIO']);}
// и так все данные из формы 
Перед добавлением данных в вашу Базу Данных(если вы собираетесь это делать) - обработайте их функцией mysql_real_escape_string():
PHP код:
$result2 mysql_query("INSERT INTO `your_table` 
            (`name`, `mail`, `mobile`, `opisanie`) 
     VALUES ('" 
mysql_real_escape_string($name) . "', 
             '" 
mysql_real_escape_string($mail) . "', 
             '" 
mysql_real_escape_string($mobile) . "',
             '" 
mysql_real_escape_string($opisanie) . "'
)"
); 
Как вариант - проверяйте все данные из формы при помощи Регулярных выражений - это сложнее,зато надёжнее(вы однозначно получите только те данные,которые вам нужны).
Andkorol вне форума Ответить с цитированием
Старый 29.10.2010, 22:01   #7
batusai
 
Регистрация: 23.10.2010
Сообщений: 9
По умолчанию

Спасибо, Andkorol!

Да, код конечно мой избыточен) это я исправлю. Большое спасибо за советы насчет безопасности. А насчет функции mail() похоже хостингом она не поддерживается(протестировал согласно вашему совету). Написал в поддержку насчет этого. Скажите, а как можно по-другому реализовать отправку почты?

.. и еще вопрос, немного не в тему, но все же) в продолжение Ваших советов по поводу безопасности. После того, как мы ввели данные в форму и нажали отправить, обработчик все обработал, отправил данные в бд. И если на странице нажать обновить, то все данные опять отправляются в бд. Как сделать, чтобы это происходило только в первый раз?
Не из обычных людей тот, которого манит дерево без цветов.
batusai вне форума Ответить с цитированием
Старый 30.10.2010, 11:59   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Как сделать, чтобы это происходило только в первый раз?
Для этого проще всего сразу после удачной отправки письма и записи в Базу организовать релоад страницы-обработчика,ИЛИ (лучше) возврат на страницу с формой,и там выводить сообщение об успешной отправке информации + какая-то благодарность за участие.
Реализовать это можно при помощи функции header():
На странице-обработчике формы:
PHP код:
// после всех действий по отправке почты и записи в БД
// ДО любого вывода в браузер (см. описание функции header() )
header("Location: form.php?send=ok");// тут адрес вашей страницы с формой 
На странице с формой(form.php):
PHP код:
if(!empty($_GET['send']) && ($_GET['send'] == 'ok')){
    echo 
'Ваша информация принята.Благодарим за участие в нашем проекте!';

Таким образом - сразу после удачной отправки/записи в БД сразу же происходит автоматический выход со страницы-обработчика,что исключает возможность повторной отправки/записи в БД.
Цитата:
Скажите, а как можно по-другому реализовать отправку почты?
При помощи SMTP-протокола.Для этого чаще всего используют специальные PHP-классы(типа PHPMailer).
Вот статья по нему - для ознакомления:
Исчерпывающая инструкция по PHP Mailer – Все, что вам надо знать

Функцию mail() часто отключают на недорогих хостингах - с целью борьбы со спамерами.

Последний раз редактировалось Andkorol; 30.10.2010 в 12:09. Причина: Add PHPMailer
Andkorol вне форума Ответить с цитированием
Старый 08.11.2010, 14:20   #9
batusai
 
Регистрация: 23.10.2010
Сообщений: 9
По умолчанию

Спасибо, Andkorol. Ваши советы очень помогли.
Не из обычных людей тот, которого манит дерево без цветов.
batusai вне форума Ответить с цитированием
Старый 14.12.2010, 21:23   #10
4ok
Coder.
Пользователь
 
Аватар для 4ok
 
Регистрация: 29.11.2010
Сообщений: 33
По умолчанию

Всем добрый вечер! У меня проблема с отправкой сообщения... Все проверил.. Но не работает даже самый приметивный скрипт:
<?php
// Send email
if($_POST['do']) {
mail("sandimas@yandex.ru", "Test message", "Test message text");
}
?>

Ошибка при этом -
Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in mail.php on line 4

Почему так?? Сервер почтовый стоит... Кто чем сможет - помогите плз!

icq - 587615807

Последний раз редактировалось 4ok; 14.12.2010 в 23:03. Причина: дополнение
4ok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу написать обработку для формы обратной связи..(( lsidl PHP 6 16.04.2010 17:28
загрузка файла без формы обратной связи ... master3763 PHP 10 04.01.2010 00:54
Форма обратной связи belvision PHP 5 10.11.2008 16:57
Создание обратной связи на сайте. Richard HTML и CSS 8 01.06.2007 08:32