Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/91: Рейтинг темы: голосов - 91, средняя оценка - 4.79
1 / 1 / 0
Регистрация: 14.02.2012
Сообщений: 22

Как можно обнулить форму после отправки?

22.03.2012, 22:09. Показов 17653. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Есть форма ввода данных с аттачем в ПХП-файле:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
......
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" id="formID" class="formular" name="formular">
<div><input type="text" size="50" name="name" id="name" placeholder="Имя:" class="validate[required,length[0,100]] text-input" /></div>
<div><input type="email" size="50" name="email" id="email" placeholder="@" class="validate[required,custom[email]] text-input" /></div>
<div><input type="subject" size="50" name="subject" id="subject" placeholder="Тема:" class="validate[required,length[0,40]] text-input" /></div>
     <input type="text" id="fileName" class="file_input_textbox" placeholder="Файла нет" readonly />
<div class="file_input_div">
     <input type="button" value="Прикрепить" class="file_input_button" />
     <input type="file" name="file"  class="file_input_hidden" onchange="javascript: document.getElementById('fileName').value = this.value" />
</div>
<div><textarea rows="5" cols="50" name="mess" id="mess" placeholder="Сообщение:" class="validate[required,length[6,300]]"></textarea></div>
     <input type="submit" class="button1" value="Отправить" name="submit" />
     <input type="reset" class="button2" name="button2" id="button2" value="Отменить" />
</form> 
......
и в этом же файле( вверху ) скрипт отправки письма:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
                
