PHP / HTML - isset fonksiyonu

5 Cevap php

Ben PHP için oldukça yeni ve benim şirket için bir web sitesi oluşturma. Ben almış ama düzgün çalışması için görünmüyor olabilir varolan bazı kod kullanıyorum - herhangi bir yardım çok duyacağız!

Ben sayfada görüntülenecek ürün kategorisi türünü tanımlayan, $id bir değişken var. Ben ilk id değişkeni ayarlamak ve değilse, kategori 0 değişkeni varsayılan olduğunu kontrol etmeniz gerekir.

Ben aşağıdaki gibi olması kodu:

setdefault($id, 0);

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

Adrese www.website.com / browse.php ile Peki, ben $ id = 0 varsayılan beklediğiniz; adres www.website.com/browse.php?id=3 ile, ben 3 $ id set ve ilgili ürünleri görüntülemek için beklenebilir. Ancak, $ id ayarı rağmen, 0'a hala varsayılan. Benim koduyla Açıkçası yanlış bir şey var mı?

5 Cevap

Muhtemelen PHP global değişken olarak $ _POST ve $ _GET kullanmak için bekliyoruz. PHP geri gün, bu şekilde kurulum olarak kullanılan, ancak daha yeni sürümleri açıkça bu değişkenleri referans gerektirir.

Bu deneyebilirsiniz:

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

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

hatta daha basitçe (üçlü operatörünü kullanarak):

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

Bu eğer Öncelikle, PHP 5.XI son derece & kullanarak referans değişkenleri geçemiyor öneririz. Söyleniyor. isset işlev çağrısı her zaman işlevi Withing doğru olacaktır. Ama SetDefault tanımsız bir değişken uyarı alırsınız ($ id, 0);

Bunun yerine bu deneyin.

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

$ Id ayarlı değilse, SetDefault için çağrı ($ id, 0) bir uyarı oluşturur. SetDefault gibi bir işlevi PHP çalışmaz. Bunun yerine bu kullanın.

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

Eğer $ _GET ve $ _POST gibi dizi değişkenleri, bu yapıyorsanız, bunu yapabilirsiniz:

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);

Hemen $ _GET dizisini kullanarak durdurmak ve sadece kod kalanında temizlenir değişkenleri kullanın çünkü bu geri dönüş formu iyidir. Sen bir kez dış değişkenleri temizlemek ve kod tekrar dış değişkenleri asla dokunmayın. $ A $ _GET, $ _POST, $ _REQUEST veya $ _COOKIE olabilir.

Eğer değişken veri kullanıcı tarafından gönderilen metin olduğunu biliyorum bu yüzden de sizin için can sıkıcı magic_quote şeyler işler. Sadece kullanıcı veya veritabanına geri gönderirken tekrar temizlemek için hatırlıyorum.

Nasıl $id set ediliyor? register_globals kapalı (ve PHP 4.2 ve yeni varsayılan olarak kapalıdır) ise, $_GET['id'] bakmak veya $_POST['id'] yerine (veya {[(4 gerekir )]}, ama önlemek için nedenler) vardır.

$id ayarlamak için kod bazen sorgu dizesinden (browse.php?id=3) da dahil edilmesi gerekir için. PHP sorgu dizesinde dahil olduğunda otomatik olarak değişkenleri yaratacak olan register_globals ayarları düşünce olabilir. ETMEYİN özelliğini yeniden etkinleştirmek, birkaç yıl için şimdi bu gerçekten kötü bir fikir olduğu gösterilmiştir.

Eğer sorgu dizesinden çekerek herhangi bir değişken kullanmadan önce tipi / güvenlik için kontrol edilmesi gerekir. : Yani, örneğin sizden daha sonra varsayılan olarak ayarlamak değilse $_GET süper global, bu sayısal olmadığını görmek için kontrol değişkeni çekme olabilir

if (!is_numeric($_GET['id']) {
  setdefault($_GET['id'], 0);
}