2012-12-23 4 views
0

안녕하세요, 누군가 내 조건문에서 잘못 수행 한 것에 대해 도와 드릴 수 있습니까?PHP 조건문

if(isset($_GET['input'] or $_GET['input2'] or $_GET['input3'])) 
{ 
    $release=$_GET['input'].$_GET['input2'].$_GET['input3']; 
    echo $release; 
} 

편집 : ERROR는 syntax error, unexpected T_LOGICAL_OR, expecting ',' or ')'

당신은 isset 확인하려는 모든 매개 변수 하나에 여러 통화를 할 필요가
+0

이 조건부가 확인해야하는 것은 무엇입니까? – MarcinJuraszek

+0

입력이 설정되어 있는지 확인한 다음 변수에 입력하고 에코 아웃합니다. 일반적으로 모든 입력 값은 /가 기본값입니다. –

답변

5

입니다!

or의 우선 순위는 ||이며, 일반적으로 후자를 원합니다.

변수가 아닌 isset에 복합 표현식을 전달하므로 구문 분석 오류가 발생합니다. 그것은 일반적인 기능은 아니지만,이 문서에 의해 지적으로 자신의 임의의 규칙이 왜 별도의 언어 구조는 다음과 같습니다

isset() only works with variables as passing anything else will result in a parse error.

아마도

당신이 PHP가 자연 언어를 에뮬레이트 생각을하고 따라서 읽기 "Is input or input2 or input3 set?"으로

오해입니다. 경우, 그것은 논리적으로 OR 처음에 함께 값, 그리고 그것은 그 시간에 의해 하나의 값-isset —, 당신의 변수에 대한 모든 연결이 손실되고 남아있는 유일한 것은이다 유효한 구문을 통과 할 것이라고했다 true 또는 false 중 하나에 isset이 적용됩니다.

+0

무엇? 아니야. 루프에 대해 들어 본 적이 있습니까? – Kush

+1

@Kush 이것은 루프를 사용하는 것이 바보 같지만, 물론 기술적으로 할 수 있습니다. – phant0m

4
if(isset($_GET['input']) || isset($_GET['input2']) || isset($_GET['input3'])) 

하지만 실제로 여기가 필요하다고 생각합니다. 그렇지 않으므로 변경하십시오. 내가 정확하다면 & &으로.

+0

나는 또한 그가 –

3

각 매개 변수에 대해 isset을 별도로 호출해야합니다. isset()은 단일 매개 변수를 허용하고 이에 따라 응답합니다.

자세한 내용은 isset을 확인하십시오.

보너스 팁 : 데이터베이스 쿼리에서 이러한 변수를 사용하는 경우이 , 당신이 당신의 오류가 해결됩니다 가능한 SQL 주입

+1

"이 확장은 PHP 5.5.0에서 더 이상 사용되지 않습니다." 왜 PDO에 연결하지 않을까요? – Kush

+2

아, 피하기 - 주사 - 항상 - upvote - bringer! 아무도 데이터베이스에 대해 언급하지 않았으므로 이는 단지 임의의 조언 일뿐입니다. 오, 그는 XSS injection과 CSRF에 대해서도 알고 있어야합니다. 왜냐하면 우리는 그 사람이 페이지에서 더 많은 것을 읽을 수있을 것이라고 생각했습니다. –

+0

@ Kush. 어쨌든, 나는 링크를 업데이트했다. –

2

을 방지하기 위해 mysqli_real_escape_string()을 사용해야합니다

if(isset($_GET['input']) or isset($_GET['input2']) or isset($_GET['input3'])) 
{ 
    $release=$_GET['input'].$_GET['input2'].$_GET['input3']; 
    echo $release; 
} 

을하지만 때문에 ' AND 대신에 OR을 다시 테스트하면 OR 조건 중 하나에 해당하는 OR 테스트가 필요하며, 나머지 두 가지가 설정되지 않은 경우에도 알림/오류가 표시됩니다.

당신은

if (isset($_GET['input']) && isset($_GET['input2']) && isset($_GET['input3'])) { 
    //... 
} 

처럼 뭔가를 할 것, 세 가지의 존재를 확인하려면이 아마 당신은 지저분한 테스트없이 달성하기 위해 노력하고 무엇을하지 :

// count will return however many key=>val pairs are in the array, 
// 0 will fail 
if (count($_GET)) { 
    // an empty array and an empty string to hold iterated results 
    $get = array(); 
    $release = ''; 
    // iterate through $_GET and append each key=>val pair to the local array, 
    // then concat onto the string 
    foreach($_GET as $key=>$val) { 
     $get[$key] = $val; 
     $release .= $get[$key]; 
    } 
    echo $release; 
} 

HTH :)


편집 : 표시된 다른 항목과 같이 배열 키가 모두 설정되어 있는지 테스트해야하는 경우 0을 건너 뜁니다.

// extract imports all of the array keys into the symbol table. 
// It returns the number of symbls imported, and automatically 
// sets vars using keys for var name: 
if (extract($_GET) && isset($input,$input2,$input3)) { 
    echo $release = $input.$input2.$input3; 
} 

(.는 isset에 전달 여러 인수를 사용하여)

  • HTH :
3

이 질문에 대한 모든 현재 답변의 중요한 기능을 그리워 :루프 그냥 이렇게 isset : 동시에 여러 변수를 확인할 수 있습니다. the manual에서 : 모든 _GET 요소가 설정되어있는 경우이 조건 만 전달합니다

if (isset($_GET['input'], $_GET['input2'], $_GET['input3'])) { 

:

If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered.

그래서이 경우 당신은 이런 식으로 뭔가를 할 수 있습니다.