Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71

повторная отправка формы часть вторая

14.02.2012, 13:14. Показов 2099. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
по нажатию F5 заново отправляется письмо
header("Location: 123.php"); не предлагать - будет ошибка при наборе не корректного email
вобщем тупик здесь!


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
<?php
header('Content-Type: text/html; charset=windows-1251'); 
 if (isset($_POST['submit']))
         {
     if (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_POST['to'])){
          echo 'не правильный email';
      
         }
        
         $to= $_POST['to'];
         $subject = $_POST['subj'];
         $message = $_POST['msg'];
         $file= $_POST['file'];
          $headers = "MIME-Version: 1.0\r\n";
          $headers .= "Content-type: text/html; charset=windows-1251\r\n";
          $headers .= "To: $to\r\n";
          $headers .= "From: гыгы <мое мыло>";
          require_once "smtpauth.php";
          MailSmtp ($to, $subject, $message, $headers);
         // header("Location: 123.php");
         }
           
?>
<form action="" method="post">
  <pre>
    кому:   <input type="text" name="to">
    тема: <input type="text" name="subj">
    письмо <textarea rows="10" cols="20" type="text" name="msg"></textarea>
    <p>
        <label for="text">отправить файл:</label>
        <input type="file" name="file" id="file"/>
    </p>
    <input type="submit" value="Send mail!" name="submit">
  </pre>
</form>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2012, 13:14
Ответы с готовыми решениями:

Повторная отправка формы
Всем привет. При отправке формы хочу перезагрузить страницу и появляется окно &quot;Подтвердить повторную отправку&quot; можно ли это как...

Повторная отправка формы
Привет, подскажите, как разрешить проблему. Есть несколько select они выполняют роль фильтров, ниже идет таблица. По событию...

повторная отправка формы
после отправки письма и обновлении страницы опять отправляется письмо &lt;?php header('Content-Type: text/html; charset=UTF-8'); if...

13
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
14.02.2012, 13:17
сделай при клике отправку аяксом
0
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71
14.02.2012, 13:22  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
сделай при клике отправку аяксом
каким образом или покажите пример
P.S. я думал что это форум PHP
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
14.02.2012, 13:47
так и есть , но игнорировать возможности других технологий групо . При клике мы отправляем данные (без перезагрузки страницы) пхп сценарию например sender.php , он выполняет этот ваш пхп код и возвращает на нашу страничку результат . пример зависит от того есть ли у вас jquery или на обычном яваскрипте ?
0
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71
14.02.2012, 13:49  [ТС]
jquery нету, а вот на обычном ява скрипте было бы даже очень кстате
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
14.02.2012, 14:15
так начнем с формы , добавил айдишники и див для вывода результата

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
  <pre>
    кому:   <input type="text" id="MsgTarget" name="to">
    тема: <input type="text" id="MsgSubject" name="subj">
    письмо <textarea rows="10" cols="20" type="text" name="msg" id="MsgText""></textarea>
    <p>
        <label for="text">отправить файл:</label>
        <input type="file" name="file" id="MsgFile"/>
    </p>
    <input type="submit" value="Send mail!" name="submit" onclick="AjaxSend()">
  </pre>
<div id="MsgResult">
</div>
наш яваскрипт

JavaScript
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
var AjaxSender = false;
 if(navigator.appName == "Microsoft Internet Explorer") {
  AjaxSender = new ActiveXObject("Microsoft.XMLHTTP");
 } else {
  AjaxSender = new XMLHttpRequest();
 }
// создали объект через который будем отправлять
 
function AjaxSend( ) 
{
    AjaxSender.abort();
    AjaxSender.open("GET", "sender.php?MsgTarget=" + document.getElementById('MsgTarget') .value 
        + "&MsgSubject=" + document.getElementById('MsgSubject').value
        +  "&MsgFile=" +  document.getElementById('MsgFile').value 
        +  "&MsgText=" +  document.getElementById('MsgText').value  , true);
         //отправили данные , принимаем ответ и выводим в див
    AjaxSender.onreadystatechange=function()
    {
        if(AjaxSender.readyState == 4) 
            {
               document.getElementById('MsgResult').innerHTML = AjaxSender.responseText;    
            }
    }
    AjaxSender.send(null);
}
Добавлено через 6 минут
теперь о файле sender.php , всё что там выведется появистя в диве , поэтому он должен выводить только результат если ему были отправленны эти переменные из функции
0
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71
14.02.2012, 14:17  [ТС]
простите за не профессионализм но при нажатии F5 оно и дальше отправляет, я на 95% уверен что я не так оформил скрипт


