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 :: Скрытие id заказа, реализация.

 PHP.SU

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


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

> Без описания
Zuldek
Отправлено: 31 Января, 2011 - 07:38:41
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




На странице журнала заказов есть неопределённое число заказов, выводимых в цикле из бд. И у каждого заказа, соответственно, ссылки/кнопки - удалить, оплатить, получить и т.д.
Чтобы работать с заказом на страницах оплаты и проч., необходимо передать их id. Для скрытия id от юзера, как я понял (подсказали), лучше всего записывать его в сессию а не передавать в скрытом поле hidden в $_POST.
То есть делать нужно
CODE (htmlphp):
скопировать код в буфер обмена
  1. $_SESSION['order_id'] = $reselt['order_id'];
Но вот как в этом случае организовать записи id в сессию и в какой момент осуществлять запись значения сессии?
Ведь выводится может много заказов, не для каждого же создавать отдельную переменную сессии?

(Отредактировано автором: 31 Января, 2011 - 08:14:53)

 
 Top
Viper
Отправлено: 31 Января, 2011 - 07:53:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Zuldek пишет:
Ведь выводится может много заказов, не для каждого же создавать отдельную переменную сессии?
а почему бы и нет?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Zuldek
Отправлено: 31 Января, 2011 - 08:08:26
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




Тогда как в таком случае идентифицировать на странице оплаты/удаления нужную переменную сессии?
Если мы выводим в журнале заказов
CODE (htmlphp):
скопировать код в буфер обмена
  1.       $_SESSION['1order_id'] = $reselt['order_id'];
  2.       $_SESSION['2order_id'] = $reselt['order_id'];
  3. ...

Тогда придётся, наверно, передавать в $_POST время создания заказа, сумму и иные не секретные параметры, по которым идентифицировать заказ и брать нужную переменную сессии, правильно?
Либо как-то инициировать запись в сессию при щелчке на кнопку Оплатить/удалить... чтобы был только один $_SESSION['order_id'] ?

(Отредактировано автором: 31 Января, 2011 - 09:13:44)

 
 Top
Viper
Отправлено: 31 Января, 2011 - 09:40:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Zuldek id сессии у вас уникален для каждого пользователя. т.е. примерно session id = user id


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Zuldek
Отправлено: 31 Января, 2011 - 10:21:46
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




CODE (htmlphp):
скопировать код в буфер обмена
  1. while($res = mysql_fetch_array($reselt)) {
  2. echo $res['orders_shname'];
  3. $_SESSION['order_id'] = $reselt['order_id'];
  4. echo "<a href="pay.php>Оплатить</a>";
  5. }

Так присвоить значение не можем потому, что $_SESSION['order_id'] будет хранить последнее значение $reselt['order_id'] из цикла
то есть надо отдельное значение для каждого заказа..
CODE (htmlphp):
скопировать код в буфер обмена
  1. //Добавляем счётчик
  2. $num=0;
  3. $name="order_id".$num;
  4. while($res = mysql_fetch_array($reselt)) {
  5. $num++
  6. echo $res['orders_shname'];
  7. //и пишем в сессию разные значения для всех заказов
  8. $_SESSION['$name'] = $reselt['order_id'];
  9. echo "<a href="pay.php>Оплатить</a>";
  10. }

На целевой странице ищем в $_SESSION элемент содержащий в имени "order_id" и берём его значение за ID заказа. Правильно?
Или можно сделать как-то по-изящнее?

(Отредактировано автором: 31 Января, 2011 - 10:22:29)

 
 Top
Viper
Отправлено: 31 Января, 2011 - 12:34:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




можно и так. просто таскать большой объект с всеми заказами от страницы к странице ихо не слишком удобно.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 31 Января, 2011 - 19:02:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Zuldek пишет:
Ведь выводится может много заказов, не для каждого же создавать отдельную переменную сессии?
Использование механизма организации программных сессий предполагает возможность сохранения информационных полей в линейном сераализованном представлении которое обеспечивает хранения всех типов элементов PHP-приложения отличных от активных системных ресурсов - по этой причине возмонжо использование программного индексного массива для осуществления хранения списка целевых идентификаторов заказов в переменной сессии ассоциированной с заданным ключом


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Zuldek
Отправлено: 31 Января, 2011 - 21:43:48
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.       $num=0;
  3.       $name="order_id".$num;
  4.       while($res = mysql_fetch_array($reselt)) {
  5.       $num++
  6.       echo $res['orders_shname'];
  7.       $_SESSION['order_id'][$num] = $reselt['order_id'];
  8.       echo "<a href="pay.php>Оплатить</a>";
  9.       }

и в целевом скрипте что-то вроде if(isset( $_SESSION['order_id'])) {
//скидываем элемент с неизвестным $num чтобы достать его по ключу "0" с массива
sort($_SESSION['order_id']);
$order_id=$_SESSION['order_id'][0];
...
}
Как-то так наверно с получением id.
Теперь с отправкой его в платёжную систему.
Я правильно понимаю что тут опять надо избежать отправки post-запроса из формы с размещением id_заказа и прочих параметров в полях типа hidden и надо реализовывать как-то по-другому?

(Отредактировано автором: 31 Января, 2011 - 21:44:29)

 
 Top
Viper
Отправлено: 01 Февраля, 2011 - 08:01:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Zuldek забирайте данные из сессии присоединяйте ещё какие-то данные, собирайте в POST и отправляйте cUrl-ом на сервер.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Invert
Отправлено: 01 Февраля, 2011 - 08:18:03
Post Id



Частый гость


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


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




Я не совсем понимаю, зачем такая секретность с id заказа, но можно сделать таким образом:

В момент генерации страницы со списком всех заказов:
- Создать md5 хеши всех id заказов
- В форму заказа поместить не id заказа, а его хеш
- При запросе изменения заказа заново создать хеши заказов и сравнить, какому заказу принадлежит хеш.

Все вроде просто, малость ресурсов будем тратить на двукратное создание хешей и повторную выбору всех id заказов.
Можно немного пофантазировать и хранить массив хешей в сессии, тогда повторно делать выборку и получать хеши не придется.

Подходит вариант?

(Отредактировано автором: 01 Февраля, 2011 - 08:39:25)

 
 Top
Zuldek
Отправлено: 01 Февраля, 2011 - 09:23:15
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




Invert пишет:
Подходит вариант?

В вашем примере пришлось-бы дополнительно хранить хеши всех заказов в бд, чтобы сравнивать их с отправленными на изменение/оплату заказами.
Думаю пока ограничится хранением id заказа в сессии.
Скрывать id заказов желательно потому, что он в большинстве платёжных систем используется для формирования ключа к транзакциям по платежам. По этмоу ключу в частности проверяется оплачен-ли конкретный заказ. Кроме Id-заказа в ключ включается id магазина, пароль для магазина и т.п.

(Отредактировано автором: 01 Февраля, 2011 - 09:27:10)

 
 Top
Invert
Отправлено: 01 Февраля, 2011 - 09:30:44
Post Id



Частый гость


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


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




Как знаете.
Этот вариант я считаю вполне нормальным.

(Отредактировано автором: 01 Февраля, 2011 - 09:31:55)

 
 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