문제

저는 PHP를 처음 접했고 회사를위한 웹 사이트를 만들고 있습니다. 나는 내가 얻은 기존 코드를 사용하고 있지만 제대로 작동하지 않는 것 같습니다. 어떤 도움이든 큰 감사를드립니다!

나는 변수가 있고 $ ID, 페이지에 표시 할 제품 범주 유형을 식별합니다. 먼저 ID 변수가 설정되었는지 확인해야합니다. 그렇지 않은 경우 변수를 카테고리 0으로 기본값으로 기본값으로 확인해야합니다.

내가 가진 코드는 다음과 같습니다.

setdefault($id, 0);

function setdefault(&$var, $default="") 
{
   if (!isset($var)) 
   {
      $var = $default;
   }
}

따라서 주소 www.website.com/browse.php를 사용하면 $ id = 0으로 기본값을 기대할 것입니다. 주소 www.website.com/browse.php?id=3을 사용하면 $ ID를 3으로 설정하고 관련 제품을 표시 할 것으로 예상됩니다. 그러나 $ ID를 설정하더라도 여전히 기본값이 0으로 표시됩니다. 내 코드에 분명히 잘못된 것이 있습니까?

도움이 되었습니까?

해결책

PHP가 $ _post와 $ _get을 글로벌 변수로 사용하기를 기대하고있을 것입니다. PHP는 하루에 이런 식으로 설정했지만 최신 버전에서는 이러한 변수를 명시 적으로 참조해야합니다.

당신은 이것을 시도 할 수 있습니다 :

setdefault($_GET['id'], 0);

function setdefault(&$var, $default="") 
{
   if (!isset($var)) 
   {
      $var = $default;
   }
}

또는 더 간단하게 (3 원 운영자 사용) :

$id = array_key_exists('id', $_GET) ? $_GET['id'] : 0;

다른 팁

우선 PHP 5.xi 인 경우, &를 사용하여 참조하여 변수를 전달하지 않는 것이 좋습니다. 그것은 말한다. ISSET 함수 호출은 항상 함수와 관련이 있습니다. 그러나 setDefault ($ id, 0)에서 정의되지 않은 변수 경고를 받게됩니다.

대신 이것을 시도하십시오.

$id = isset($id) ? $id : 0;

$ id가 설정되지 않으면 setDefault ($ id, 0)로 호출하면 경고가 생성됩니다. SetDefault와 같은 함수는 PHP에서 작동하지 않습니다. 대신 이것을 사용하십시오.

if (!isset($id)) $id = 0;

$ _get 및 $ _post와 같은 배열 변수에 대해이 작업을 수행하는 경우 다음을 수행 할 수 있습니다.

function getuservar($A, $index, $default = '') {
    if (!isset($A[$index])) return $default;
    if (get_magic_quote_gpc()) return stripslashes($A[$index]);
    return $A[$index];
}

$clean_id = getuservar($_GET, 'id', 0);

이 반환 양식은 즉시 $ _get 배열 사용을 중지하고 나머지 코드에서 청소 된 변수 만 사용하기 때문에 더 좋습니다. 외부 변수를 한 번 청소하고 코드에서 외부 변수를 다시는 건드리지 마십시오. $ a는 $ _get, $ _post, $ _Request 또는 $ _cookie 일 수 있습니다.

또한 성가신 magic_quote 물건을 처리하므로 변수의 데이터가 사용자가 보낸 텍스트임을 알 수 있습니다. 다시 보낼 때 사용자 나 데이터베이스로 다시 보낼 때 다시 정리하는 것을 잊지 마십시오.

어때 $id 설정 중입니까? 만약에 register_globals 꺼져 있고 (그리고 기본적으로 PHP 4.2에서 꺼져 있습니다), 당신은 봐야합니다. $_GET['id'] 또는 $_POST['id'] 대신 (또는 $_REQUEST['id'], 그러나 피해야 할 이유가 있습니다).

설정할 코드 $id 쿼리 문자열에서 언젠가 (browse.php?id=3)도 포함해야합니다. 당신은 생각하고있을 것입니다 register_globals PHP가있는 설정에는 쿼리 문자열에 포함될 때 변수가 자동으로 생성됩니다. 몇 년 동안 그 기능을 다시 활성화하지 마십시오. 몇 년 동안 지금은 정말 나쁜 생각으로 나타났습니다.

쿼리 문자열에서 가져 오는 모든 변수를 사용하기 전에 유형/안전을 확인해야합니다. 예를 들어 변수를 $_GET Super Global, 숫자가 숫자인지 확인하십시오. 기본값을 설정하지 않은 경우 :

if (!is_numeric($_GET['id']) {
  setdefault($_GET['id'], 0);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top