Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: "Версия для печати"

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ищу оптимальный вариант.
Eihwaz
Отправлено: 01 Января, 2008 - 01:31:49
Post Id


Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Здравствуйте!
Всех с Новым Годом! Счастья и удачи во всех ваших начинаниях!
Вынужден омрачить свое поздравление вопросом Улыбка
Ситуация следующая:
Дописываю интернет-магазин. Есть два метода оплаты — безналичный рачет и наличными. Если пользователь выбирает безналичный расчет, то он, после оформления заказа видит кроме страницы с обычной "рыбой", вроде "Спасибо за ваш заказ", счет-фактуру, где перечислены заказанные им товары, их общая стоимость, НДС и так далее. На этой же странице удаляется сессия с ID заказа, чтобы при нажатии "Назад" в браузере пользователь ненароком не сделал еще один заказ. Все ничего, но для эстетизьму хотелось бы сделать клиенту нормальную версию для печати этого счета, т.е., без дизайна страницы.
Посоветуйте, как можно реализовать подобное, не дав пользователю сделать повторный заказ, но при этом отобразить его счет?
Насчет записи счета в файл до удаления сессии и отображения его при нажатии на ссылку на странице со "Спасибо за ваш заказ" — это я в правильную сторону думаю?
 
 Top
evgenijj
Отправлено: 01 Января, 2008 - 12:32:09
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Погоди, для того, чтобы не дать пользователю еще раз сделать заказ (нажав кнопку "Назад" или "Refresh") ты должен делать редирект.
Т.е. пользователь заполнил форму и нажал кнопку "Оформить заказ". Обработчик формы проверяет, правильно ли заполнены поля формы. Если поля заполнены правильно, то мы делаем редирект на страницу, где выводим ему собщение "Спасибо за ваш заказ". Если форма заполнена неправильно, мы должны повторно предъявить ему форму, уже заполненную введенными пользователем данными (не заставлять же его еще раз заполнять форму?) и сообщением об ошибке. Сообщение об ошибке должно содержать описание того, какие обязательные поля не заполнены или заполнены неправильно. При этом все заполненные пользователем поля и сообщение об ошибке мы сохраняем в сессии. После повторного предъявления формы с сообщением об ошибке мы удаляем переменные сессии.
PHP:
скопировать код в буфер обмена
  1.  
  2. if ( поля формы заполнена правильно ) {
  3.   $_SESSION['success']['name'] = $name;
  4.   $_SESSION['success']['email'] = $email;
  5.   .............................................................
  6.   header( 'Location: success.php' );
  7.   die();
  8. } else {
  9.   $_SESSION['formOrder'] = array();
  10.   $_SESSION['formOrder']['error'] = 'При заполнении формы были допущены ошибки:'.$error;
  11.   $_SESSION['formOrder']['name'] = $name;
  12.   $_SESSION['formOrder']['email'] = $email;
  13.   ..............................................................
  14.   header( 'Location: formOrder.php' );
  15.   die();
  16. }
  17.  

Более подробно о том, как правильно обработать форму, можно почитать здесь
Обработка ошибочного заполнения формы
В твоем случае, если форма заполнена правильно, страница success.php удаляет заказ пользователя из сессии или таблицы БД (я не знаю, где храниться корзина) и выдает сообщение "Спасибо за ваш заказ". При этом, если был выбран безналичный рассчет (а об этом ты узнаешь из массива $_SESSION['success']) выдаешь это сообщение на чистой странице (для печати) и ниже - счет-фактуру и пр.

Примерно так.
 
 Top
Eihwaz
Отправлено: 01 Января, 2008 - 13:51:43
Post Id


Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Хм... "Чем больше я знаю, тем меньше я знаю" Улыбка Спасибо за ссылку — очевидная, вобщем, штука, и так будет "солиднее", чем алерты (сейчас валидация полей на яве), но это не совсем то:
Получается так: на этапе оформления заказа в массиве S_SESSION есть ID заказа пользователя. Сам заказ хранится в таблице до тех пор, пока не будет окончательно оформлен, и удаляется оттуда, если пользователь передумал отовариваться (по удалению сессии или по тайм-ауту) или остается там, если пользователь таки оформляет заказ. После нажатия кнопки, мол, "введенные данные подтверждаю", он видит страницу с благодарностью за заказ, на которой происходит следующее:
Генерируется счет фактура, товары выбираются из таблицы заказов по ID из массива S_SESSION, после чего сессия удаляется. На предыдущей странице стоит проверка — пришел ID заказа из сессии, или нет, и если его нету, то пользователя редиректит на главную страницу. Т.е., на этом этапе все нормально и работает так, как нужно (хотя за ссылку с людской обработкой формы все-равно спасибо).
Задача стоит открыть счет отдельно от страницы с благодарностями, или просто дать ссылку на него. Т.е., на каком-то более раннем этапе сгенерировать этот счет, видимо... Бог его знает, я уже сам путаюсь Улыбка Вобщем, нужно дать пользователю возможность распечатать счет-фактуру без шапки и "подвала" самого магазина. Вы просто скажите, в какую сторону думать, я разберусь.
P.S.: Может быть путанно объясняю, прошу прощения — сами видите, как Новый Год встречаю, вторые сутки на ногах Улыбка
 
 Top
evgenijj
Отправлено: 01 Января, 2008 - 14:10:14
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Так, а кто нам мешает разместить на странице с сообщением "Спасибо за покупку" ссылку "Версия для печати"? Переменная сесии, где хранится ID заказа ( $_SESSION['orderID'] ) у нас уже удалена. А она нам понадобиться для того чтобы сформировать счет-фактуру. Может быть, нам понадобятся и еще кое-какая информация о покупателе (имя, телефон, e-mail). Но ведь перед удалением переменной сесии, где хранится ID заказа, мы можем ее сохранить в другой переменной сессии (и всю другую нужную нам информацию). Пусть, для определенности, это будет $_SESSION['orderComplete']
PHP:
скопировать код в буфер обмена
  1.  
  2. $_SESSION['orderComplete']['id'] =  $_SESSION['orderID'];
  3. $_SESSION['orderComplete']['name'] =  $name;
  4. $_SESSION['orderComplete']['phone'] =  $phone;
  5. $_SESSION['orderComplete']['mail'] =  $mail;
  6.  
  7. unset ( $_SESSION['orderID'] );
  8.  

В этом случае мы будем знать, что если переменная сессии $_SESSION['orderID'] не определена, но при этом определена другая переменная $_SESSION['orderComplete'] значит, покупатель оформил заказ, но может возникнуть необходимость предьявить ему "страницу для печать". И если он затребует эту страницу, то там мы и удалим переменную $_SESSION['orderComplete'] потому как нам она больше не нужна.
PHP:
скопировать код в буфер обмена
  1.  
  2. if ( !isset ( $_SESSION['orderID'] ) and isset ( $_SESSION['orderComplete'] ) )
  3.   echo '<a href="...">Версия для печати</a>';
  4.  

Вообще, вариантов тут может быть множество.
 
 Top
Eihwaz
Отправлено: 01 Января, 2008 - 14:18:12
Post Id


Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




evgenijj пишет:
Так, а кто нам мешает разместить на странице с сообщением "Спасибо за покупку" ссылку "Версия для печати"?

Никто не мешает... Хы, вот это я затупил Улыбка))
Спасибо! Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB