Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looping through $_POST variables

Tags:

php

mysql

Sorry i could not find a proper title to this question. I have generated the following using a for loop and I have concatenated the names of the submits buttons using the pattern below: submit_edit_category_1 submit_edit_category_2 submit_edit_category_3

echo "<input type='submit' value = 'Edit' name='submit_edit_category_" . 
$obj_categories_admin->categories[$i]['category_id'] . "'/>";

I want to loop through these values so that I can the button action whichis edit_category and the category id which is 1,2 or 3. I want to so something like:

if(isset($_POST) == 'edit_category'))
{
    //code here
}

Someone suggested me to do it this way:

name="submit[which_action][which_category]"  
a1 = $_POST['submit']; 
$which_action = reset(array_keys($a1)); 
$which_category = reset(array_keys($a1[$which_action])); 

This does not seem to work..Can anyone give me a different way to do it? Thanks!

like image 956
chupinette Avatar asked Feb 14 '10 22:02

chupinette


2 Answers

UPD: Please, use Mike's advice. It's much better to have more structured data in POST.

foreach($_POST as $key => $val) {
  if(strpos($key, 'submit_edit_category_') === 0 ) {
    print $key.' => '.$val.'\r\n';
    print substr($key, 21 /* or 22... or 23... try yourself */ );
  }
}
like image 110
Adelf Avatar answered Nov 04 '22 19:11

Adelf


here what I'd do:

for the actual form, I'd use array keys to communicate action and relevant id info.

$cat_id =  $obj_categories_admin->categories[$i]['category_id'];

echo "<input type='submit' value = 'Edit' name='submit[edit_category][" . $cat_id . "]'/>";

then when posted, I can do:

<?php

list($action, $action_params) = each($_POST['submit']);
list($cat_id, $button_label) = each($action_params);

print_r($_POST['submit']); // prints array('edit_category' => array('1' => 'Edit'))
echo($action); //prints "edit_category"
print_r($action_params); //prints array('1' => 'Edit')
echo($cat_id); //prints "1"
echo($button_label); //prints "Edit"

edit: for more info on each(), go here: http://us2.php.net/each . I've personally always felt that 's lack of differentation between the button label and the it's value to be frustrating. Using an array key to stuff info into the button has always been my favorite hack.

like image 42
Mike Sherov Avatar answered Nov 04 '22 21:11

Mike Sherov