1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Передача html формы (php скрипт)

Тема в разделе "Программирование", создана пользователем MuRDOC, 19.12.11.

  1. MuRDOC

    MuRDOC Участник

    334
    0
    Помогите решить проблемку пожалуйста. Есть простейшая html форма, нужно, чтобы после того как пользователь ее заполнит она отправлялась мне, желательно посредством почты. сама форма:
    <form method='post'> <span style="font-size: 30px;"><strong><span style="color:green";>Записаться в группу</span></span></span></p></strong>
    <div class='ctrlHolder style1'> <label><span style="color:black";><span style="font-size: 16px;">Введите имя:</label></span></span> <br /> <input name='' class='textInput' type='text' value=""> </div> <div class='ctrlHolder style1'> <label><span style="color:black";><span style="font-size: 16px;">Введите фамилию:</label></span></span> <br>
    <input name='' class='textInput' type='text' value=""> </div> <div class='ctrlHolder style1'> <label><span style="color:black";><span style="font-size: 16px;">Введите номер телефона:</label></span></span> <br>
    <input name='' class='textInput' type='text' value=""> </div><div class='ctrlHolder style1'> <div class="buttonHolder"> <button name="submit" type="submit" class="submitButton style1">Отправить</button> </div> </form> </div>

    ---------- Сообщение добавлено 19.12.2011 12:41 ----------

    Заюзал вот такой скрипт

    <?
    $to = "***@***.ru";
    mail($to,"$sub",$mes);
    echo "Ваше сообщение с темой $sub и текстом: $mes <br> отправлено<BR><center>
    <a href='http://www.*****.html'>Отправить ещё</a>";
    ?>

    Письмо приходит, но пустое... как бы это исправить????
     
    Последнее редактирование: 19.12.11
  2. dj_dantist

    dj_dantist Активный участник

    4.591
    0
    Корявый скрипт :frustrate Что сразу бросается в глаза - это незаконченные, оборванные
     
  3. MuRDOC

    MuRDOC Участник

    334
    0
    Просьба не судить строго, ибо это мой первый опыт в данном вопросе.

    А оборванные name никоим образом не влияют на отправку формы.
     
  4. sergogogo

    sergogogo Активный участник

    3.157
    0
    ну что ж , с первым опытом Вас! )))
     
  5. MuRDOC

    MuRDOC Участник

    334
    0
    Вот уж спасибо, однако проблема до сих пор не решена(
     
  6. sergogogo

    sergogogo Активный участник

    3.157
    0
    а вообще яшу-гугль не пробовали? там в разы больше спецов, чем здесь!!)))
    и HTML-код никогда вам ничего не будет передавать))) или подключать php-обработчик, или одним файлом - но тогда это будет php-файл
     
  7. MuRDOC

    MuRDOC Участник

    334
    0
    Ну я вообщето так и делаю...
     
  8. sergogogo

    sergogogo Активный участник

    3.157
    0
    форма на html
    <form method=post action=sent.php id="frmFeedback" enctype="multipart/form-data">
    <input name="name" type="text" value="Ваше имя" class="txt" />
    <input name="email" type="text" value="Ваш email" class="txt" />
    <input name="submit" type="submit" class="btn" value="ЗАКАЗ" />
    <input type="hidden" name="posted" value="1">
    </form>

    и файл sent.php (ложить в корень сайта!):

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Заказ</title>
    </head>
    <body>
    <?php
    if (isset($_POST['name'])) {$name = $_POST['name'];}
    if (isset($_POST['email'])) {$email = $_POST['email'];}
    if (empty($name))
    {
    echo "<b>Не указано имя!<p>";
    echo "<a href=zakaz.html>Вернуться к заполнению формы</a>";
    exit;
    }
    else
    if (empty($email))
    {
    echo "<b>Не указан e-mail!<p>";
    echo "<a href=zakaz.html>Вернуться к заполнению формы</a>";
    exit;
    }
    else
    $to = "000@mail.ru"; /*УКАЗАТЬ СВОЙ АДРЕС!*/
    $charset = "utf-8";
    $subject = "заказ";
    $message = "NAME: $name \nE-MAIL: $email";
    $send = mail ($to,$subject,$message);
    if ($send == 'true')
    {
    echo "<b>Спасибо за отправку вашего сообщения!<p>";
    echo "<a href=index.html>Нажмите,</a> чтобы вернуться на главную страницу";
    }
    else
    {
    echo "<p><b>Ошибка. Сообщение не отправлено!";
    }
    ?>
    </body>
    </html>

    все сохранять в кодировке utf-8 без BOM

    ---------- Сообщение добавлено 19.12.2011 13:37 ----------

    и еще в корень сайта такие файлы закинуть class.phpmailer.php и class.smtp.php
    стандартные, в гугле точно были)))))
     
  9. dj_dantist

    dj_dantist Активный участник

    4.591
    0
    Да неужели? :hah:

    sergogogo, выкладывайте ваши ЯД и(или) WM для выражения ТС своей благодарности Вам :d:d
     
  10. sergogogo

    sergogogo Активный участник

    3.157
    0
    а он согласен? блин, класс, если согласен!! только поболее-поболее пусть дает! и вы тоже, dj_dantist, уж будьте любезны!)))

    как раз надо огненной воды прикупить, без нее нынче никак в html - собственно, вышесказанное все под градусом псыкнул!!)))
     
  11. Розмарин

    Розмарин Участник

    211
    0
    1. Старайся не использовать функцию mail(). Кидай через smtp и сокеты. А письмо приходит пустое потому что ты в нем скорее всего не передаешь mеssage текст. То есть переременная $mess у тебя пустая.

    2. Это точно работает, только под форму под свою отредактируй. И не забудь апачц включить в extensions сокеты.

    <?php
    function show_form(){
    }


    function complete_mail()
    {
    // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
    $_POST['title'] = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
    $_POST['mess'] = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
    $_POST['name'] = substr(htmlspecialchars(trim($_POST['name'])), 0, 30);
    $_POST['tel'] = substr(htmlspecialchars(trim($_POST['tel'])), 0, 30);
    $_POST['email'] = substr(htmlspecialchars(trim($_POST['email'])), 0, 50);
    // если не заполнено поле "Имя" - показываем ошибку 0
    if (empty($_POST['name'])) {
    output_err(0);
    }
    // если неправильно заполнено поле email - показываем ошибку 1
    if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))
    {
    output_err(1);
    }
    // если не заполнено поле "Сообщение" - показываем ошибку 2
    if(empty($_POST['mess']))
    {
    output_err(2);
    }
    // создаем наше сообщение
    $mess = '
    Имя отправителя:'.$_POST['name'].'
    Контактный телефон:'.$_POST['tel'].'
    Контактный email:'.$_POST['email'].'
    '.$_POST['mess'];

    header('Content-Type: text/plain;');
    error_reporting(E_ALL ^ E_WARNING);
    ob_implicit_flush();

    $address = 'smtp.examle.com'; // адрес smtp-сервера
    $port = 25; // порт (стандартный smtp - 25)

    $login = 'login'; // логин к ящику
    $pwd = 'password'; // пароль к ящику

    $from = 'login@examle.com'; // адрес отправителя
    $to = 'someuser@someserver.ru'; // адрес получателя

    $subject = $_POST['title']; // тема сообщения
    $message = $mess; // текст сообщения

    try {

    // Создаем сокет
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket < 0) {
    throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
    }

    // Соединяем сокет к серверу
    //echo 'Connect to \''.$address.':'.$port.'\' ... ';
    $result = socket_connect($socket, $address, $port);
    if ($result === false) {
    throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
    } else {
    // echo "OK\n";
    }

    // Читаем информацию о сервере
    read_smtp_answer($socket);

    // Приветствуем сервер
    write_smtp_response($socket, 'EHLO '.$login);
    read_smtp_answer($socket); // ответ сервера

    // echo 'Authentication ... ';

    // Делаем запрос авторизации
    write_smtp_response($socket, 'AUTH LOGIN');
    read_smtp_answer($socket); // ответ сервера

    // Отравляем логин
    write_smtp_response($socket, base64_encode($login));
    read_smtp_answer($socket); // ответ сервера

    // Отравляем пароль
    write_smtp_response($socket, base64_encode($pwd));
    read_smtp_answer($socket); // ответ сервера

    // echo "OK\n";
    // echo "Check sender address ... ";

    // Задаем адрес отправителя
    write_smtp_response($socket, 'MAIL FROM:<'.$from.'>');
    read_smtp_answer($socket); // ответ сервера

    // echo "OK\n";
    // echo "Check recipient address ... ";

    // Задаем адрес получателя
    write_smtp_response($socket, 'RCPT TO:<'.$to.'>');
    read_smtp_answer($socket); // ответ сервера

    // echo "OK\n";
    // echo "Send message text ... ";

    // Готовим сервер к приему данных
    write_smtp_response($socket, 'DATA');
    read_smtp_answer($socket); // ответ сервера

    // Отправляем данные
    $message = "To: $to\r\n".$message; // добавляем заголовок сообщения "адрес получателя"
    $message = "Subject: $subject\r\n".$message; // заголовок "тема сообщения"
    write_smtp_response($socket, $message."\r\n.");
    read_smtp_answer($socket); // ответ сервера

    //echo "OK\n";
    // echo 'Close connection ... ';

    // Отсоединяемся от сервера
    write_smtp_response($socket, 'QUIT');
    read_smtp_answer($socket); // ответ сервера

    //echo "OK\n";

    } catch (Exception $e) {
    echo "\nError: ".$e->getMessage();
    }

    if (isset($socket)) {
    socket_close($socket);
    }// Функция для чтения ответа сервера. Выбрасывает исключение в случае ошибк
    //------------------------------------------------------//
    header("Content-Type: text/html; charset=Windows-1251");
    echo "<p align=\"center\"><b>Спасибо! Ваша заявка отправлена. Вы будете переведены на главную страницу</b></p> ";
    }

    function read_smtp_answer($socket) {
    $read = socket_read($socket, 1024);

    if ($read{0} != '2' && $read{0} != '3') {
    if (!empty($read)) {
    throw new Exception('SMTP failed: '.$read."\n");
    } else {
    throw new Exception('Unknown error'."\n");
    }
    }
    }

    // Функция для отправки запроса серверу
    function write_smtp_response($socket, $msg) {
    $msg = $msg."\r\n";
    socket_write($socket, $msg, strlen($msg));
    }


    function output_err($num)
    {
    $err[0] = 'ОШИБКА! Не введено имя.';
    $err[1] = 'ОШИБКА! Неверно введен e-mail.';
    $err[2] = 'ОШИБКА! Не введено сообщение.';
    echo '<p>'.$err[$num].'</p>';
    show_form();
    header( "Refresh: 2; url=index.php " );
    exit();
    }

    if(!empty($_POST['submit']))
    complete_mail();
    else show_form();
    header( "Refresh: 3; url=index.php " );
    ?>
     
  12. E13

    E13 Модератор

    6.150
    33
    Розмарин, а что c mail() не так?
     
  13. UranUs

    UranUs Активный участник

    2.823
    1
    Розмарин,
    E13,
    фуууу... некропостеры в теме!!
     
  14. E13

    E13 Модератор

    6.150
    33
    UranUs, не я первый начал! ^__^ Но интересно же! Я про mail только знаю, что им не рекомендуется при множественной рассылке пользоваться. Вдруг ещё что есть, полезно же спросить на всякий случай!
     
  15. Розмарин

    Розмарин Участник

    211
    0
    E13, Сами ответили на свой вопрос. Именно этим и плоха mail(). И еще ее не все хостинги поддерживают (по крайней мере бесплатные). Так что в поисках универсальности лучше пользоваться все таки более низкоуровневыми моделями (ну как то так).

    UranUs,
    Блин) не смотрел на дату) Бываит))
     
  16. icefrog

    icefrog Активный участник

    591
    0
    Хороший пример регулярки :iq:
     
  17. E13

    E13 Модератор

    6.150
    33
    icefrog, это который вот?

    Он с ашыпками.

    ---------- Сообщение добавлено 11.06.2012 13:46 ----------

    Розмарин,
    Вы произнесли слова "бесплатный хостинг" так, будто в них есть что-то хорошее :). Но вообще да, в каких-то рамках лучше низкоуровневый подход. Разве что mail() быстрее работать должен :)
     
  18. icefrog

    icefrog Активный участник

    591
    0
    E13, он не только с ошибками, но и с потенциальной дырой)))
     
  19. E13

    E13 Модератор

    6.150
    33
    icefrog, а расскажете подробнее?
     
  20. icefrog

    icefrog Активный участник

    591
    0
    E13 , данное регулярное выражение не обрабатывает начало и конец строки, в следствии этого после введенных по формату данных можно написать любой произвольный код вида
    Для примера цитирую код с явно представленным значением вместо значения из POST
     
  21. E13

    E13 Модератор

    6.150
    33
    icefrog, да, про начало-конец я что-то не подумал :).