Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

POST an array from an HTML form without javascript [duplicate]

Tags:

html

post

forms

php

I have a form that is a little complex and I am hoping to simplify the server-side (PHP) processing by natively POSTing an array of tuples.

The first part of the form represents a User:

  • First Name
  • Last Name
  • Email
  • Address
  • etc

The second part of the form represents a Tree:

  • Fruit
  • Height
  • etc

The problem is that I need to be able to POST multiple Trees for a single User in the same form. I would like to send the information as a single User with an array of Trees but this might be too complex to do with a form. The only thing that comes to mind is using javascript to create some JSON message with a User object and an array of Tree objects. But it would be nice to avoid javascript to support more users (some people have scripts turned off).

like image 812
styfle Avatar asked Jan 31 '12 02:01

styfle


People also ask

How can we send arrays in HTML forms?

You can create arrays in form fields using square brackets. That means you can name fields like account[first_name] and account[last_name] and in most server-side languages, you will end up with an 'account' array.

How to get array input from user in HTML?

To access all the values entered in input fields use the following method: var input = document. getElementsByName('array[]'); The document.


2 Answers

check this one out.

<input type="text" name="firstname"> <input type="text" name="lastname"> <input type="text" name="email"> <input type="text" name="address">  <input type="text" name="tree[tree1][fruit]"> <input type="text" name="tree[tree1][height]">  <input type="text" name="tree[tree2][fruit]"> <input type="text" name="tree[tree2][height]">  <input type="text" name="tree[tree3][fruit]"> <input type="text" name="tree[tree3][height]"> 

it should end up like this in the $_POST[] array (PHP format for easy visualization)

$_POST[] = array(     'firstname'=>'value',     'lastname'=>'value',     'email'=>'value',     'address'=>'value',     'tree' => array(         'tree1'=>array(             'fruit'=>'value',             'height'=>'value'         ),         'tree2'=>array(             'fruit'=>'value',             'height'=>'value'         ),         'tree3'=>array(             'fruit'=>'value',             'height'=>'value'         )     ) ) 
like image 196
Joseph Avatar answered Sep 25 '22 00:09

Joseph


You can also post multiple inputs with the same name and have them save into an array by adding empty square brackets to the input name like this:

<input type="text" name="comment[]" value="comment1"/> <input type="text" name="comment[]" value="comment2"/> <input type="text" name="comment[]" value="comment3"/> <input type="text" name="comment[]" value="comment4"/> 

If you use php:

print_r($_POST['comment'])  

you will get this:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' ) 
like image 25
Dan Avatar answered Sep 23 '22 00:09

Dan