2010-02-14 2 views
6

Извините, я не смог найти правильное название для этого вопроса. Я создал следующий используя цикл и я сцепляюсь именами ПРЕДСТАВЛЯЮТ кнопки, используя следующую закономерность: 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])); 

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

ответ

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. Я лично всегда чувствовал, что недостаток разницы между ярлыком кнопки и ее ценность расстраивает. Использование ключа массива для заполнения информации на кнопке всегда было моим любимым взломом.

24

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 */); 
    } 
} 
+2

+1, я понял, что $ _POST на самом деле является массивом! – Aris

+5

Как я вижу здесь, мой ответ имеет лучший рейтинг, чем у Майка. Но это несправедливо. Майк показывает истинный способ сделать это. Ваши данные POST должны быть более структурированными, и если ваши данные являются массивом, он также должен быть массивом в POST. – Adelf

+0

@Adelf Лучше добавить его в начале вашего сообщения – Artiom

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

+0

Что делать, если у меня есть другие кнопки, такие как «Редактировать детали» и «Удалить», кроме «Изменить»? – chupinette

+0

Вы можете использовать переключатель {...} вместо if, чтобы соответствовать действию и значению. –

Смежные вопросы