Цикличное выполнение через $ _POST переменные

Извините я не мог найти надлежащий заголовок к этому вопросу. Я генерировал следующее использование для цикла, и я конкатенировал, названия отправляет кнопки с помощью шаблона ниже: 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'] . "'/>";

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

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

6
задан chupinette 14 February 2010 в 22:40
поделиться

4 ответа

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

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

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

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

17
ответ дан 8 December 2019 в 02:12
поделиться

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

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" отправляется POST).

0
ответ дан 8 December 2019 в 02:12
поделиться

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 */ );
  }
}
25
ответ дан 8 December 2019 в 02:12
поделиться

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

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 />';
    }
}
2
ответ дан 8 December 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: