Цитирование через переменные $ _POST

Извините, я не смог найти подходящего названия для этого вопроса. Я создал следующее, используя цикл 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, и идентификатор категории, который равен 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])); 

Кажется, это не работает. Может ли кто-нибудь дать мне другой способ сделать это? Благодаря!

вот что я сделал бы:

для фактической формы я бы использовал ключи массива для связи действия и соответствующей информации о идентификаторе.

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

edit: для получения дополнительной информации о каждом (), перейдите сюда: http://us2.php.net/each . Я лично всегда чувствовал, что недостаток разницы между ярлыком кнопки и ее ценность расстраивает. Использование ключа массива для заполнения информации на кнопке всегда было моим любимым взломом.

UPD: Пожалуйста, используйте совет Майка. Гораздо лучше иметь более структурированные данные в 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 */ ); } } 

Вы можете попробовать следующее:

 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 />'; } } 

Я бы изменил способ создания имени:

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 будет содержать идентификатор нажатой кнопки. Нажатая кнопка определяется путем сопоставления ее значения с значением тега (т. Е. При нажатии submit__edit_category__1 значение "Edit" отправляется).