if(isset($_POST['submit'])) { /***---Если форма отправлена---***/
    function send_mail()
        { $name = htmlspecialchars($_POST['name']); }
        { $subject = htmlspecialchars($_POST['subject']); }
        { $email = htmlspecialchars($_POST['email']); }
        $style   = 'font-family:Verdana, Arial, Helvetica, sans-serif; font-size : 13px; color:#474747;padding:6px;border-bottom:1px solid #cccccc;' ;
        $style2  = 'font-family:Verdana, Arial, Helvetica, sans-serif; font-size : 13px; color:#474747;padding:10px;border-bottom:1px solid #cccccc;' ;
        $message = 
            "<table cellspacing=0 cellpadding=0 border=0 >
                <tr><td valign=top style='{$style};width:33%;border-right:1px solid #cccccc;'><b>Имя пославшего:    </b> </td> <td valign=top style='{$style};'>" .$_POST['name']. "</td></tr> 
                <tr><td valign=top style='{$style};width:33%;border-right:1px solid #cccccc;'><b>Электронный адрес: </b> </td> <td valign=top style='{$style};'>" .$_POST['email']. "</td></tr> 
                <tr><td valign=top style='{$style};width:33%;border-right:1px solid #cccccc;'><b>Тема:              </b> </td> <td valign=top style='{$style};'>" .$_POST['subject']. "</td></tr>
                <tr><td valign=top style='{$style};width:33%;border-right:1px solid #cccccc;'><b>Сообщение:        </b> </td> <td valign=top style='{$style2};width:600px; line-height: 27px;'>" .$_POST['mess']. "</td></tr>
            </table><br>";
    include "class.phpmailer.php";// подключаем класс
    if(empty($_POST['name'])||empty($_POST['email'])||empty($_POST['subject']))/***--------Do Validations---------***/
        { $errors .= "\n Name, Email, Subject are required fields. "; }
    if(IsInjected($visitor_email))
        { $errors .= "\n Bad email value!"; }
                        //send the email 
    if(empty($errors))
        {
        $mail = new PHPMailer();
        $mail->From = $_POST['email'];
        $mail->FromName = $_POST['name'];
        $mail->AddAddress('deeand7@gmail.com');
        $mail->IsHTML(true);
        $mail->Subject =  $_POST['subject']." | Письмо пришло с сайта БЛА-БЛА.РУ";
        if(isset($_FILES['file']))
        { if($_FILES['file']['error'] == 0)
        { $mail->AddAttachment($_FILES['file']['tmp_name'],$_FILES['file']['name']); }
        }
        $mail->Body = $message;
        if (!@$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
        {
        echo "<script language='JavaScript'>alert('Спасибо ".$_POST['name']." за использование контактной формы! Ваш email был отправлен и я свяжусь с Вами в кратчайшие сроки.')</script>";
        }
        if (!empty($_POST['submit'])) send_mail();
    }}
    
    function IsInjected($str){
        $injections = array('(\n+)','(\r+)','(\t+)','(%0A+)','(%0D+)','(%08+)','(%09+)');
        $inject = join('|', $injections); $inject = "/$inject/i";
        if(preg_match($inject,$str)){ return true; }
        else{ return false; } }
?>
......
В общем, проблема заключается в том, что после отправки формы, при обновлении страницы, письмо повторно отправляется.
Не могу разобраться, как сделать обнуление формы и как применить GET-редирект.

Может кто поделится дельным советом?

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2012, 22:09
Ответы с готовыми решениями:

Как очистить форму после отправки?
Всем доброго дня и приятных выходных. Ситуация следующая: пишу простую форму с отправкой данных на почту. Проблема заключается в том,...

Скрыть форму после отправки
Привет всем! Подскажите пожалуйста что нужно изменить в этом коде чтобы после отправки форма скрывалась? Сейчас после отправки...

Скрыть форму после отправки
Помогите пожалуйста... никак не дойду до решения того как скрыть форму после отправки &lt;!DOCTYPE html&gt; &lt;html...

16
 Аватар для iLoveGoogle
18 / 18 / 2
Регистрация: 27.09.2011
Сообщений: 155
22.03.2012, 22:57
Создай сессию которая в значении держит false если почта не была отправлена пользователем или true если почта отправлена пользователю;Перед каждой отправкой почты проверяешь значение сессии - если значение true то почту не отправляешь если false то отправляешь.
0
22 / 11 / 1
Регистрация: 17.03.2012
Сообщений: 24
22.03.2012, 23:13
Если письмо отправлено успешно, просто делай редирект на эту же страницу.

PHP
1
2
3
4
if (!empty($_POST['submit'])){
    send_mail();
    header("Location: $_SERVER['PHP_SELF']"); //или название страницы
}
0
1 / 1 / 0
Регистрация: 14.02.2012
Сообщений: 22
22.03.2012, 23:30  [ТС]
Цитата Сообщение от munris Посмотреть сообщение
Если письмо отправлено успешно, просто делай редирект на эту же страницу.

PHP
1
2
3
4
if (!empty($_POST['submit'])){
    send_mail();
    header("Location: $_SERVER['PHP_SELF']"); //или название страницы
}
Огромное спасибо! Всё разабрался! Этот пример подошёл! Ещё раз спасибо.

Тема закрыта
0
1 / 1 / 2
Регистрация: 10.06.2011
Сообщений: 14
23.03.2012, 14:36
Цитата Сообщение от munris Посмотреть сообщение
Если письмо отправлено успешно, просто делай редирект на эту же страницу.

PHP
1
2
3
4
if (!empty($_POST['submit'])){
    send_mail();
    header("Location: $_SERVER['PHP_SELF']"); //или название страницы
}
У меня выдаёт опредупреждение: "Warning: Cannot modify header information - headers already sent......"
В каком месте скрипта нужно ставить header()?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
23.03.2012, 14:48
хидеры можно юзають перед выводом чего либо
0
0 / 0 / 0
Регистрация: 20.09.2010
Сообщений: 26
23.03.2012, 14:56
Цитата Сообщение от crautcher Посмотреть сообщение
хидеры можно юзають перед выводом чего либо
здесь есть еще люди для онлайна? Помогите с кодом
0
1 / 1 / 0
Регистрация: 14.02.2012
Сообщений: 22
23.03.2012, 15:45  [ТС]
Цитата Сообщение от Riter Посмотреть сообщение
У меня выдаёт опредупреждение: "Warning: Cannot modify header information - headers already sent......"
В каком месте скрипта нужно ставить header()?
Я поставил вот этот кусок кода здесь
PHP
1
2
3
4
5
...
$mail->Body = $message;
  if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
  if (!empty($_POST['submit'])) {send_mail(); header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);}
...
Единственно, сейчас не отображается сообщение ( echo) об отправки
0
 Аватар для shafl
