2010-02-14 4 views
6

죄송합니다.이 질문에 대한 적절한 제목을 찾을 수 없습니다. I를 이용한 다음 생성 한 루프 용 및 I는 다음 패턴 이용을 제출 버튼 이름 연접 가지고 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'] . "'/>"; 

제가 이들 값을 반복 수행 할를 그래서 I 수있는 edit_category whichis 버튼 액션과 내가 원하는 1, 2 또는 3 인 카테고리 ID 너무 뭔가 같은 :

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은 누른 버튼의 ID를 유지합니다. 눌려진 버튼은 그 값을 태그의 값과 일치시킴으로써 결정됩니다 (즉, submit__edit_category__1을 누르면 "Edit"이 게시됩니다).

+0

세부 편집과 편집과 같은 다른 버튼이 있으면 어떻게합니까? – chupinette

+0

if 대신 {...} 스위치를 사용하여 작업과 값을 일치시킬 수 있습니다. –