2009-07-30 17 views
7

Benim PHP sayfalarımda bulabildiğim satırlar ve bu gibi görünen kod satırları ile bitiyor:PHP'de POST değişkenlerini kontrol etmek için daha iyi bir yol var mı?

$my_id = isset($_REQUEST['my_id']) ? $_REQUEST['my_id'] : ''; 
$another_var = isset($_REQUEST['another_var']) ? $_REQUEST['another_var'] : 42; 
... 

Bu diziyi kontrol etmek ve bunları yerel bir ağa atamak için daha iyi, daha özlü veya daha okunaklı bir yol var mı Varsa değişken var mı yoksa varsayılan değil mi?

DÜZENLEME: register_globals() kullanmak istemiyorum - yine de isset problemi var.

+0

İyi bir soru. –

+0

Oy vermek için yeteri kadar oy yok, ancak bu cevapları beğeniyorum! – BabyCakes

+1

Vay, biri burada mutlu değil. Ne verir? –

cevap

6

Bir işlevde nasıl sarılır?

+0

Bunu beğendim ama günlük oy limitine ulaştım. Aynı cevabı yazmanın tam ortasındaydım. –

+2

Değiştireceğim tek şey işlev adı, daha kısa bir şey. Bence post() daha güzel geliyor. o da _COOKIE verileri içermektedir olarak – Thinker

4

Daha iyi bir yöntem, istek verilerinin kontrol ayrıntılarını ortadan kaldırmak için bir tek/statik sınıf oluşturmak olabilir.

şey gibi:

class Request { 

    private $defaults = array(); 
    private static $_instance = false; 

    function getInstance() { 
    if (!self::$_instance) { 
    $c = __CLASS__; 
     self::$_instance = new $c; 
    } 
    return self::$_instance; 
    } 

    function setDefaults($defaults) { 
    $this->defaults = $defaults; 
    } 

    public function __get($field) { 
    if (isset($_REQUEST[$field]) && !empty($_REQUEST[$field])) { 
     return $_REQUEST['field'];   
     } elseif (isset($this->defaults[$field])) { 
     return $this->defaults[$field]; 
     } else { 
     return ''; # define a default value here. 
     } 
    } 
} 

sonra yapabilirsiniz:

# get an instance of the request 
$request = Request::getInstance(); 

# pass in defaults. 
$request->setDefaults(array('name'=>'Please Specify')); 

# access properties 
echo $request->name; 
echo $request->email; 

Ben bu tasarıma sahip daha temiz ve özetleri uzakta kapsam doğrulama vb Artı yükler bireysel komut yükleri yapar düşünüyorum uzatın/alternatif davranışlar ekleyin, daha karmaşık varsayılan işleme vb. ekleyin.

+0

Bu işe nasıl Herhangi örnek? Neler olup bittiğini anlamak gibi görünüyor. Belki de takip etmiyorum ... – BabyCakes

+0

evet - şimdi onu doldurdu! – benlumley

+0

Bunu beğendim - :-) – BabyCakes

1

Komut dosyasının yazıldığı sırada beklediğiniz değişken kümesidir. g ya da keyfi bir değerler dizisi için bunu yapmak ister misiniz? Eski doğruysa, böyle bir şey yapabileceğini:

Temelde
# This array would hold the names of all the variables you're expecting 
# and a default value for that variable name 
$variableNames = array (...); 
foreach ($variableNames as $key => $default) { 
    if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key]; 
    else $$key = $default; 
} 

, bu anahtar $$ için (dolayısıyla çift dolar diğer değişkenler oluşturmak için değişkenleri değerlendirmek için PHP'nin yeteneği yararlanır - Bu yaratmak demektir adı $ anahtarı olan yeni bir değişken). Bu durum için henüz iyi bir çözüm bulmuyorum.

2

Önce, POST değişkenleri için $_POST kullanın. $_REQUEST, sadece $_POST'a değil, birçok farklı gelen değişkenin birleşimidir ve sorunlara neden olabilir.

Sorunuz için bir çözüm, isset() mantığını işleyen bir işlev oluşturmak olabilir. Her şeyden

function ForceIncomingValue($Key, $Default) { 
    if (!isset($_POST[$Key])) 
     return $Default; 
    else return $_POST[$Key]; 
} 
+0

evet, bazen bazen GET kullanmak yüzden sadece Yine _REQUEST – BabyCakes

+2

kullanmak POST, _REQUEST güvenilemez. Hepimiz yıllarca yerde İSTEK kullandım ve herhangi bir sorun görmedim – matpie

+0

ilginç: belgelere bakın. Çerezleri kullanmasak da ... belki de bununla bir ilgisi vardır. – BabyCakes

2

ilk, $ _REQUEST değişkeni kullanabilirsiniz ASLA, bu gelişimi sırasında böcek ve diğer sorunlar bu kodu değişkeni boş $ _POST [$ anahtarını bırakır


function getPOST($key) { 
    if(isset($_POST[$key])) { 
     return $_POST[$key]; 
    } 
}

not yöneteceksiniz ] ayarlanmamışsa, bu kod, değer yüklenemediğinde size (mantıklı) bir varsayılan vermenizi sağlamak için de uyarlayabilirsiniz.

 
function getPOST($key, $default = NULL) { 
    if(isset($_POST[$key])) { 
     return $_POST[$key]; 
    } else { 
     return $default; 
    } 
}
+0

bilmiyordum, http://php.net/request – BabyCakes

İlgili konular