循环遍历$ _POST变量

时间:2010-02-14 22:40:08

标签: php mysql

抱歉,我找不到这个问题的正确标题。 我使用for循环生成了以下内容,并使用下面的模式连接了提交按钮的名称: 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'] . "'/>";

我想循环遍历这些值,以便我可以使用edit_category和类别ID为1,2或3的按钮操作。我想这样的事情:

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

有人建议我这样做:

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

这似乎不起作用。任何人都可以用不同的方式来做这件事吗? 谢谢!

4 个答案:

答案 0 :(得分:24)

UPD:请使用Mike的建议。在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 */ );
  }
}

答案 1 :(得分:17)

这是我要做的事情:

对于实际表单,我会使用数组键来传达操作和相关的id信息。

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

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

然后发布时,我可以这样做:

<?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"

编辑:有关每个()的更多信息,请转到此处:http://us2.php.net/each。我个人总觉得按钮标签和它的价值之间缺乏差异令人沮丧。使用数组键将信息填入按钮一直是我最喜欢的黑客。

答案 2 :(得分:2)

你可以试试这个:

foreach ($_POST AS $key=>$value) {
    if (strpos($key, 'submit_edit_category_') !== false) {
        $catID = (int)str_replace('submit_edit_category_', '', $key);
        echo 'Category ID: ' . $catID . '<br />';
    }
}

答案 3 :(得分:0)

我会改变你为此建立名称的方式:

submit__edit_category__1

然后,试试这个:


function filter_by_submit($var)
{
    return stripos($var, "submit") !== false ? true : false;
}

$submits = array_filter(array_keys($_POST), "filter_by_submit");
foreach ($submits as $sub)
{
    if ($_POST[$sub] == "Edit")
    {
        list($submit, $action, $id) = explode("__", $sub);  
        break;
    }
}

$submit将保留字符串"submit"$action将保留"edit_category"$id将保留按下按钮的ID。按下的按钮是通过将其值与标签的值匹配来确定的(即,当按下 submit__edit_category__1 时,值"Edit"被POST)。