HTML5
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
<form action="" method="post">
[JS]<script type="text/javascript">
var AjaxSender = false;
 if(navigator.appName == "Microsoft Internet Explorer") {
  AjaxSender = new ActiveXObject("Microsoft.XMLHTTP");
 } else {
  AjaxSender = new XMLHttpRequest();
 }
// создали объект через который будем отправлять
 
function AjaxSend( ) 
{
        AjaxSender.abort();
        AjaxSender.open("GET", "sender.php?MsgTarget=" + document.getElementById('MsgTarget') .value 
        + "&MsgSubject=" + document.getElementById('MsgSubject').value
        +  "&MsgFile=" +  document.getElementById('MsgFile').value 
        +  "&MsgText=" +  document.getElementById('MsgText').value  , true);
         //отправили данные , принимаем ответ и выводим в див
        AjaxSender.onreadystatechange=function()
        {
                if(AjaxSender.readyState == 4) 
                        {
                           document.getElementById('MsgResult').innerHTML = AjaxSender.responseText;    
                        }
        }
        AjaxSender.send(null);
</script>[/JS]
  <pre>
    кому:   <input type="text" id="MsgTarget" name="to">
    тема: <input type="text" id="MsgSubject" name="subj">
    письмо <textarea rows="10" cols="20" type="text" name="msg" id="MsgText""></textarea>
    <p>
        <label for="text">отправить файл:</label>
        <input type="file" name="file" id="MsgFile"/>
    </p>
    <input type="submit" value="Send mail!" name="submit" onclick="AjaxSend()">
  </pre>
<div id="MsgResult">
</div>
</form>
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
14.02.2012, 14:26
фулл листинг кода , и так 2 файла
главный где форма :
HTML5
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
<script type="text/javascript">
var AjaxSender = false;
 if(navigator.appName == "Microsoft Internet Explorer") {
  AjaxSender = new ActiveXObject("Microsoft.XMLHTTP");
 } else {
  AjaxSender = new XMLHttpRequest();
 }
// создали объект через который будем отправлять
 
function AjaxSend( ) 
{
        AjaxSender.abort();
        AjaxSender.open("GET", "sender.php?MsgTarget=" + document.getElementById('MsgTarget') .value 
        + "&MsgSubject=" + document.getElementById('MsgSubject').value
        +  "&MsgFile=" +  document.getElementById('MsgFile').value 
        +  "&MsgText=" +  document.getElementById('MsgText').value  , true);
         //отправили данные , принимаем ответ и выводим в див
        AjaxSender.onreadystatechange=function()
        {
                if(AjaxSender.readyState == 4) 
                        {
                           document.getElementById('MsgResult').innerHTML = AjaxSender.responseText;    
                        }
        }
        AjaxSender.send(null);
}
</script>
 
  <pre>
    кому:   <input type="text" id="MsgTarget" name="to">
    тема: <input type="text" id="MsgSubject" name="subj">
    письмо <textarea rows="10" cols="20" type="text" name="msg" id="MsgText""></textarea>
    <p>
        <label for="text">отправить файл:</label>
        <input type="file" name="file" id="MsgFile"/>
    </p>
    <input type="submit" value="Send mail!" name="submit" onclick="AjaxSend()">
  </pre>
<div id="MsgResult">
</div>
Файл отправки sender.php :
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
<?php
header('Content-Type: text/html; charset=windows-1251'); 
 if (isset($_GET['MsgTarget']) && isset($_GET['MsgSubject']) && isset($_GET['MsgFile']) && isset($_GET['MsgText']) )
         {
     if (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_GET['MsgTarget'])){
          die('не правильный email');
      
         }
        
         $to= $_GET['MsgTarget'];
         $subject = $_GET['MsgSubject'];
         $message = $_GET['MsgText'];
         $file= $_GET['MsgFile'];
          $headers = "MIME-Version: 1.0\r\n";
          $headers .= "Content-type: text/html; charset=windows-1251\r\n";
          $headers .= "To: $to\r\n";
          $headers .= "From: гыгы <мое мыло>";
          require_once "smtpauth.php";
          MailSmtp ($to, $subject, $message, $headers);
           die("Успешно отправлено !");
         }
       }
    else die('Не все поля заполнены !');     
           
?>
0
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71
14.02.2012, 14:40  [ТС]
} в sender.php конце лишняя, убираю ее и пишет после отправки письма пишет Не все поля заполнены !
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
14.02.2012, 14:45
Цитата Сообщение от LLIAKAJI Посмотреть сообщение
} в sender.php конце лишняя, убираю ее и пишет после отправки письма пишет Не все поля заполнены !
ну пхп я даже не проверял , может там чтото и криво , в общем с аяксом подсобил , а пхп думаю вы сами уже сможете подшаманить
0
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71
14.02.2012, 15:11  [ТС]
как не верти ничего не отправляет, может аякс нужно отдельно устанавливать?
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
15.02.2012, 22:32
LLIAKAJI, аякс это технология, которая работает на стороне клиента. Если браузер современный и включен JS, то Ajax работает как надо. Проблему надо примерно так:
Файл с формой:
form.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<form action="sender.php" method="post">
  <pre>
    кому:   <input type="text" name="to">
    тема: <input type="text" name="subj">
    письмо <textarea rows="10" cols="20" type="text" name="msg"></textarea>
    <p>
        <label for="text">отправить файл:</label>
        <input type="file" name="file" id="file"/>
    </p>
    <input type="submit" value="Send mail!" name="submit">
  </pre>
</form>
В отдельном файле размещаем обработчик приведенной выше формы:
sender.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
require "smtpauth.php";
 if (isset($_POST['submit']))
         {
     if (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_POST['to'])){
          header("Refresh: 3; URL=form.html");
          echo 'не правильный email';
         }
         $to= $_POST['to'];
         $subject = $_POST['subj'];
         $message = $_POST['msg'];
         $file= $_POST['file'];
          $headers = "MIME-Version: 1.0\r\n";
          $headers .= "Content-type: text/html; charset=windows-1251\r\n";
          $headers .= "To: $to\r\n";
          $headers .= "From: гыгы <мое мыло>";
          $result = mail($to, $subject, $message, $headers);
          header("Refresh: 3; URL=form.html");
          echo $result == true ? 'Письмо добавлено в очередь на отправку!' : '<b>Ошибка!</b> Письмо не будет отправлено!';
         }
           
?>
Примечание: скрипт и файл с формой должны лежать в одной директории...
P.S. Вроде без ошибок)

Добавлено через 4 минуты
LLIAKAJI, и еще, если собираетесь отправлять файлы, то в теге <form> надо указать атрибут enctype со значением multipart/form-data.
0
0 / 0 / 2
Регистрация: 06.01.2012
Сообщений: 71
15.02.2012, 22:34  [ТС]
пасибо за скрипт, я понял что в одной директории я хоть ламер но не настолько)
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
15.02.2012, 22:41
LLIAKAJI, я на всякий случай) Давно не отвечал в темах

Добавлено через 3 минуты
LLIAKAJI, снова забыл( точнее не обратил внимание ), данные о файлах, которые пришли на сервер через форму, заполненную пользователем, лежат в массиве $_FILES, а не $_POST( если указан метод POST ).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2012, 22:41
Помогаю со студенческими работами здесь

Повторная отправка данных после обновления страницы
Народ, может кто-то написать самые распространённые причины почему происходит повторная отправка данных после обновления страницы( да и...

Повторная отправка формы
Добрый день. Есть форма, в которую пользователь должен ввести свое имя и ответ на вопрос, и кнопка, активирующая php-скрипт, проверяющий,...

Повторная отправка формы
Ребята, приветствую вас! Нужна ваша помощь. Начал изучать PHP и MVC (прошу не переносить тему, т.к. вопрос не относится к MVC). Делаю...

Повторная отправка формы
Каким-то образом человек отправил одну и ту же форму в одну секунду. От CSRF защита есть, но везде у него токены разные, однако формы...

Необходима повторная отправка формы
Приветствую. Сайт не большой. Только для своих. На сайте имеется форма отправки, данные которые приходят на почту. Так вот человек вводит...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru