Joomla.it Forum

Non solo Joomla... => Sviluppo => : Kumidan 26 Aug 2011, 18:53:11

: [Risolto] Recuperare dati da $array['params']
: Kumidan 26 Aug 2011, 18:53:11
Nel backend del mio componente si possono inserire dei nuovi elementi in alcune tabelle.
Per una di queste, mentre si effettua il salvataggio, quindi all'inizio della funzione bind() devo leggere i valori che arrivano, ma non riesco a farlo.

Suppongo debba leggerli dalla variabile $array, ma come leggo i file da lì?

Ad esempio uno dei campi della form che si compila per inserire una nuova entry si chiama "name", ho provato sia a leggere $array['params'][''name'] che $array['name'], ma in nessun caso ho ottenuto il valore che cerco.

Ho anche provato ad usare la variabile $registry, ma senza ottenere nulla.

Come leggo i valori che stanno per essere salvati nel db?
: Re:Recuperare dati da $array['params']
: mau_develop 26 Aug 2011, 19:20:41
non devi leggere nulla, passi il post al bind e il check lo fai.... nel check

M.
: Re:Recuperare dati da $array['params']
: mmleoni 26 Aug 2011, 22:01:52
in effetti 'passi il post al bind' è un poco criptico.

:
$row =& $this->getTable();
$data = JRequest::get( 'post' );
$data['id'] = JRequest::getVar('id', '', 'post', 'int');
// altri checks
if(!$row->bind($data){
  //gestione errore
};

la prima riga associa il dati ricevuti all'array, la seconda forza il field 'id' ad un intero: questo è un controllo che devi fare per verificare che cosa viene inserito in ogni campo (per evitare sql injection).
l'ultima riga salva nel db.

io personalmente preferisco inserire i controlli di sicurezza direttamente dentro il metodo store(), mentre nel check() inserisco quelli di coerenza delle informazioni.

ps: ma quelle variabili da dove saltano fuori?

ciao,
marco
: Re:Recuperare dati da $array['params']
: Alhazred 27 Aug 2011, 17:50:14
edit
: Re:Recuperare dati da $array['params']
: Kumidan 27 Aug 2011, 17:52:33
in effetti 'passi il post al bind' è un poco criptico.
[...]
Per le variabili pensavo fossero nomi standard, ma forse non lo sono. Il fatto è che ho usato un tool online per costruire lo scheletro del componente, non le ho scritte io quelle variabili.

All'interno del file /administrator/components/com_nomecomponente/tables/campoform.php ho sia la funzione bind() che la funzione check()
:
    public function bind($array, $ignore = '')
    {
        if (isset($array['params']) && is_array($array['params'])) {
            $registry = new JRegistry();
            $registry->loadArray($array['params']);
            $array['params'] = (string)$registry;
        }

        if (isset($array['metadata']) && is_array($array['metadata'])) {
            $registry = new JRegistry();
            $registry->loadArray($array['metadata']);
            $array['metadata'] = (string)$registry;
        }
        return parent::bind($array, $ignore);
    }

    /**
    * Overloaded check function
    */
    public function check() {

        //If there is an ordering column and this is a new row then get the next ordering value
        if (property_exists($this, 'ordering') && $this->id == 0) {
            $this->ordering = self::getNextOrder();
        }
       
        return parent::check();
    }
Il codice che mi hai scritto devo usarlo dentro la funzione check(), giusto?
: Re:Recuperare dati da $array['params']
: mmleoni 27 Aug 2011, 19:18:05
all'interno del metodo bind(), e solo all'interno di questo, il valore dovrebbe essere in $array['name'], ma devi fare riferimento alla documentazione del tool, così è impossibile sapere dove sono ricevuti i dati passati alla funzione bind.

all'interno di check() il valore è in this->name, ti conviene agire qui.

ciao,
marco
: Re:Recuperare dati da $array['params']
: Kumidan 27 Aug 2011, 19:44:23
Grazie, adesso riesco a gestire l'inserimento come volevo! :)
: Re:Recuperare dati da $array['params']
: mmleoni 27 Aug 2011, 22:29:41
ricordati il [RISOLTO] nel titolo del post di apertura.
 ciao,
 marco