2014-04-26 3 views
0

가 나는, 당신이 상상할 수 있듯이차별화

localhost/customermanager/customerdetail.php?customerID=2 url.  

처럼 보이는 URL을 사용하여 고객 데이터를 표시하는 customerDetails.php 페이지가 내가 얻을 같은 페이지에 필요한 작업을 수행 고객 ID는 $_GET['customerID'] PHP 코드를 사용합니다. 이제는 고객을 거부하거나 승인 할 수있는 두 개의 버튼이 있습니다. 이 버튼들은 같은 페이지에 있습니다. 그래서 내가하려는 것은 클릭 한 버튼을 확인하고 그에 따라 업데이트 쿼리를 수행하는 것입니다. 업데이트 쿼리는 동일한 페이지에 있으므로 폼의 동작은 # 또는 자체로 설정됩니다. 문제는 버튼을 클릭하면 양식이 전송되지만 URL이 다른 것으로 바뀌고 customerID=2 부분이 제거된다는 것입니다. 페이지에 고객의 세부 정보가로드되기 때문에 URL에 customerID=2 부분이 없으므로 오류가 발생합니다. 하나의 양식에 두 개의 단추가 있고이를 클릭 한 다음 동일한 양식의 insert 문을 수행하는 방법이 있습니다. 더 좋은 방법이 있다면 그것을 시도해보십시오.

감사

+0

양식에 입력 숨김 유형을 사용하십시오. –

답변

0

당신은 당신의 폼 내부에 추가 (숨겨진) 입력 필드와 고객 ID 값을 포함 할 수 있습니다

<input type="hidden" name="customerID" value="2" /> 

값이 쉽게 길을 잃지 않고 페이지 사이를 통과 할 수있는 방법입니다. 또한 세션 변수를 사용할 수도 있습니다. 두 가지 방법 모두 장단점이 있습니다. 위의 방법이 가장 쉽습니다.

때로는 스크립트의 초기화에 집중하지만 유연한 방식으로 런타임 인수를 따기 때 일을 더 쉽게합니다 또한

if (FALSE=== ($customerID = ( isset($_POST['customerID']) 
           && is_numeric($_POST['customerID'])) 
           ? (int)$_POST['customerID'] 
           : ( isset($_GET['customerID']) 
            && is_numeric($_GET['customerID'])) 
             ? (int)$_GET['customerID'] 
             : NULL)) 
    throw Exception('No numeric customerID value specified at runtime'); 

나는 종종 몇 가지 추가 세부 사항 및 로그 자체를 받아들이는 고객의 예외를 구현 발생했을 때의 커스텀 로그 파일. 이것은 이러한 오류 처리 코드를 별도의 파일로 푸시하고 주 코드를 깨끗하고 간결하게 유지합니다.

+0

자, 내가 이렇게 숨겨진 입력을했다고 가정 해 보겠습니다. 그러면 어떻게하면 customerID 값을 얻을 수 있습니까? 페이지가로드됩니다. 내 말은 버튼이 클릭되면 페이지가로드되고 나는 을 가져와 URL에서 customerID를 먼저 가져와야한다고 생각합니다. $ _GET [ 'customer_id']. 그것이 작동하지 않는다면 (버튼을 클릭 한 후 의미가 있음) 숨겨진 입력 값에서 값을 가져와야합니다. – EngAbth9

+0

맞습니다. 요청 인수에서 값을 얻습니다. 따라서 URL에서 $ _GET 변수의 값을 찾아보십시오. 그러나 그것은 두 가지 상황에서 동일합니다. 당신은 항상 _ _ GET (또는 폼에 POST 메서드를 선택한 경우 $ _POST)에서 해당 ID를 얻습니다. 따라서 다른 전략을 구현할 필요가 없습니다. $ _GET을 살펴보면 값이 있거나 뭔가 잘못되었다는 것을 알 수 있습니다. 단순한. – arkascha

+0

내 문제는 내 양식의 게시 방법과 같았습니다. 나는 그것을 선택하고 클릭 한 단추를 선택하고 쿼리를 실행할 코드를 작성했습니다. if (isset ($ _ POST [ 'approveButton'])) { \t $ result = mysql_query ("UPDATE 고객 SET 승인 = 1 WHERE ID = 4"); } – EngAbth9

0

두 번째 버튼을 누르면 customerID가 제거되는 것이 의도 된 것으로 가정합니다. 이러한 경우 는 간단한 방법은 예를 들어 isset()

사용하여, 항상

if (isset($_GET['customer_id')) { 
/* process customer id part */ 
} 
else 
{ 
    /* Second button part */ 
} 
0

할 데이터를 확인하는 것입니다 : 물론

if (isset($_GET['customerID'])) { 
    // do something. 
} 

, 당신은 코드가 깔끔합니다. 따라서 다음과 같이 래퍼 함수를 ​​만들 수 있습니다.

function get($item) { 
    return (isset($_GET[$item]))? $_GET[$item] : false; 
} 

버튼을 클릭하면 페이지가 다시로드된다는 문제가 있다고 생각합니다. 따라서 입력 유형을 submit으로 변경하는 대신 button을 사용하십시오. 또한 사용자가 approve 또는 unapprove을 누를 때 숨겨진 입력을 사용하여 값을 저장하십시오.

HTML 버튼과 숨겨진 입력 :

<input type="button" id="approve" value="Approve" /> 
<input type="button" id="unapprove" value="Unapprove" /> 
<input type="hidden" id="selected" value="false" /> 

자바 스크립트 처리기 :

는 여기에서, 당신은 (클릭()를 사용합니다) 이벤트 핸들러에있는 버튼을 바인딩 할 수 있습니다

document.getElementById('approve').onclick = function() { 
    document.getElementById('selected').value= true; 
}; 

document.getElementById('unapprove').onclick = function() { 
    document.getElementById('selected').value= false; 
}; 

이제 페이지를 다시로드 할 필요가 없습니다 (서버 대역폭과로드 시간을 절약 할 수 있음).).

+0

자세한 답변을 주셔서 감사합니다.하지만 정확히 어디에 업데이트 문에 대한 쿼리를 넣을까요? 의미가있는 해당 승인 단추가 클릭 된 경우 UPDATE 고객 SET 승인 = 1 ID가 35 이고 거부 단추를 클릭하면 UPDATE 고객 승인과 같은 항목 승인 됨 = 0 WHERE ID = 35 – EngAbth9

+0

페이지가 다시로드되지 않기 때문에'URL'에'customerID'가 있습니다. 이 값은 현재 코드로 얻을 수있다 ('$ _GET [ 'customerID']') 또한, 숨겨진 입력'selected'을 체크하여 어떤 버튼이 선택되었는지 알 수있다. 'name = "selected"를이 입력에 추가하면 PHP를 통해 데이터를 얻을 수 있습니다. 'form method = "POST"이면,'$ _POST'를 사용하십시오; 'method = "GET"'이면'$ _GET'을 사용하십시오. 생각해 보시지. 왜 라디오 박스를 사용하지 않으시겠습니까? 페이지를 다시로드하지 않고 동일한 결과를 얻을 수 있습니까? – Kai