Alen
Alen

Reputation: 917

PHP send array to another PHP file

This may be a stupid question but I'm lost here. I need to send array with some data in it to another PHP file using POST variable. This is my form:

<form action="test.php" method="post">
        <label name="html[]" hidden><?php echo $array; ?></label>
        <input type="submit" value="submit">
</form>

And this is test.php

<?php
    $html = $_POST['html'];
    for($i = 1; $i<=9; $i++){
        echo $html[$i];
    }
?>

So this is what I tried, but it's not displaying anything. please help

Upvotes: 1

Views: 2874

Answers (2)

Jon
Jon

Reputation: 437904

You need to create a number of input elements with the same name, each of which will have one array item as its value:

<?php foreach ($array as $item) : ?>
<input type="hidden" name="html[]" value="<?= htmlspecialchars($item); ?>" />
<?php endforeach; ?>

Important points to keep in mind:

  1. $item must always be a scalar value (string, integer, etc). You cannot pass in arrays piecemeal with this technique.
  2. Never forget that since you are injecting variables into HTML output you must escape and/or sanitize them properly. In this case this is done with htmlspecialchars, which must know about your output encoding to work correctly in general (look up its third parameter).

There is also an alternative approach that can be used to pass arrays piecemeal through serialization:

<input type="hidden" name="html" 
       value="<?= htmlspecialchars(serialize($array)); ?>" />

And you would then unserialize it on the receiving end:

$html = unserialize($_POST['html']);

I 'm mostly including this option for completeness, as in practice session variables are a much better way of passing complex state between requests.

Upvotes: 4

Darwing
Darwing

Reputation: 823

Is it necessary to put the data of the array in a hidden field? You can store the array in $_SESSION and access it. Btw, I think you have a problem, labels can be submitted, in that case you must put the data into an input field with type="hidden".

Upvotes: 1

Related Questions