0

I have a php html form that submits to another page, this page is submitting a large number post variable data. I know I can convert each posted variable into local variable by define a local variable $data1 = $POST["data1"}. But I want to avoid this because there are tons of variables.

Here is the example dump of post variables.

array(59) { ["manufacturer"]=> string(10) "Dell Inc. " ["systype"]=> string(11) "Space-aving" ["model"]=> string(15) "OptiPlex GX520 " ["serial"]=> string(7) "GVHNT1J" ["boardserial"]=> string(17) "..CN6986156K0B61." ["proc_vendor"]=> string(5) "Intel" ["proc_type"]=> string(15) "Central Proceor" ["proc_family"]=> string(9) "Pentium 4" ["proc_cores"]=> string(0) "" ["proc_core_enabled"]=> string(0) "" ["proc_thread_count"]=> string(0) "" ["proc_external_clock"]=> string(7) "800 MHz" ["proc_max_speed"]=> string(8) "4000 MHz" ["proc_speed"]=> string(8) "2800 MHz" ["proc_socket"]=> string(10) "ZIF Socket" ["proc_charateristic"]=> string(0) "" ["proc_cache"]=> string(7) "1024 kB" ["ram"]=> string(4) "3GiB" ["ram_type"]=> string(3) "DDR" ["on_board_device1"]=> string(35) "Intel Graphic Media Accelerator 950" ["on_board_device2"]=> string(42) "Broadcom 5751 NetXtreme Gigabit Controller" ["on_board_device3"]=> string(21) "AC97 Audio Controller" ["on_board_device4"]=> string(4) "None" ["on_board_device5"]=> string(4) "None" ["port_connector1"]=> string(10) "Audio Port" ["port_connector2"]=> string(12) "Network Port" ["port_connector3"]=> string(17) "Parallel Port PS2" ["port_connector4"]=> string(29) "Serial Port 16550A Compatible" ["port_connector5"]=> string(3) "USB" ["port_connector6"]=> string(10) "Video Port" ["port_connector7"]=> string(4) "None" ["port_connector8"]=> string(4) "None" ["storage_controller1"]=> string(58) "Intel Corporation 82801G ICH7 Family IDE Controller rev 01" ["storage_controller2"]=> string(67) "Intel Corporation NM10ICH7 Family SATA Controller [IDE mode] rev 01" ["hard_disk1"]=> string(4) "40GB" ["hard_disk2"]=> string(4) "None" ["hard_disk3"]=> string(4) "None" ["hard_disk4"]=> string(4) "None" ["optic_drive"]=> string(6) "CD-ROM" ["display"]=> string(63) "Intel Corporation 82945GGZ Integrated Graphic Controller rev 02" ["network"]=> string(44) "NetXtreme BCM5751 Gigabit Ethernet PCI Expre" ["wirelessnetwork"]=> string(4) "None" ["multimedia"]=> string(40) "82801G ICH7 Family AC97 Audio Controller" ["camera1"]=> string(4) "None" ["date"]=> string(10) "2017-02-09" ["stime"]=> string(8) "17:35:23" ["grade"]=> string(1) "A" ["uuid"]=> string(36) "44454C4C-5600-1048-804E-C7C04F54314A" ["asset_tag"]=> string(4) "None" ["pwr_on_pwd"]=> string(7) "Enabled" ["key_pwd"]=> string(15) "Not Implemented" ["admin_pwd"]=> string(7) "Enabled" ["front_panel_reset"]=> string(15) "Not Implemented" ["customer"]=> string(9) "Cutomer-A" ["batch"]=> string(14) "Batch-03948383" ["origin"]=> string(8) "Autralia" ["custref"]=> string(6) "Au_cut" ["ourref"]=> string(10) "no_comment" ["comments"]=> string(11) "our_comment" }

I am happy to use the variable name that is passed in the post data. Thank you in advance.

user2107349
  • 191
  • 2
  • 3
  • 16
  • Why create variables to reference every value when you could just reference the value in the array? – Matt S Apr 18 '17 at 15:50

4 Answers4

2

This is a horrible idea, but if you absolutely must, you can use the extract() function for this:

$array = array(
    'foo' => 'bar',
    'bar' => 'baz'
);

extract($array);

echo $foo; // 'bar'
echo $bar; // 'baz'

See http://php.net/extract for more details.

rickdenhaan
  • 10,857
  • 28
  • 37
  • Examples of why it's a horrible idea: http://stackoverflow.com/questions/829407/what-is-so-wrong-with-extract – Matt S Apr 18 '17 at 18:52
  • I have tried this, but does not work for me. I know it is a horrible idea, but it is best suited for my needs. I have tried but I get HTML 500 error. $array = ($_POST); extract($array); echo "this is manufacturer" $manufacturer; – user2107349 Apr 19 '17 at 10:10
  • Then you're doing something else wrong :-) Check your error logs to see what error PHP is throwing that's causing Apache to give you a 500 error. – rickdenhaan Apr 19 '17 at 18:14
0

You can loop through the $_POST with the $$:

foreach($_POST as $variable => $value)
    $$variable = $value;

Then if you do a var_dump($manufacturer):

string(10) "Dell Inc. "
Chin Leung
  • 14,621
  • 3
  • 34
  • 58
0

The answer from @rickdenhaan is the best one for this, but there's another way of doing it, it's not a good idea, and certainly not pretty:

foreach ($_POST as $key => $value) {
    $$key = $value; // yes, a double $$ - not pretty and a pain to debug!
}
gabe3886
  • 4,235
  • 3
  • 27
  • 31
-1

Use $_POST Global variable and get all the values submitted using key value pair.

foreach ($_POST as $key => $value){
    $$key=$value;
}
BetaDev
  • 4,516
  • 3
  • 21
  • 47