PHP POSTed değişkenleri kontrol etmek için daha iyi bir yolu var mı?

5 Cevap php

Ben bu gibi bakmak hatları ve satır kod ile sonuna kadar benim PHP sayfalarında bulabilirsiniz:

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

Bu dizi kontrol ve varsa yerel bir değişkene atamak ya da yoksa bir varsayılan uygulamak için daha iyi, daha kısa veya daha okunabilir bir yolu var mı?

EDIT: register_globals() kullanmak istemiyorum - Ben hala yine isset sorun olurdu.

5 Cevap

Nasıl bir işlevi sarma hakkında?

<?php

function getPost($name, $default = null) {
    return isset($_POST[$name]) ? $_POST[$name] : $default;
}

daha iyi bir yöntem isteği verileri denetleme detayları uzak soyut bir singleton / statik bir sınıf oluşturmak için olabilir.

Gibi bir şey:

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;

Bu sizin bireysel komut yükler temiz yapar ve doğrulama vb uzakta soyutlayan Plus, bu tasarım ile kapsam yükleri vs vs işleme daha karmaşık varsayılan ekleyin, alternatif davranışları ekleme / genişletmek için düşünüyorum

Birincisi, POSTed değişkenler için $_POST kullanın. $_REQUEST, birçok farklı gelen değişkenler, sadece $_POST bir mashup ve sorunlara neden olabilir.

Sorunuza bir çözüm isset() mantığı işleyen bir işlev oluşturmak olacaktır.

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

her şeyden önce, $ _REQUEST değişkeni kullanın ASLA, bu gelişim sırasında böcek ve diğer sorunlara neden olacak

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

Bu kod $_POST[$key] ayarı yapılmadan değişken boş bırakır unutmayın

Eğer yerine de değer yüklenecek edilemeyen bir (mantıklı) varsayılan sağlamak için etkinleştirmek için bu kodu adapte olabilir.

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

Veya değerler keyfi bir kümesi için bunu yapmak için size scriptin yazma zaman bilinen bekliyorlar değişkenler kümesi istiyorsun mi? Eski doğruysa, böyle bir şey yapabilirsiniz:

# 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;
}

Temel olarak, bu diğer değişkenleri oluşturmak için değişkenleri değerlendirmek için PHP'nin yeteneği yararlanır ($ anahtar dolayısıyla çift-dolar - bu ismi $ anahtar değeri, yeni bir değişken oluşturmak anlamına gelir).

Ben henüz ikinci duruma iyi bir çözüm ile gelip değil.