2010-02-14 46 views
6

Lo siento, no pude encontrar un título adecuado para esta pregunta. He generado el siguiente utilizando un bucle y he concatenado los nombres de los botones somete utilizando el siguiente patrón: 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'] . "'/>"; 

quiero colocar a través de estos valores para que pueda la acción del botón whichis edit_category y la categoría ID que se 1,2 o 3. Quiero así que algo como:

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

Alguien me sugirió que hacerlo de esta manera:

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

Esto no parece funcionar ... ¿Alguien puede darme una manera diferente de hacerlo? Gracias!

Respuesta

17

aquí lo que haría:

de la forma real, que haría uso de claves de matriz para comunicar la acción y la información de identificación correspondiente.

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

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

entonces cuando se publiquen, que puedo hacer:

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

de edición: para obtener más información sobre cada una(), entra aquí: http://us2.php.net/each. Personalmente siempre he sentido que la falta de diferenciación entre la etiqueta del botón y su valor es frustrante. Usar una tecla de matriz para ingresar información en el botón siempre ha sido mi hack favorito.

24

UPD: Por favor, use el consejo de Mike. Es mucho mejor tener datos más estructurados en 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, me di cuenta de que $ _POST es en realidad una matriz! – Aris

+5

Como veo aquí, mi respuesta es mejor que la de Mike. Pero no es justo :) Mike muestra la verdadera forma de hacerlo. Sus datos POST deberían ser más estructurados y si sus datos son la matriz, también deberían ser una matriz en la POST. – Adelf

+0

@Adelf Sería mejor agregarlo al comienzo de su publicación – Artiom

2

Puede probar esto:

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

que cambiaría la forma en que se genera el nombre a esta:

submit__edit_category__1

A continuación, intente esto:


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 llevará a cabo la cadena "submit". $action contendrá "edit_category" y $id mantendrá la identificación del botón presionado. El botón presionado se determina al hacer coincidir su valor con el valor de la etiqueta (es decir, cuando se presiona submit__edit_category__1, se envía el valor "Edit").

+0

¿Qué sucede si tengo otros botones como Editar detalles y Eliminar aparte de Editar? – chupinette

+0

Puede usar un interruptor {...} en lugar de un if para hacer coincidir la acción y el valor. –

Cuestiones relacionadas