Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing an array using an HTML form hidden element

Tags:

php

I am trying to post an array in a hidden field and want to retrieve that array after submitting a form in PHP.

$postvalue = array("a", "b", "c"); <input type="hidden" name="result" value="<?php echo $postvalue; ?>"> 

But I am getting only an array string after printing the posted value. So how can I solve it?

like image 488
Shrishail Avatar asked Jul 01 '11 11:07

Shrishail


People also ask

How do you pass an input hidden array?

If you want to post an array you must use another notation: foreach ($postvalue as $value){ <input type="hidden" name="result[]" value="$value."> }

How we can pass hidden form field in the form data?

The <input> element's value attribute holds a string that contains the hidden data you want to include when the form is submitted to the server. This specifically can't be edited or seen by the user via the user interface, although you could edit the value via browser developer tools.

How do you give an array in HTML?

Creating an Array Using an array literal is the easiest way to create a JavaScript Array. Syntax: const array_name = [item1, item2, ...]; It is a common practice to declare arrays with the const keyword.

How do you send a hidden field in HTML?

The <input type="hidden"> defines a hidden input field.


2 Answers

Use:

$postvalue = array("a", "b", "c"); foreach($postvalue as $value) {     echo '<input type="hidden" name="result[]" value="'. $value. '">'; } 

And you will get $_POST['result'] as an array.

print_r($_POST['result']); 
like image 92
Shakti Singh Avatar answered Sep 28 '22 10:09

Shakti Singh


There are mainly two possible ways to achieve this:

  1. Serialize the data in some way:

    $postvalue = serialize($array); // Client side  $array = unserialize($_POST['result']; // Server side 

And then you can unserialize the posted values with unserialize($postvalue). Further information on this is here in the PHP manuals.

Alternativeley you can use the json_encode() and json_decode() functions to get a JSON formatted serialized string. You could even shrink the transmitted data with gzcompress() (note that this is performance intensive) and secure the transmitted data with base64_encode() (to make your data survive in non-8 bit clean transport layers) This could look like this:

    $postvalue = base64_encode(json_encode($array)); // Client side      $array = json_decode(base64_decode($_POST['result'])); // Server side 

A not recommended way to serialize your data (but very cheap in performance) is to simply use implode() on your array to get a string with all values separated by some specified character. On the server side you can retrieve the array with explode() then. But note that you shouldn't use a character for separation that occurs in the array values (or then escape it) and that you cannot transmit the array keys with this method.

  1. Use the properties of special named input elements:

    $postvalue = ""; foreach ($array as $v) {   $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />'; } 

    Like this you get your entire array in the $_POST['result'] variable if the form is sent. Note that this doesn't transmit array keys. However you can achieve this by using result[$key] as name of each field.

Everyone of these methods got their own advantages and disadvantages. What you use is mainly depending on how large your array will be, since you should try to send a minimal amount of data with all of this methods.

Another way to achieve the same is to store the array in a server side session instead of transmitting it client side. Like this you can access the array over the $_SESSION variable and don't have to transmit anything over the form. For this have a look at a basic usage example of sessions on php.net.

like image 33
s1lence Avatar answered Sep 28 '22 10:09

s1lence