Вопщем на index.php имеется ссылка "Регистрация", которая ведет на reg.php, все дальнейшие операции происходят только в reg.php. Открываю его в отдельном окне, через window.open(), в котором скрываю все панели и кнопки, оставляю только кнопку "Продолжить"
В самом начале файла открываю сессию
session_start();
if (!isset($_SESSION['j_addr']))
{
$_SESSION['j_user'] = array() ;
$_SESSION['j_job'] = array() ;
$_SESSION['j_addr'] = array();
}
В массиве j_user храним общие данные о пользователе, в j_job о том какие работы-услуги оказывает, в j_addr почтовые адреса. Т.к. работ и адресов м.б.несколько, то это массивы трехмерные.
Дальше файл reg.php вызывает форму f_user на которой кнопочка "Продолжить", потом форму f_job на которой уже 2 кнопочки - "Продолжить" и "добавить еще услугу". С f_addr - тоже самое, 2 кнопки "Завершить" и "добавить еще адрес".
При каждом нажатии "Добавить еще" в массивы добавляется новая строка
На кнопке "Завершить" записываю данные в MySQL и закрываю сессию
$_SESSION = array();
session_destroy();
Вопрос - как закрыть сессию, если юзер выходит по правому верхнему крестику?
Например завел 3 услуги (а надо 2 например), потом крестик (возврат на index.php), потом опять жмет "Регистрация", а там уже $_SESSION['j_job'] из трех строк ... как побороть?
Спустя 1 день, 31 минута, 41 секунда (9.02.2011 - 02:14) phpsc написал(а):
ООП примени..и проще будет тебе.
Спустя 1 час, 30 секунд (9.02.2011 - 03:15) inpost написал(а):
masson
Забей на сессии, все передаваемые данные отправляй в поле: type=hidden. Ну а если уж хочется сессии, не сразу пользуйся ими, а проверяй предыдущую страницу: (REFERER). Если та, которая должна быть - значит правильно идёт, если нет - кидай на начало регистрации с очищенной сессией =)
Забей на сессии, все передаваемые данные отправляй в поле: type=hidden. Ну а если уж хочется сессии, не сразу пользуйся ими, а проверяй предыдущую страницу: (REFERER). Если та, которая должна быть - значит правильно идёт, если нет - кидай на начало регистрации с очищенной сессией =)
Спустя 22 минуты, 28 секунд (9.02.2011 - 03:37) two написал(а):
phpsc
Без ООП можно тоже много чего сделать
Без ООП можно тоже много чего сделать
Спустя 5 часов, 37 минут, 18 секунд (9.02.2011 - 09:14) masson написал(а):
phpsc
А ссылкочку на пример с ООП? если не затруднит. Ну или хоть на словах опиши как должно выглядеть
inpost
с REFERER интересный вариант, надо подумать.
А скрытое поле мне кажется гиморно заполнять, и значения из него потом выковыривать тоже
А ссылкочку на пример с ООП? если не затруднит. Ну или хоть на словах опиши как должно выглядеть
inpost
с REFERER интересный вариант, надо подумать.
А скрытое поле мне кажется гиморно заполнять, и значения из него потом выковыривать тоже
Спустя 1 день, 2 часа, 23 минуты, 34 секунды (10.02.2011 - 11:38) masson написал(а):
Пока решил вопрос так - в начале файла reg.php рисую :
Вроде работает. Но все равно чуйствую что сама организационная идея кривая. Если например злобный юзер через правую клавишу вызовет Back - то вся регистрация к бубеням :unsure:
Если у кого есть красивый пример (или ссылка) многостраничной регистрации с заранее неопределенным количеством страниц - буду очень признателен
session_start();
if (stripos($_SERVER['HTTP_REFERER'], $_SERVER['PHP_SELF']) == false)
{
$_SESSION = array() ;
$_SESSION['j_user'] = array();
$_SESSION['j_job'] = array();
$_SESSION['j_addr'] = array();
}
Вроде работает. Но все равно чуйствую что сама организационная идея кривая. Если например злобный юзер через правую клавишу вызовет Back - то вся регистрация к бубеням :unsure:
Если у кого есть красивый пример (или ссылка) многостраничной регистрации с заранее неопределенным количеством страниц - буду очень признателен
Спустя 5 часов, 51 минута, 7 секунд (10.02.2011 - 17:29) inpost написал(а):
masson
Конечно, так как надо через скрытые поля такое делать, а не так извращаться.
Конечно, так как надо через скрытые поля такое делать, а не так извращаться.
Спустя 18 минут, 29 секунд (10.02.2011 - 17:48) masson написал(а):
inpost
Нам бы схемку, аль чертеж ..... (с)
Не понимаю как. На словах можешь объяснить?
Например нужно 3 раза вызвать форму для заполнения адреса (2 поля для упрощения - улица-дом и № телефона) ... одно скрытое поле на форме держать? Как в него 3 адреса "нарастающим итогом" укладывать?
Потом нужно 3 раза вызвать форму для указания работ-услуг. Эти данные к паровозу с адресами прицеплять?
Нам бы схемку, аль чертеж ..... (с)
Не понимаю как. На словах можешь объяснить?
Например нужно 3 раза вызвать форму для заполнения адреса (2 поля для упрощения - улица-дом и № телефона) ... одно скрытое поле на форме держать? Как в него 3 адреса "нарастающим итогом" укладывать?
Потом нужно 3 раза вызвать форму для указания работ-услуг. Эти данные к паровозу с адресами прицеплять?
Спустя 2 часа, 20 минут, 22 секунды (10.02.2011 - 20:08) inpost написал(а):
1. <input type="text" name="value1" />
2. <input type="hidden" name="value1" value="<?php echo htmlspecialchars($_POST['value1']); ?>" />
3. <input type="hidden" name="value1" value="<?php echo htmlspecialchars($_POST['value1']); ?>" />
и так далее, цифра - номер страницы.
2. <input type="hidden" name="value1" value="<?php echo htmlspecialchars($_POST['value1']); ?>" />
3. <input type="hidden" name="value1" value="<?php echo htmlspecialchars($_POST['value1']); ?>" />
и так далее, цифра - номер страницы.
Спустя 1 день, 1 час, 33 минуты, 1 секунда (11.02.2011 - 21:41) alex12060 написал(а):
Все правильно инпост говрит. Надо через хиддены, если ты хочешь делать так. А то сессии грузить, не вариант.
З.Ы Сессия действительна пока открыто окно твоего сайта, хотя бы одно. Если ты будешь делать все эти манипуляции в одном окне, главном к примеру, без бланков, то все будет хорошо, если он закроет вдруг твой сайт, сессия сама кышнется)
З.Ы Сессия действительна пока открыто окно твоего сайта, хотя бы одно. Если ты будешь делать все эти манипуляции в одном окне, главном к примеру, без бланков, то все будет хорошо, если он закроет вдруг твой сайт, сессия сама кышнется)
Спустя 5 дней, 19 часов, 32 минуты, 9 секунд (17.02.2011 - 17:13) masson написал(а):
alex12060, я уже понял что "надо через хиддены", только не понял как :)
inpost, не понял, в чем разница №2 и №3? зачем две одинаковые строчки? ... не понял что значит "номер страницы" :unsure:
Видимо без кода никак. Вот собрал схематично, все лишнее включая проверки убрал, оставил только самое необходимое. Допустим надо собрать 3 вида работ и 3 адреса. Сейчас работает так :
f_job.php - форма заполнения работ-услуг
Вопрос №1 - сколько еще нужно хидденов и как их заполнять
f_addr.php - форма заполнения адресов
Вопрос №2 (по типу №1) - сколько еще нужно хидденов и как их заполнять
reg.php - откуда все вызывается
Вопрос №3 - что прописывать вместо заполнения массива SESSION?
Вопрос №4 - Как сливать в MySQL?
inpost, не понял, в чем разница №2 и №3? зачем две одинаковые строчки? ... не понял что значит "номер страницы" :unsure:
Видимо без кода никак. Вот собрал схематично, все лишнее включая проверки убрал, оставил только самое необходимое. Допустим надо собрать 3 вида работ и 3 адреса. Сейчас работает так :
f_job.php - форма заполнения работ-услуг
Вопрос №1 - сколько еще нужно хидденов и как их заполнять
<form name='f_job' action='reg.php' method='post' onsubmit="return false;">
<!-- Имя, по которому reg.php определит для какого массива собраны данные -->
<input type='hidden' name='prevform' value='f_job' />
<!-- Имя формы, которую reg.php будет запускать после заполнения массива -->
<!-- значение заполняется при нажатии кнопки (см.ниже) -->
<input type='hidden' name='nextform' value='' />
Наименование услуги <br />
<input type="text" name="name" /> <br /><br />
Примечание <br />
<input type="text" name="prim" /> <br /><br />
</form>
<input type='button' name='morejob' value='Добавить еще услугу' onclick='f_job.nextform.value=\"f_job\"; f_job.submit();' />
<input type='button' name='continue' value='Продолжить регистрацию' onclick='f_job.nextform.value=\"f_addr\"; f_job.submit();' />
f_addr.php - форма заполнения адресов
Вопрос №2 (по типу №1) - сколько еще нужно хидденов и как их заполнять
<form name='f_addr' action='reg.php' method='post' onsubmit="return false;">
<!-- Имя, по которому reg.php определит для какого массива собраны данные -->
<input type='hidden' name='prevform' value='f_addr' />
<!-- Имя формы, которую reg.php будет запускать после заполнения массива -->
<!-- значение заполняется при нажатии кнопки (см.ниже) -->
<input type='hidden' name='nextform' value='' />
Адрес (улица, дом) <br />
<input type="text" name="name" /> <br /><br />
№№ Телефонов <br />
<input type="text" name="phones" /> <br /><br />
</form>
<input type='button' name='moreaddr' value='Добавить еще адрес' onclick='f_addr.nextform.value=\"f_addr\"; f_addr.submit();' />
<input type='button' name='continue' value='Завершить регистрацию' onclick='f_addr.nextform.value=\"f_final\"; f_addr.submit();' />
reg.php - откуда все вызывается
Вопрос №3 - что прописывать вместо заполнения массива SESSION?
Вопрос №4 - Как сливать в MySQL?
session_start();
if (stripos($_SERVER['HTTP_REFERER'], $_SERVER['PHP_SELF']) == false)
{
$_SESSION = array() ;
$_SESSION['job'] = array();
$_SESSION['addr'] = array();
}
$prevform = $_POST['prevform'];
$nextform = $_POST['nextform'];
switch ($prevform)
{
case "f_job" :
$_SESSION['job'][] = array ('name' => $_POST['name'], 'prim' => $_POST['prim']) ;
break;
case "f_addr" :
$_SESSION['addr'][] = array ('name' => $_POST['name'], 'phones' => $_POST['phones']) ;
break;
}
switch ($nextform)
{
case "f_job" :
include ('./f_job.php') ;
break;
case "f_addr" :
include ('./f_addr.php') ;
break;
case "f_final" : // Здесь сливаем данные в MySQL
include ('./f_final.php') ;
break;
}
Спустя 10 дней, 16 часов, 21 минута, 1 секунда (28.02.2011 - 09:34) masson написал(а):
Ну что ж вы молчите, джентельмены ?