20

I have a form on my page with a bunch of inputs and some hidden fields, I've been asked to pass this data through a "post array" only im unsure on how to do this,

Heres a snippet of what im doing at the moment

<form enctype="multipart/form-data" action="process.php" method="POST"> 
...
more inputs
...
<!-- Hidden data -->
<input type="hidden" name="TimeToRenderHoursInput" value="<?php echo $RenderHours; ?>" />
<input type="hidden" name="TimeToRenderDaysInput" value="<?php echo $RenderDays; ?>" />
<input type="hidden" name="TimeToRenderYearsInput" value="<?php echo $RenderYears; ?>" />
<input type="hidden" name="ContentMinutesInput" value="<?php echo $ContentMinutes; ?>" />
<input type="hidden" name="ContentMinutesSelector" value="<?php echo $ContentMinutesSelector; ?>" />
<input type="hidden" name="PriorityInput" value="<?php echo $Priority; ?>" />
<input type="hidden" name="AvgFrameRenderTimeInput" value="<?php echo $AverageFrameRenderTime; ?>" />
<input type="hidden" name="AvgFrameRenderTimeSelector" value="<?php echo $AverageFrameRenderSelector; ?>" />
<input type="hidden" name="CoresInTestInput" value="<?php echo $CoresInTest; ?>" />
<input type="hidden" name="EstPriceInput" value="<?php echo $EstPrice; ?>" />
<!-- End hidden -->
<input type="image" src="http://www.venndigital.co.uk/testsite/renderbutton/_includes/images/button/submit.jpg" alt="Submit" value="Submit" style="border:0!important;" />

In my process.php im then calling the data as such...

$first_name = $_POST['first_name']; 
$company_name = $_POST['company_name']; 
$email_from = $_POST['email']; 
$address = $_POST['address']; 
$postcode = $_POST['postcode']; 
$RenderHours = $_POST['TimeToRenderHoursInput'];
$RenderDays = $_POST['TimeToRenderDaysInput'];
$RenderYears = $_POST['TimeToRenderYearsInput'];
$ContentMinutes = $_POST['ContentMinutesInput'];
$ContentMinutesSelector = $_POST['ContentMinutesSelector'];
$Priority = $_POST['PriorityInput'];
$AverageFrameRenderTime = $_POST['AvgFrameRenderTimeInput'];
$AverageFrameRenderSelector = $_POST['AvgFrameRenderTimeSelector'];
$CoresInTest = $_POST['CoresInTestInput'];
$EstPrice = $_POST['EstPriceInput'];

Is there a way to post it as an array? Is my method bad practice in anyway?

asked May 27, 2011 at 12:47

8 Answers 8

50

Give each input a name in array format:

<input type="hidden" name="data[EstPriceInput]" value="" />

Then the in PHP $_POST['data']; will be an array:

 print_r($_POST); // print out the whole post
 print_r($_POST['data']); // print out only the data array
AbraCadaver
79.1k7 gold badges75 silver badges91 bronze badges
answered May 27, 2011 at 12:50
Sign up to request clarification or add additional context in comments.

1 Comment

will this be a good practice? one thing I saw an importance of this is when you want to insert the values in the database without typing all the fields, you'll just loop through the array?
10

When you post that data, it is stored as an array in $_POST.

You could optionally do something like:

<input name="arrayname[item1]">
<input name="arrayname[item2]">
<input name="arrayname[item3]">

Then:

$item1 = $_POST['arrayname']['item1'];
$item2 = $_POST['arrayname']['item2'];
$item3 = $_POST['arrayname']['item3'];

But I fail to see the point.

AbraCadaver
79.1k7 gold badges75 silver badges91 bronze badges
answered May 27, 2011 at 12:50

2 Comments

I've been asked to build an order form page for a client and they want the data passing to them in a POST array, as im no php developer I was wondering if my way posted above would suffice or if its frowned upon in any way?
There is nothing wrong with the code you posted. If there are only certain hidden form elements they want in this array (and not the rest of the form) then I can see wanting a multidimensional array. This would be accomplished by using the above code. But yeah, nothing wrong with your code.
5

You're already doing that, as a matter of fact. When the form is submitted, the data is passed through a post array ($_POST). Your process.php is receiving that array and redistributing its values as individual variables.

answered May 27, 2011 at 12:52

2 Comments

it may in fact be an array but that array also has other data in it that the he may not want to sift through
Ahh, Is there a way it can be printed out an array then? I've tried using <?php print_r(); ?> only it doesnt print anything out, I have to use my above code, if this makes sense?
1

Why are you sending it through a post if you already have it on the server (PHP) side?

Why not just save the array to the $_SESSION variable so you can use it when the form gets submitted, that might make it more "secure" since then the client cannot change the variables by editing the source.

It will depend upon how you really want to do.

answered Feb 27, 2014 at 8:37

Comments

0

There is a better way. I'd suggest encoding the source array into json then decoding it on the other side. Instead of hiding many items, just attach the JSON string to this. Presuming this is an HTML page and that JavaScript/JQuery is available:

//if the data is visible only to JavaScript 
let json_master = JSON.stringify(itemsMaster);
$('#hidden_data_master').val(json_master);
//or data originated from php and you have access
//create name-key array, not numeric indexed
$hiddenData = json_encode($namedKeyArrayData);
//at the html page, grab it into the JS variable
var hiddenData = <?php echo json_encode($hiddenData); ?>; //it came as string
//next, attach to the hidden field as earlier 
$('#hidden_data_master').val(hiddenData);

JQuery is used but even pure JS can do this. The end result is to turn the various hidden inputs into an array, turn the array into a JSON string, attach the string to one hidden field in the form, and submit.

//on your target page
$hiddenDataStr = $_POST['hidden_data_master'];
$hiddenDataArray = json_decode($hiddenDataStr ) //this is what they needed
answered Sep 8, 2024 at 10:57

Comments

-1

You can use the built-in function:

extract($_POST);

it will create a variable for each entry in $_POST.

Stephen Rauch
50.1k32 gold badges118 silver badges142 bronze badges
answered Mar 17, 2018 at 4:31

Comments

-2

What you are doing is not necessarily bad practice but it does however require an extraordinary amount of typing. I would accomplish what you are trying to do like this.

foreach($_POST as $var => $val){
 $$var = $val;
}

This will take all the POST variables and put them in their own individual variables. So if you have a input field named email and the luser puts in [email protected] you will have a var named $email with a value of "[email protected]".

answered Nov 10, 2013 at 2:54

1 Comment

Thats bad design. Really, really, really bad design. 1) "var" can be user submitted 2) val can be user submitted. So someone could send existing app variables to the script and this would override it!
-5

If you want everything in your post to be as $Variables you can use something like this:

foreach($_POST as $key => $value) { eval("$" . $key . " = " . $value"); }

answered May 27, 2011 at 13:18

1 Comment

Security risk. (When $key is equal to already existing variables in the script)

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.