2010-12-10 2 views
0

내가 여러 $의 _GET 값이 긴 URL을 가지고, 그것은 다음과 같습니다 : 의 index.php 카테고리 = 음악 이드 & 예 = 삭제 및 PHP 파일에서 (3211), 나는이 같은 경우 조건이 = & :

if(isseet($_GET['Category']) && isset($_GET['Id']) && !isset($_GET['Delete'])){ 
echo 'Valid page'; 
}elseif(if(isseet($_GET['Category']) && isset($_GET['Id']) && isset($_GET['Delete'])){ 
echo 'delete !'; 
} 

본인의 의견대로 본다면 약 20 개의 유사한 조건이있을 때 매우 복잡합니다.

if(array_all_set(array("Category", "Id"), $_GET) 
    && array_all_set(array("Delete"), $_GET, false)) {/* stuff */} 

을 나는 그것이 많이하지 알고 : 그리고 우리가 예를 들어 스위치 당신에게

+3

모든 변수의 의미와 사용하려는 대상에 따라 다릅니다. 한 상황에 대한 좋은 대답은 다른 상황에 대한 좋은 대답이 아닙니다. 나는 당신이 가지고있는 실제 질문에 대신 그것을 일반 버전으로 만들려고하는 것이 좋습니다. –

+1

"삭제"? 이 요청에 대한 응답으로 삭제하려는 경우 GET이 아닌 POST를 사용해야한다는 것이 거의 확실합니다. – Quentin

답변

1
// if switch is true, check if all are set; if it's 
// false check for none to be set. Defaults to true 
function array_all_set($keys, $vector, $switch=true) 
{ 
    foreach($keys as $key) 
     if($switch == !isset($vector[$key])) 
      return false; 
    return true; 
} 

감사합니다 그리고 지금과 같이 사용,이 작업을 수행하는 몇 가지 간단한 방법이 있는지 알고 싶어요 3 개의 값으로 향상시킬 수 있지만 20 개의 값에 대해 말했듯이 그 배열에 값을 추가하는 것이 전부입니다. 모든

0

먼저, 다음과 같은 코드를 사용하여이 :

if(isseet($_GET['Category'])) 
//do something... 

잘못 그! 당신은 당신의 입력을 위생해야합니다. 그러나 나는 당신이 이미 그것을 알고 있다고 가정 할 것입니다. 문제로 돌아 가면, 사전과 같은 요청 변수를 처리하기 위해 상당히 복잡한 구조를 사용하고 요청을 검증하는 데 사용해야합니다. 아이디어는 다음과 같이 될 것이다 :

class RequestDictionary 
{ 
    private $dictionary; 

    public function RequestDictionary() 
    { 
    foreach ($_GET as $key => $value) 
    { 
     $this->dictionary[$key] => clean_var($value); 
    } 
    } 

    public function hasKeys($keys = array()) 
    { 
    foreach ($keys as $key) 
     if (!isset($this->dictionary[$key])) 
     return false; 

    return true; 
    } 
} 

그리고, 당신의 PHP 페이지에이처럼, 요청 된 URL의 유효성을 확인하기 위해 귀하의 페이지에하는 방법을 확인해야합니다 :

function Validate() 
{ 
    $requestDict = new RequestDictionary(); 
    return $requestDict->hasKeys(array('category', 'id', 'whatever')); 
} 

에 코드를 입력해야 매우 단순해질 수있다. 동일한 스 니펫을 여러 번 코딩 할 때마다 무언가가 추상화되지 않고 있다는 것을 기억하십시오. 극도로 긴 대답을 드려서 미안하지만 수업을 잘 볼 수 있도록 배치해야만했습니다.

희망이 있습니다. David

관련 문제