2009-08-07 4 views
8

는 와우 무슨 충격적인 아마 수천 경우가없는 나는 그것을이든 withoutsetting 변수를 호출하지만이기 때문에 나는 그들이 이해이PHP에서 정의되지 않은 수백 개의 인덱스 통지를 제거하는 방법은 무엇입니까?

Notice: Undefined index: action in C:\webserver\htdocs\header.inc.php on line 18 

같은 공지의 수백이가 쉽게 단지 활성화 오류보고입니다 I 페이지를 50 개의 변수로보고하는 경우 예를 들어 설정하는 방법은 해당 페이지를 올바르게 수정하여 코딩하는 쉬운 방법이 있습니까?

그리고 내 말은하지 않습니다 그냥 내가는 isset을 사용

if ($_GET['p'] == "account.edit.topfriends" || $_GET['action'] == "newmember" || $_GET['p'] == "account.profile.name") { 
    //some more code here 
} 

답변

13

나는 보통 값을 초기화하기 위해 내 스크립트의 상단에 ternary 문을 사용하고 싶다.


$_GET['p'] = (isset($_GET['p']) ? $_GET['p'] : 'default'); 

당신은 아마 더 일반적인 접근 방식을 사용할 수 있지만 다른 변수는 다른 기본 값을 가질 수있는 그 방법은 귀찮은 증명할 수 있어야합니다.

+1

실제로 이것을 페이징에 사용합니다. $ page = (! empty ($ _ GET [ 'page']))? $ _GET [ 'page'] : 0; 그리고 페이지에있을 때 오류가 사라졌지만 아무 페이지도 설정되어 있지 않으면 인덱스 오류 – JasonDavis

+0

을 얻게됩니다. 공백과 isset의 차이점이 있습니다. – rezzif

+0

그리고 array_key_exists(). –

0

확인 배열 요소 처음 게시 된 그 라인의 예입니다 (그것이 그들에게

여기

를 해결하기 위해 가장 좋은 것입니다 생각을 숨기려면) 또는 empty().

예컨대,

if ((!empty($_GET['p'] && $_GET['p'] == "account.edit.topfriends") || 
    (!empty($_GET['action'] && $_GET['action'] == "newmember")) { 
    //some more code here 
} 
+1

값이 0이면 빈 (empty)이 true이고 정의되지 않은 경고를 중지하는 방법을 물어볼 때 isset을 사용하는 것이 좋습니다. – rezzif

+2

또한 닫는 괄호가 없습니다. – troelskn

7

rezzif가해야 할 일은 isset() 호출로 확인하는 것입니다. 배열을 많이 사용하고 돌아가서 많은 수의 isset() 호출을 추가하고 싶지 않으면 항상 우리 함수가 될 수 있습니다. 뭔가 같이 :

function get_index($array, $index) { 
    return isset($array[$index]) ? $array[$index] : null; 
} 

그럼 당신은 변경 될 수 있습니다 귀하의 경우 문 같은 뭔가 : 수행되는 모든 검사가 $_GET에있는 경우

if (get_index($_GET, 'p') == "account.edit.topfriends" || get_index($_GET, 'action') == "newmember" || get_index($_GET, 'p') == "account.profile.name") { 
    //some more code here 
} 

당신은 항상 기능과 하드 코드의 첫 번째 매개 변수를 NIX 수 $ _GET 내 예제에서는 여러 배열에 대해이 작업을 수행한다고 가정합니다.

이 솔루션은 반드시 가장 우아한 것은 아니지만 작업을 완료해야합니다.

+0

감사합니다.이 시도해보십시오. – JasonDavis

+2

+1이 답변을 좋아합니다. 이사회 전체에서 할 수있는 옵션을 제공합니다. 한 가지 추가 사항은 기본값에 대해 선택적 매개 변수를 추가하는 것입니다. 함수 get_index ($ array, $ index, $ default = null) { return isset ($ array [$ index])? $ array [$ index] : $ default; } – rezzif

0

GET 및 POST 정의되지 않은 색인 알림을 영구히 제거하십시오. 이것을 문서의 맨 위에 넣으십시오 ...

관련 문제