Intereting Posts
Как объединить 2 ассоциативных массива в php, чтобы мы не перезаписывали любые повторяющиеся записи во всех случаях? Прочтите все txt-файлы в определенной папке и запишите все содержимое в один файл txt PHP Array – скобки Как конвертировать PDF в SWF с помощью PHP Автоматический чистый и удобный для SEO URL (slugs) Справка по импорту csv PHP – Десятичные значения становятся округленными значениями при вставке в таблицу искаженный JSON с PHP Разрешить PHP выполнять скрипт bash с правами root MySQL LAST_INSERT_ID () и FOUND_ROWS () WooCommerce Бесплатная доставка – удалите исходное или измените текстовое имя при оформлении заказа и электронной почте Ошибка CodeIgniter 2.1 с show_404 () и 404_override php mysql с дополнительным параметром Как подключить MSSQL от PHP 7, Plesk 12.5, установленный на CentOS 7 Интеграция блога tumblr с веб-сайтом Regex: сопоставить html-тег только в том случае, если он содержит определенный идентификатор класса

как передать массив через скрытое поле

здесь мой код

$order[$j][0]="Euclidean Geomethiyil Kodpagugal"; $order[$j][1]=$q16; $j++; 

скрытый поле-

 <input type="hidden" name="hdnTotal" value="<?php echo $gtot; ?>"> <input type="hidden" name="hdnOrder" value="<?php echo $order; ?>"> <input type="submit" value="Place Order"> 

Значение hdnTotal на следующей странице, но hdnOrder – нет. print($_POST['hdnOrder']) печатать только Array на экране.

Вы можете либо сериализовать массив, либо использовать множество скрытых полей. Кроме того, сохраните это в сеансе.

Сериализация массива

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

  $data=serialize($order); $encoded=htmlentities($data); echo '<input type="hidden" name="order" value="'.$encoded.'">'; 

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

Хеш может быть выполнен следующим образом:

  $data=serialize($order); $encoded=htmlentities($data); $hash=md5($encoded.'SecretStringHere'); echo '<input type="hidden" name="order" value="'.$encoded.'">'; echo '<input type="hidden" name="order_hash" value="'.$hash.'">'; 

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

Наконец, если Javascript будет полезен для понимания данных массива, то использование JSON-функций кодирования / декодирования PHP будет более уместным.

Несколько скрытых полей

Предполагая простой массив, состоящий из скалярных значений, вы можете использовать множество скрытых полей

  foreach($order as $idx=>$value) { $name=htmlentities('order['.$idx.']'); $value=htmlentities($val); echo '<input type="hidden" name="'.$name.'" value="'.$value.'">'; } 

Это имеет то преимущество, что PHP автоматически воссоздает это как массив для вас.

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

Использование сеанса

Возможно, самый легкий из трех …

 session_start(); $_SESSION['order']=$order; 

После установки массив доступен после вызова session_start (). Это имеет то преимущество, что он никогда не покидает сервер, но, конечно, исчезнет после периода бездействия (24 минуты по умолчанию)

Альтернативным решением для сериализации в одном поле является сериализация нескольких скрытых полей. Я написал общую функцию для этого. Эта функция и примеры управляются в GistHub's Gist . Проверьте их для последней версии, но скопируйте здесь для удобства.

 <?php # https://gist.github.com/eric1234/5802030 function array_to_input($array, $prefix='') { if( (bool)count(array_filter(array_keys($array), 'is_string')) ) { foreach($array as $key => $value) { if( empty($prefix) ) { $name = $key; } else { $name = $prefix.'['.$key.']'; } if( is_array($value) ) { array_to_input($value, $name); } else { ?> <input type="hidden" value="<?php echo $value ?>" name="<?php echo $name?>"> <?php } } } else { foreach($array as $item) { if( is_array($item) ) { array_to_input($item, $prefix.'[]'); } else { ?> <input type="hidden" name="<?php echo $prefix ?>[]" value="<?php echo $item ?>"> <?php } } } } 

Вот пример использования:

Основной ассоциативный массив

 echo array_to_input(array('foo' => 'bar', 'cat' => 'dog')); 

Вывод:

 <input type="hidden" value="bar" name="foo"> <input type="hidden" value="dog" name="cat"> 

Ассоциативный массив с вложенным индексированным массивом

 echo array_to_input(array('foo' => 'bar', 'cat' => 'dog', 'list' => array('a', 'b', 'c'))); 

Вывод:

 <input type="hidden" value="bar" name="foo"> <input type="hidden" value="dog" name="cat"> <input type="hidden" name="list[]" value="a"> <input type="hidden" name="list[]" value="b"> <input type="hidden" name="list[]" value="c"> 

Ассоциативный массив с вложенным ассоциативным массивом

 echo array_to_input(array('foo' => array('bar' => 'baz', 'a' => 'b'), 'cat' => 'dog')); 

Вывод:

 <input type="hidden" value="baz" name="foo[bar]"> <input type="hidden" value="b" name="foo[a]"> <input type="hidden" value="dog" name="cat"> 

Сходить с ума

 echo array_to_input(array('a' => array('b' => array('c' => array('d' => 'e'))))); 

Вывод:

 <input type="hidden" value="e" name="a[b][c][d]"> 

Попробуйте json_encode :

 <input type="hidden" name="hdnTotal" value="<?php echo htmlspecialchars(json_encode($gtot)); ?>"> <input type="hidden" name="hdnOrder" value="<?php echo htmlspecialchars(json_encode($order)); ?>"> <input type="submit" value="Place Order"> 

и для его возврата, json_decode :

 print(json_decode($_POST['hdnOrder'])); 

Бонус этого решения заключается в том, что вы легко сможете манипулировать своим массивом на стороне клиента с помощью JavaScript.

Но почему вы хотите это сделать?

Если это не для манипулирования вашими данными на стороне клиента, вы создаете ненужное обратное перемещение ваших данных, которое вы можете легко поддерживать на стороне сервера с сеансами PHP .

Если у вас есть нескалярные значения, вы должны сериализовать и нестиализировать их. У вас есть несколько вариантов:

  1. Сериализация и несериализация PHP
  2. JSON кодирует и декодирует

Как правило, если вы добавляете какое-либо значение в HTML, вам нужно кодировать специальные символы HTML.

Случай использования:

 <?php $arr = unserialize($_REQUEST['arr']); ?> <input type="hidden" name="arr" value="<?php echo htmlentities(serialize($arr)); ?>" /> 

Куда идет эта форма и зачем нужен многомерный массив, который должен быть передан как часть формы?

Как вы это сделаете, зависит от того, управляете ли вы страницей, получающей форму. Если вы это сделаете, у вас есть пара вариантов:

1) Сериализуйте массив в строку с помощью функции serialize PHP, затем unserialize $ _POST ['order'], чтобы вернуть исходный массив

2) Передайте его через массив полей формы, которые вам нужно будет генерировать

 <input type="hidden" name="hdnOrder[0][0]" value="Something" /> <input type="hidden" name="hdnOrder[0][1]" value="Something else" /> 

Если вы не контролируете форму, то все, что вы отправляете, вероятно, ожидает что-то конкретное в hdnOrder … что это?

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