[Помогите]ЧТо делаю не так в скрипте отправки сообщений

Тема в разделе "PHP", создана пользователем ewolwer, 27 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ewolwer

    ewolwer

    Регистр.:
    15 окт 2008
    Сообщения:
    240
    Симпатии:
    58
    Вообщем столкнулся с такой ситуёвиной, сбалабенил тут одну страичку, и нужно сделать форму обратной связи, помоему так это называется, открывается страничка в которой нужно заполнить разные данные, потом отправить и мне на почту приходит то что было заполнено. вообщем нашел вот такой вот скриптец:
    zakaz.php
    HTML:
    <form action="zakaz_obrab.php" method="post" name="form_com">
    <p class='dob_comm'><label>ФИО:<BR></label>
    <input name="author" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Ваш телефон:<BR></label>
    <input name="telefon" type="text" size="30" maxlength="40"></p>
    <p class='dob_comm'><label>Удобное время звонка:<BR></label>
    <input name="time" type="text" size="30" maxlength="40"></p>
    <p class='dob_comm'><label>Комментариии:<BR>
    <textarea name="text" cols="50" rows="4"></textarea></label></p>
    <p><input name="sub_com" type="submit" value="Отправить" class="button" title="Нажмите, чтобы отправить"></p>
    </form>
    zakaz_obrab.php
    PHP:
    <?php
    if (isset($_POST['author'])) {$author $_POST['author'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['telefon'];}
    if (isset(
    $_POST['time'])) {$time $_POST['time'];}
    if (isset(
    $_POST['text'])) {$text $_POST['text'];}
    if (isset(
    $_POST['sub_com'])) {$sub_com $_POST['sub_com'];}

    if (isset(
    $sub_com))
    {
    if (isset(
    $author)) {trim($author);}
    else {
    $author "";}
    if (isset(
    $telefon)) {trim($telefon);}
    else {
    $telefon "";}
    if (isset(
    $time)) {trim($time);}
    else {
    $time "";}
    if (isset(
    $text)) {trim($text);}
    else {
    $text "";}
    if (empty(
    $author) or empty($telefon) or empty($time) or empty($text))
    {exit(
    "<center><h2><BR><BR><BR><BR><BR>Заполните все поля!</h2></center>");}

    /* Обрабатываем переменные спец. функциями, чтобы предотвратить атаки злоумышленников */
    $author stripslashes($author);
    $text stripslashes($text);
    $author htmlspecialchars($author);
    $text htmlspecialchars($text);
    $telefon stripslashes($telefon);
    $time stripslashes($time);
    $telefon htmlspecialchars($telefon);
    $time htmlspecialchars($time);
    /* Отправляем информацию */

    $subject "Заявка";
    $header="Content-type: text/html; charset=\"windows-1251\"";
    $header.="From: From <from@mail.ru>";
    $header.="Subject: ".$subject;
    $header.="Content-type: text/html; charset=\"windows-1251\"";
    $address "ewolwer.seo@gmail.com";
    $message "<body>
    <u>Имя:</u><em><b> - "
    .$author."</b></em><br />
    <u>E-mail:</u><em><b> - "
    .$telefon."</b></em><br />
    <u>Удобное время звонка:</u><em><b> - "
    .$time."</b></em><br />
    <u>Сообщение:</u><em><b> - "
    .$text."</b></em>
    </body>"
    ;
    mail ($address,$subject,$message,$header);
    echo 
    "<html><head>
    <meta http-equiv='Refresh' content='3; URL=page.html'>
    </head></html>
    <center><h2><BR><BR><BR><BR><BR>Ваша заявка была успешно отправлена!</h2><BR>Через несколько секунд Вы будете автоматически перемещены на главную страницу сайта.</center>"
    ;
    }
    ?>
    Мне нужно было переделать его под свои свои поля, вот что получилось:
    zakaz.php
    HTML:
    <form action="zakaz_obrab.php" method="post" name="form_com">
    <p class='dob_comm'><label>ФИО:<BR></label>
    <input name="author" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Серия и номер паспорта:<BR></label>
    <input name="passport" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Дата рождения(дд.мм.гггг):<BR></label>
    <input name="rozhden" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Ваш E-mail:<BR></label>
    <input name="mail" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Фактический адрес:<BR></label>
    <input name="fakadres" type="text" size="30" maxlength="240"></p>
    <p class='dob_comm'><label>Город:<BR></label>
    <input name="city" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Индекс:<BR></label>
    <input name="indeks" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Страна:<BR></label>
    <input name="strana" type="text" size="30" maxlength="140"></p>
    <p class='dob_comm'><label>Мобильный телефон телефон:<BR></label>
    <input name="telefon" type="text" size="30" maxlength="40"></p>
    <p><input name="sub_com" type="submit" value="Отправить" class="button" title="Нажмите, чтобы отправить"></p>
    </form>
    zakaz_obrab.php
    PHP:
    <?php
    if (isset($_POST['author'])) {$author $_POST['author'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['passport'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['rozhden'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['mail'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['fakadres'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['city'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['indeks'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['strana'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['telefon'];}
    if (isset(
    $_POST['sub_com'])) {$sub_com $_POST['sub_com'];}
    if (isset(
    $sub_com))
    {
    if (isset(
    $author)) {trim($author);}
    else {
    $author "";}
    if (isset(
    $passport)) {trim($passport);}
    else {
    $passport "";}
    if (isset(
    $rozhden)) {trim($rozhden);}
    else {
    $rozhden "";}
    if (isset(
    $mail)) {trim($mail);}
    else {
    $mail "";}
    if (isset(
    $fakadres)) {trim($fakadres);}
    else {
    $fakadres "";}
    if (isset(
    $city)) {trim($city);}
    else {
    $city "";}
    if (isset(
    $indeks)) {trim($indeks);}
    else {
    $indeks "";}
    if (isset(
    $strana)) {trim($strana);}
    else {
    $strana "";}
    if (isset(
    $telefon)) {trim($telefon);}
    else {
    $telefon "";}


    /* Обрабатываем переменные спец. функциями, чтобы предотвратить атаки злоумышленников */
    $author stripslashes($author);
    $author htmlspecialchars($author);
    $passport stripslashes($passport);
    $passport htmlspecialchars($passport);
    $rozhden stripslashes($rozhden);
    $rozhden htmlspecialchars($rozhden);
    $mail stripslashes($mail);
    $mail htmlspecialchars($mail);
    $fakadres stripslashes($fakadres);
    $fakadres htmlspecialchars($fakadres);
    $city stripslashes($city);
    $city htmlspecialchars($city);
    $indeks stripslashes($indeks);
    $indeks htmlspecialchars($indeks);
    $strana stripslashes($strana);
    $strana htmlspecialchars($strana);
    $telefon stripslashes($telefon);
    $telefon htmlspecialchars($telefon);
    /* Отправляем информацию */

    $subject "Регистрация на сайте";
    $header="Content-type: text/html; charset=\"windows-1251\"";
    $header.="From: From <from@mail.ru>";
    $header.="Subject: ".$subject;
    $header.="Content-type: text/html; charset=\"windows-1251\"";
    $address "email@gmail.com";
    $message "<body>
    <u>ФИО:</u><em><b> - "
    .$author."</b></em><br />
    <u>Серия и номер паспорта:</u><em><b> - "
    .$passport."</b></em><br />
    <u>Дата рождения:</u><em><b> - "
    .$rozhden."</b></em><br />
    <u>Ваш E-mail:</u><em><b> - "
    .$mail."</b></em><br />
    <u>Фактический адрес:</u><em><b> - "
    .$fakadres."</b></em><br />
    <u>Город:</u><em><b> - "
    .$city."</b></em><br />
    <u>Индекс:</u><em><b> - "
    .$indeks."</b></em><br />
    <u>Страна:</u><em><b> - "
    .$strana."</b></em><br />
    <u>Мобильный телефон:</u><em><b> - "
    .$telefon."</b></em><br />

    </body>"
    ;
    mail ($address,$subject,$message,$header);
    echo 
    "<html><head>
    <meta http-equiv='Refresh' content='3; URL=page.html'>
    </head></html>
    <center><h2><BR><BR><BR><BR><BR>Ваша заявка была успешно отправлена!</h2><BR>Через несколько секунд Вы будете автоматически перемещены на главную страницу сайта.</center>"
    ;
    }
    ?>
    Скрипт изначальный рабочий, письма отправляет. После добавления своих полей, при нажатии кнопки отправить пишет заполните все поля. Хотя вроде бы все были заполнены. После этого убрал проверку на заполненность полей и письмо отправилось, Но все поля которые я ввёл были пустыми, а те что были изначально в скрипте - заполнены всё ок.
    Вообщем даже не знаю где ошибся, может как то поля по другому добавлять нужно было т.к. в этих полях могут быть и цифры и буквы и знаки препиная...или же где то чего то не учел...помогите пжста :) думаю задача не сильно сложная для тех кто сталкивался с таким :) заранее спасибо!
    пысы:
    И если кто решит мою проблемку, подскажите сразу как еще в оправку включить к примеру вопрос с тремя овтетами, напротив ответов чекбоксы, только те, которых несколько выбрать можно а не только один :)

    Добавлено через 21 минуту
    увидел ошибку в zakaz_obrab.php
    PHP:
    if (isset($_POST['author'])) {$author $_POST['author'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['passport'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['rozhden'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['mail'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['fakadres'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['city'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['indeks'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['strana'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['telefon'];}
    if (isset(
    $_POST['sub_com'])) {$sub_com $_POST['sub_com'];} 
    исправил на
    PHP:
    if (isset($_POST['author'])) {$author $_POST['author'];}
    if (isset(
    $_POST['author'])) {$author $_POST['author'];}
    if (isset(
    $_POST['passport'])) {$passport $_POST['passport'];}
    if (isset(
    $_POST['rozhden'])) {$rozhden $_POST['rozhden'];}
    if (isset(
    $_POST['mail'])) {$mail $_POST['mail'];}
    if (isset(
    $_POST['fakadres'])) {$fakadres $_POST['fakadres'];}
    if (isset(
    $_POST['city'])) {$city $_POST['city'];}
    if (isset(
    $_POST['indeks'])) {$indeks $_POST['indeks'];}
    if (isset(
    $_POST['strana'])) {$strana $_POST['strana'];}
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['telefon'];}
    if (isset(
    $_POST['sub_com'])) {$sub_com $_POST['sub_com'];}
    if (isset(
    $sub_com))
    в письме всё равно поля эти пустые приходят :(
    После последних исправлений всё заработало :)
    осталось только одно, подсказать как добавить вопрос с чекбоксами, и что бы соответственно в письме просто как один два или три варианта в конце прописано было :)
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    У тебя ошибка в проверке. Смотри что ты делаешь:
    PHP:
    if (isset($_POST['telefon'])) {$telefon $_POST['passport'];} 
    ........
    if (isset(
    $_POST['telefon'])) {$telefon $_POST['telefon'];}
    Здесь у тебя поочередно переменной telefon присваиваются значения из $_POST, т.е. эта переменная просто так меняет свое значение 10 раз.
    Дальще идет
    PHP:
    if (isset($author)) {trim($author);} 
    else {
    $author "";}
    ....
    if (isset(
    $telefon)) {trim($telefon);}
    В этом блоке у тебя будет существовать только $telefon, которая менялась не понятно зачем 10 раз, и следовательно функция trim обрежет пробелы только у нее. Остальные переменные выражением типа else {$city = "";} станут просто пустыми строками.
    Поэтому в 1-м блоке тебе нужно было сдклать так (покажу на 2-х переменных)
    PHP:
    if (isset($_POST['author'])) {$author $_POST['author'];} 
    if (isset(
    $_POST['passport'])) {$passport $_POST['passport'];} 
    if (isset(
    $_POST['rozhden'])) {$rozhden $_POST['rozhden'];}
    ........
    А вообще ты видишь, что потом ко всем этим переменным применяетмся дополнительное перобразование
    PHP:
    ($author stripslashes($author);  
    $author htmlspecialchars($author);
    ....
    Поэтому лучше делать так:
    PHP:
    if (isset($_POST['telefon'])) {
       
    $telefon htmlspecialchars(stripslashes(trim($_POST['telefon'])));

    И еще. раз эти переменные участвуют только в формировании $message для функции mail() , то htmlspecialchars+stripslashes применять к ним вообще не стоит. Они нужны только если ты их захочешь показать в браузере. $address также не стоит ими преобразовывать.
     
  3. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    код обработки post-запроса чрезмерно объемный, проще так сделать

    PHP:
    isset($_POST['sub_com']) OR exit;
    function 
    sm_2(&$val) { $val=htmlspecialchars(stripslashes(trim($val))); }
    array_walk($_POST,'sm_2');
    extract($_POST);
    дополненная форма, вопросы с чекбоксами в аттаче
     

    Вложения:

    • mail.zip
      Размер файла:
      1,1 КБ
      Просмотров:
      6
    ewolwer нравится это.
  4. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Конечно большой, конечно не оптимальный, конечно проверки слабые и много еще чего. Тут вопрос в том,чтобы человек не запутался, и хоть как-то узнал в приведенном скрипте первоисточник.
     
  5. ewolwer

    ewolwer

    Регистр.:
    15 окт 2008
    Сообщения:
    240
    Симпатии:
    58
    pitkina, Cпасибище громадное! Чутка подправил выдачу того что прийдёт в письме по чекбоксам было :
    PHP:
    <u>Ответы на вопросы(помечены 'OK'): - {$question1}, - {$question2}, - {$question4}</u>
    исправил на :
    PHP:
    <u>Ответы на вопросы:</u><em><b> - ".$question1."</b></em><br /><em><b> - ".$question2."</b></em><br /><em><b> - ".$question3."</b></em><br />
    И всё приходит симпотичным списком. Так что еще раз спасибо!
     
  6. ewolwer

    ewolwer

    Регистр.:
    15 окт 2008
    Сообщения:
    240
    Симпатии:
    58
    А еще один вопрос. При нажатии на отправить, открывается та же страница с формами и написано вверху спасибо ваще сообщение отправлено, я так понимаю срабатывает эта функция
    PHP:
    <? $_POST['sub_com'] AND print "<meta http-equiv='Refresh' content='3; URL=page.html'><b>Спасибо, Ваше сообщение отправлено</b>" ?>
    а что в ней поправить что при нажатии на отправить открывалась эта же страница но уже без форм для заполнения а просто было спасибо ваше сообщение отправлено?
     
  7. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    добавить перед <form ... >
    PHP:
    <? if(!isset($_POST['sub_com'])): ?>
    после </form>
    PHP:
    <? endif; ?>
     
    ewolwer нравится это.
Статус темы:
Закрыта.