258 / 147 / 37
Регистрация: 24.01.2011
Сообщений: 427
23.03.2012, 15:49
Ну закреплено же в голове всего раздела: Что означает предупреждение "headers already sent"
0
22 / 11 / 1
Регистрация: 17.03.2012
Сообщений: 24
23.03.2012, 16:37
Цитата Сообщение от deeand Посмотреть сообщение
Единственно, сейчас не отображается сообщение ( echo) об отправки
Ну да. После редиректа, скрипт начинает выполнятся сначала.
Можно просто передавать какое-нибудь значение(типа mail.php?send=ok) и через $_GET['send'] проверять, если есть, то выводить что сообщение успешно отправлено.
0
1 / 1 / 0
Регистрация: 14.02.2012
Сообщений: 22
23.03.2012, 16:41  [ТС]
Цитата Сообщение от munris Посмотреть сообщение
Ну да. После редиректа, скрипт начинает выполнятся сначала.
Можно просто передавать какое-нибудь значение(типа mail.php?send=ok) и через $_GET['send'] проверять, если есть, то выводить что сообщение успешно отправлено.
Спасибо!
0
1 / 1 / 2
Регистрация: 10.06.2011
Сообщений: 14
23.03.2012, 18:06
Цитата Сообщение от shafl Посмотреть сообщение
Ну закреплено же в голове всего раздела: Что означает предупреждение "headers already sent"
Это понятно, а как поступить если обработка и вывод сообщений происходит в середине HTML кода?
Обьясню.
Дело в том что оболочка сайта одна для всех страниц, а "начинка" вызывается include-ом.
Для каждой вложенной страницы свой PHP-файл, в том числе и форум вместе с обработчиком.
При обновлении страницы (после отправки сообщения), оно дублируется. Не смертельно, но не приятно...
0
1 / 1 / 0
Регистрация: 14.02.2012
Сообщений: 22
23.03.2012, 21:03  [ТС]
munris

Что-то как-то не стыкуется Может быть ещё какую-нибудь идейку подкините либо инструкцию (желательно поподробней)?
0
22 / 11 / 1
Регистрация: 17.03.2012
Сообщений: 24
23.03.2012, 21:59
PHP
1
2
3
4
5
6
7
8
9
if (!empty($_POST['submit'])){
    send_mail();
    header("Location: namepage.php?mail=ok");
}
 
//в начало странице вставляешь:
if(isset($_GET['mail']) && ($_GET['mail'] == 'ok')){
    echo "Ваше сообщение отправлено";
}
1
1 / 1 / 0
Регистрация: 14.02.2012
Сообщений: 22
23.03.2012, 22:37  [ТС]
Цитата Сообщение от munris Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
if (!empty($_POST['submit'])){
    send_mail();
    header("Location: namepage.php?mail=ok");
}
 
//в начало странице вставляешь:
if(isset($_GET['mail']) && ($_GET['mail'] == 'ok')){
    echo "Ваше сообщение отправлено";
}
Ок, заработало Огромное спасибо! И последний вопрос, можно как-то осуществить чтобы сообщение выводилось в pop-up окно?

Типа так:
JavaScript
1
<script language='JavaScript'>alert('Спасибо ".$_POST['name']." за использование контактной формы! Ваш email был отправлен и я свяжусь с Вами в кратчайшие сроки.')</script>
Заранее спасибо и желаю всем отличной пятницы и выходных
0
22 / 11 / 1
Регистрация: 17.03.2012
Сообщений: 24
23.03.2012, 22:43
JavaScript
1
alert("Спасибо <?=$_POST['name']?> за использование контактной формы! Ваш email был отправлен и я свяжусь с Вами в кратчайшие сроки.")
0
1 / 1 / 2
Регистрация: 10.06.2011
Сообщений: 14
23.03.2012, 23:22
Цитата Сообщение от Riter Посмотреть сообщение
Это понятно, а как поступить если обработка и вывод сообщений происходит в середине HTML кода?
Обьясню.
Дело в том что оболочка сайта одна для всех страниц, а "начинка" вызывается include-ом.
Для каждой вложенной страницы свой PHP-файл, в том числе и форум вместе с обработчиком.
При обновлении страницы (после отправки сообщения), оно дублируется. Не смертельно, но не приятно...
Мой вопрос остался без поддержки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2012, 23:22
Помогаю со студенческими работами здесь

Необходимо скрыть форму после отправки
&lt;html&gt; &lt;head&gt; &lt;title&gt;Data Base&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;table border=&quot;0&quot; cellspacing=&quot;5&quot;...

как проверить поля форму занять или нет до отправки форму
как проверить поля форму занять или нет до отправки форму как через ajax проверить например: поля логин занять или нет если...

Печаль Не приходит письмо после отправки через форму на сайте
Доброго времени суток Уважаемые форумчане! Оговорю сразу, не силен в php, да и вообще в программировании... Столкнулся с проблемой, на...

очистка формы после отправки. КАК? То есть после нажатия на кнопку или что? Как реализовать?
// если форма без ошибок if(empty($errors)){ // собираем данные из формы $message = &quot;Имя пользователя: &quot; . $_POST ....

Как реализовать форму отправки данных на почту?
Как реализовать форму отправки данных на почту при помощи HTML и PHP как на картинке? Мне нужна вот такая форма как на картинке, чтобы имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru