$ _SESSION Değişkenleri / alma ayarı kestirme?

4 Cevap php

Ben birden çok sayfa formda bir yüz ya da öylesine form öğeleri gibi var ve ben bazı oturum değişkenleri tanımlı ya da değildi olmadığını kontrol etmelisiniz.

Ana şey bir CONSTANT'ın yoluyla benim seans içinde alt ad ve ardından anahtar alanları olması.

Bunu yapmak için bazı kısayol var mı? , Say

<input value="<?php echo isset($_SESSION[CONSTANT]['fields']['first_name']) ? $_SESSION[CONSTANT]['fields']['first_name'] : ''; ?>">

Benim yapısı kardeş giriş elemanlarının yapılmış ama çok, çok bir döngü yapısı içinde kontrol edilemez biçimlendirme özelleştirilmiş değil çünkü ben bu döngü olabilir şüpheliyim.

Belki de, örneğin, son çare benim metin editörü ile değiştirilecek bir değişkeni yazarak olacaktır, $ s ['ilk_ad'] Zend Session veya benzeri bir şey kullanmak ve tüm $ s örneklerini yerini alabilir.

4 Cevap

Bir kısayolu kendiniz yazın.

function s($key) {
    return isset($_SESSION[CONSTANT]['fields'][$key]) ? $_SESSION[CONSTANT]['fields'][$key] : '';
}
$foo = s('first_name');

Bu deneyin:

function sessionOrBlank() {
    $args = func_get_args();
    if (count($args) < 0) {
        return '';
    }
    $argCtr = 0;
    $argPtr =& $_SESSION;
    do {
        if (!isset($argPtr[$args[$argCtr]])) {
            return '';
        }
        $argPtr =& $argPtr[$args[$argCtr++]];
    } while($argCtr < count($args));
    return $argPtr;
}

: O gibi kullanın

<input value="<?php echo sessionOrBlank(CONSTANT,'fields','first_name'); ?>">

General Usage:

Eğer dizi aramak istediğiniz için bu işleve argüman geçmek. Xmaple için, $_SESSION['foo']['bar'], kullanmak için aramak istiyorsanız sessionOrBlank('foo','bar');.

Edit: You Mentioned Setting

Tamamen siz ne anlama geldiğini, ancak ayarlanacak değer olarak kendisine geçirilen son argüman tedavi edecek dışında, bu işlev, önceki benzer davranmaz. Bu işlevi kullanmanın sonucu bir atama ifadesi (genellikle) sonucu olarak aynı olduğunu, böylece aynı zamanda, bu ayarlar değeri döndürür. Bu onlar var yoksa bütün oturum değişkenin yazılmasını, ancak şu anda diziler olmayan herhangi anahtarları üzerine yazacaktır izin vermemelidir, yoksa onlar yoksa mevcut diziler ek olacaktır. Keyfini çıkarın.

function setSession() {
    $args = func_get_args();
    if (count($args) < 1) {
        return false; // don't overwrite whole session
    }
    $argCtr = 0;
    $argPtr =& $_SESSION;
    do {
        if (!isset($argPtr[$args[$argCtr]]) || !is_array($argPtr[$args[$argCtr]])) {
            $argPtr[$args[$argCtr]] = array();
        }
        $argPtr =& $argPtr[$args[$argCtr++]];
    } while($argCtr < count($args) - 1);
    $argPtr = $args[$argCtr];
    return $argPtr;
}

Ben bu sınıf, bu ad işleyebilir var:

class Core_Session extends Singleton{
    /**
     * Core_Session::getVar($varname,$context='global',...mas contextos)
     *
     * @param mixed $varname nombre de la variable
     * @param mixed $context contexto en el que se llama
     * @return valor de la variable (null si no existe o si estan mal los parametros)
     */
    public static function listContextVars($context='global'){
        $contexts = func_get_args();
        if(count($contexts)==1&&is_array($contexts[0]))
            $contexts = $contexts[0];
        $values = &$_SESSION;
        foreach($contexts as $context){
            if(!isset($values[$context]))
                return(null);
            $values = &$values[$context];
        }
        return(array_keys($values));
    }

    public static function listContextValues($modo='array', $context='global'){
        $contexts = func_get_args();
        $contexts = array_slice($contexts, 1);
        if(count($contexts)==1&&is_array($contexts[0]))
            $contexts = $contexts[0];
        $values = &$_SESSION;
        foreach($contexts as $context){
            if(!isset($values[$context])){
                return(null);
            }
            $values = &$values[$context];
        }
        switch($modo){
            case 'array':{
                $ret = array();
                foreach($values as $varname=>$value){
                    $ret[] = array(
                        'varname'=>$varname,
                        'value'=>self::getVarMulticontext($varname, $contexts)
                    );
                }
                break;
            }
            case 'Core_Object':{
                $ret = array();
                foreach($values as $varname=>$value){
                    $oret = new Core_Object();
                    $oret->setVarname($varname);
                    $oret->setValue(self::getVarMulticontext($varname, $contexts));
                    //$oret->setData($varname, self::getVarMulticontext($varname, $contexts));
                    $ret[] = $oret;
                }
            }
        }
        return($ret);
    }

    public static function getVar($varname, $context='global'){
        if(isset($context)&&is_string($context)){
            $args = func_get_args();
            $contexts = array_slice($args, 1);
            return(self::getVarMulticontext($varname, $contexts));
        }
        return(null);
    }

    public static function getVarMulticontext($varname, $contexts=array()){
        if(!is_array($contexts)||!count($contexts))
            return(null);
        if($varname!=null)
            $contexts = array_merge($contexts, array($varname));
        $values = &$_SESSION;
        foreach($contexts as $context){
            if(!isset($values[$context]))
                return(null);
            $values = &$values[$context];
        }
        if($values===null)
            return($values);
        return(unserialize($values));
    }

    /**
     * Core_Session::setVar()
     *
     * @param mixed $varname nombre de la variable
     * @param mixed $value valor a setear
     * @param string $context contexto en el que se llama
     * @return true si esta bien, false si no
     */
    public static function setVar($varname, $value, $context='global'){
        if(isset($context)&&is_string($context)){
            /*if(is_object($value))*/
            $args = func_get_args();
            $contexts = array_slice($args, 2);
            return(self::setVarMulticontext($varname, $value, $contexts));
        }
        return(false);
    }

    public static function setVarMulticontext($varname, $value, $contexts=array()){
        if(!is_array($contexts)||!count($contexts))
            return(null);
        if($varname!=null)
            $contexts = array_merge($contexts, array($varname));
        $parent_context = null;
        $values = &$_SESSION;
        //var_dump($contexts);
        foreach($contexts as $context){
            $parent_context = &$values;
            $values = &$values[$context];
        }
        if($value==null){
            //$values = null;
            $find = array_search($context, array_keys($parent_context));
            if($find!==null && $find!==false){
                array_splice($parent_context, $find, 1 );
            }
        }
        else
            $values = serialize($value);
        return(true);
    }

    public function getInstance(){
        return(self::getInstanceOf(__CLASS__));
    }
}

Ben o zaman bu "sub-ad" ayna olacaktır. Ben uygun bir html biçiminde, sen (günümüzde de bir kimliği ve yine de) her giriş elemanını bir isim vermek istiyorum, yani, neden kullanmayalım değil - ki? Yani, neden bu işler oturumda saklanır bakımı nasıl? Eğer başka bir düzeyi ekleyerek daha karmaşık hale olurdu neden sürece unambigously ayarlayabilirsiniz ve almak gibi, ben görmüyorum.