2012-10-25 4 views
0

У меня проблема с noobie, когда я получаю голову, как я могу это сделать.Сериализация массива POST для передачи большого количества данных по ссылке

У меня есть страница с продуктами моей БД. На этой странице есть форма фильтра, в которой POST обрабатывает множество данных для уточнения списка продуктов, т. Е. Количества результатов на странице, порядка сортировки, pricefrom, priceto плюс массив подкатегорий

У меня также есть пейджинговая система, которая просто стандартный zencart (splitpageresults::dsplaylinks incase кто-то знаком) пейджинговая система, которая показывает ссылки для следующего, предыдущего и некоторых номеров страниц. Обычно он передавал параметры как $_GET в конце ссылок, но у меня есть все эти модные фильтры, которые я сделал.

Моя идея заключается в том, чтобы сериализовать $_POST массив и отправить его в качестве $_GET парам в ссылках:

<a href="index.php&arr=<?php echo serialize($_POST[]);?>">nxt</a> 

, но это, кажется, плохо все сериализации и десериализации.

Каков наилучший способ сделать это?

Я не могу понять это!

+1

Лучше сохранить фильтры в сеансе. Существует ограничение на количество данных, которое может быть передано через URL. – air4x

+0

Ах, ладно, ладно. Спасибо за ответ. –

ответ

2

Вы можете удалить [] и urlencode() сериализированные данные о:

<a href="index.php&arr=<?php echo urlencode(serialize($_POST));?>">nxt</a> 

Но лучше использовать sessions. См. manual.

+0

Спасибо, хорошая идея, я никогда не использовал их раньше, так что никогда не думал! –

+0

Добро пожаловать! – Carlos

0

Просмотрите страницы расширенного поиска и расширенного поиска для примеров обработки большого количества данных с помощью ПОСТ.

0

Попробуйте

/* View.php*/ 

    $image_arr=array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg"); 
    $serial_arr=urlencode(base64_encode(serialize($image_arr))); 

    echo '<a href="process.php?arr='.$serial_arr.'">Link</a>'; 



    /* process.php */ 
    $image_arr=unserialize(base64_decode(urldecode($_GET['arr']))); 

    foreach($image_arr as $value){ 
     /* do anything here 
     * just as an example 
     * https://gist.github.com/vdite/30644e28301916789ff5 
     */ 
    } 
0

ИМХО Serialize() и десериализации() на $ _GET или $ _POST далеко от того, чтобы быть хорошей идеей, есть два основных аспекта я могу думать:

  1. безопасности
  2. Лучшая практика

Для получения более подробной информации по аспекту безопасности, проверить Стефен Эссера OWASP, стр. 27 на [PDF, owasp.org]. Вообще, не так драматично, как многие люди хотят, чтобы мы верили, но может оказаться неприятной проблемой безопасности, тем не менее (например, phpBB2, Zend и т. Д.).

Лучшей практикой было бы использовать JSONs (json_encode и json_decode - лучший вариант). С помощью JSON вы можете делать больше основанных на стандартах AJAX-ing, плюс удобные JavaScript или jQuery-разбиение на страницы или фильтры.

Смежные вопросы