Возможно ли отправить одно письмо из двух форм?

D2
На сайте с 09.12.2012
Offline
23
793

Ситуация следующая: есть 2 страницы с формами, каждая из которых отправляет письмо на мыло после заполнения соответственно приходят 2 разных письма. Реально ли сделать, чтобы из этих двух форм формировалось одно письмо?

Процесс происходит так:

Заходим на страницу с первой формой, заполняем, жмем submit, php отправляет письмо на мыло и редиректит на страницу со второй формой, далее аналогично - заполнение, отправка письма - спасибо.

alexspb
На сайте с 14.11.2005
Offline
187
#1

Заносите первое письмо в базу данных (или даже в файл сохраняйте).

После заполнения второй формы - объедините.

Только страная схема отправки писем - никак в одну форму не объединить?

IL
На сайте с 20.04.2007
Offline
435
#2
danny2:
Реально ли сделать, чтобы из этих двух форм формировалось одно письмо?

Реально.

Но, если заполнена только первая форма, письмо, отправляемое после заполнения второй просто не дойдёт.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
D2
На сайте с 09.12.2012
Offline
23
#3
alexspb:
Заносите первое письмо в базу данных (или даже в файл сохраняйте).
После заполнения второй формы - объедините.
Только страная схема отправки писем - никак в одну форму не объединить?

не моя причуда)

а если сохранить данные из первого письма в file.txt, то как эти данные передать в file.php, который обрабатывает вторую форму, и как эти данные сразу после отправки оттуда удалить?

Вот первый файл, который заносит данные в .txt

<?php
$data1=$_POST["data11"];
$data2=$_POST["data22"];
$log = fopen("database.txt","at");
fwrite($log,"Данные 1:$data1\nДанные2:$data2\n");
fclose($log);
alexspb
На сайте с 14.11.2005
Offline
187
#4
danny2:
а если сохранить данные из первого письма в file.txt, то как эти данные передать в file.php, который обрабатывает вторую форму, и как эти данные сразу после отправки оттуда удалить?

Ну если уж совсем криво, но быстро - хоть в сессии сохраняйте и оттуда берите.

С файлами не работал бы, лучше в базу данных.

Реализация от вас зависит, делайте как проще.

D2
На сайте с 09.12.2012
Offline
23
#5
alexspb:
Ну если уж совсем криво, но быстро - хоть в сессии сохраняйте и оттуда берите.
С файлами не работал бы, лучше в базу данных.
Реализация от вас зависит, делайте как проще.

в том то и дело, что в БД не вариант, только в файл

---------- Добавлено 19.02.2014 в 09:19 ----------

без БД никак?

alexspb
На сайте с 14.11.2005
Offline
187
#6
danny2:
в БД не вариант

почему? 100 рублей на хостинг нет? или религия не позволяет?

danny2:
без БД никак?

Выше подсказал вариант - хоть в сессию пишите.

Можно в файл.

Но я же не знаю ваших потребностей и важности сохранности данных.

D2
На сайте с 09.12.2012
Offline
23
#7
alexspb:
почему? 100 рублей на хостинг нет? или религия не позволяет?


Выше подсказал вариант - хоть в сессию пишите.
Можно в файл.
Но я же не знаю ваших потребностей и важности сохранности данных.

БД - тут не в хостинге дело, в заказчике)))

А как в сессию записать данные из txt-файла не подскажете?

S5
На сайте с 19.02.2014
Offline
0
#8

Помимо создания сессии и сохранения её данных при переходах между страницами существует еще одна очень полезная возможность. Что если мы могли бы сохранить данные одной сессии для использования в другой, возвращаясь к информации, которая была сохранена несколько дней назад? PHP предоставляет эту возможность, позволяя сохранять данные сессии в файле.

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

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

Теперь предположим, что связь обрывается, и данные сессии потеряны. Если вы сохранили исходные данные сессии, тогда при повторном подключении и авторизации пользователей вся информация будет в сохранности и останется только вывести незаконченный заказ. Это очень обрадует покупателя!

Итак, перейдем к методике, которая достаточно проста: мы будем использовать функцию fopen для открытия файла, функцию session_encode для перекодировки данных сессии в строку, функции fputs и fclose для записи и закрытия файла. Далее приведен пример:

<?php

session_register("username");
session_register("password");
session_register("ordernumber");
$username = "Goody";
$password = "mypass";
$ordernumber = "1234";
$sessionfile = fopen("sessionfile.txt", "w");
fputs($sessionfile, session_encode( ) );
fclose($sessionfile);
?>

Как вы видите, мы создаем три переменные сессии для хранения информации, которая нам понадобится, и в данном примере просто заполняем эти переменные строковыми данными. Вам придется вспомнить работу с файловой системой при использовании функций, показанных в этом примере. Здесь мы видим, что внутри команды fputs используется функция session_encode, чтобы получить данные сессии (которые включают в себя все переменные сессии, кроме номера сессии) и перекодировать их в строку, которая будет записана в файл с помощью функции fputs.

Теперь, когда мы благополучно спрятали данные, нам понадобится метод для извлечения этих данных по мере необходимости. Для этого будем использовать функцию fgets, чтобы прочитать запись, и session_decode для извлечения данных сессии из записи:

<?php

session_start( );
?>
<html><head> ....... и т.д.
<?php
$sessionfile = fopen("sessionfile.txt", "r");
session_decode(fgets($sessionfile, 4096) );
fclose($sessionfile);
?>

Здесь кое-что следует отметить. Сначала создается новая сессия (вызов функции session_start находится перед всем остальным кодом), поскольку активная сессия нужна чтобы создать переменные session_variables, что и делает функция session_decode.

Затем вы заметите, что инструкции session_encode и session_decode записаны наоборот по отношению друг к другу в соответствующих функциях fputs и fgets. Считайте, что при записи функция fputs содержит session_encode; при чтении, чтобы расшифровать результат fgets, функция session_decode содержит fgets. (Технически это может быть не совсем верно говорить, что одна функция "содержит" другую, но в данном случае это очень удобно).

Другой важный момент, который не стоит упускать из виду, это область видимости переменных. В первом из вышеприведенных примеров, у нас есть конкретные операторы для определения переменной сессии, так что их область видимости может быть более очевидной, но во втором примере, переменная будет определена функцией session_decode, поэтому область видимости не так просто определить сразу. В любом случае, если определение переменной происходит внутри функции (то есть, вы написали эту инструкцию внутри некоторой функции) область видимости session_variables будет локальной для этой функции. Если это не то, что вы хотите, вы должны добавить параметр "global". Во втором примере выше, это будет означать определение глобальной области видимости для переменных до вызова функции session_decode, например:

$sessionfile = fopen("sessionfile.txt", "r");

global $username, $password, $ordernumber;
session_decode(fgets($sessionfile, 4096) );
fclose($sessionfile);

Наконец, вы можете изменить имя используемого файла. В данных примерах мы использовали файл под названием "sessionfile.txt". Гораздо удобнее было бы использовать в качестве имени файла идентификатор пользователя или комбинацию имени пользователя и приложения (например, "vincebarnesorders.txt"), чтобы было понятно, из какого файла брать информацию, если пользователь вернется обратно.

alexspb
На сайте с 14.11.2005
Offline
187
#9
danny2:
БД - тут не в хостинге дело, в заказчике)))

Программу пишет заказчик? 😮

Или его слово БД пугает? Он его ни с чем не путает?..

danny2:
А как в сессию записать данные из txt-файла не подскажете?

Блин, наймите программиста.

DiAksID
На сайте с 02.08.2008
Offline
236
#10

а что мешает в новую форму передать данные просто через POST ?

т.е. первая форма вызывает страницу в которой:

- сначала из данных POST отправляется 1-е письмо

- потом формируется вторая форма с использованием тех же данных

всякие валидаторы и коллбеки это технические детали...

show must go on !!!...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий