Codeigniter e la lettura Attiva dei dati FILTRATI dalla clausola WHERE: SELECT complesse

web design umbria

All’ indirizzo https://umbriawaydeveloper.wordpress.com/2021/01/08/codeigniter-e-la-lettura-dei-dati-passivi-da-una-tabella-select-semplici/ abbiamo visto come si leggono i dati sostanzialmente ma che succede quando passo con il metodo GET dei dati che transitano sulla URL e che esprimono delle condizioni che devono essere FILTRATE dalla Query del Modello? Succede che la sintassi Active Record di Codeigniter Framework cambia. Vediamo un esempio. Nella Home del progetto Codeigniter menzionato nell’ articolo precedente vi sono una serie di immagini che se cliccate riportano all’ esplosione di numerosi dettagli ciò avviene lanciando il testimone con il link con questo codice:

<a href="<?php echo base_url();?>index.php/nomedelcontroller/nomedelmetodoscelto?id=<?php echo $res->id ?>"><img src=.....etc etc></a>

A questo punto dobbiamo recuperare i dati, qui viene menzionato un controller vediamo che cosa c’è nel codice:

  public function nomedelmetodoscelto()
    {
      $id = $this->input->get('id');
      $data['result'] = $this->NOME_Model->esplodiInfo($id);
      $this->load->view('nomedellapaginascelta', $data);
    }

Il controller cattura il valore in un contenitore variabile ($id =) e una serie di istruzioni vengono recuperate dal MODELLO prima di dare indicazioni per la visualizzazione della pagina, a questo punto torniamo alla sorgente il MODELLO, che cosa leggerò nella funzione esplodiInfo ?

    function esplodiInfo($id)
  {
    $query = $this->db->query("
    select * from nomedellatabella
    where id='" . $id . "'
    ");
    return $query->result();
  }

Dal punto di vista stilistico questa Query non è il massimo per Active Record, ma al momento analizziamola per scoprire che c’è un parametro in ingresso in una funzione ($id), e che la query pesca tutti i record utilizzando il simbolo asterisco da una tabella e che viene specificata una clausola per cui i dati catturati dovranno essere circoscritti a un ID che quando passerà al di là del muro (traduzione dalla pagina in cui non leggo i dettagli / alla pagina in cui posso leggere i dettagli) consentira di recuperare gli stessi dati dalla stessa tabella che caratterizza anche il punto di partenza, per cui riassumento per ora vediamo tutto il codice a partire dalla BASE:

MODELLO


  function esplodiInfo($id)
  {
    $query = $this->db->query("
    select * from nomedellatabella
    where id='" . $id . "'
    ");
    return $query->result();
  }

-------------------------------------------------

CONTROLLER

  public function nomedelmetodoscelto()
    {
      $id = $this->input->get('id'); //sto usando un retino per farfalle per catturare un valore in transito
      $data['result'] = $this->NOME_Model->esplodiInfo($id);
      $this->load->view('nomedellapaginascelta', $data);
    }

------------------------------------------------------------------------------

VIEW codice della pagina normale con i marcatori che fanno scorrere i dati prelevati da un array che sono simili a 

      <?php foreach ($result as $res) : ?>
dati da inserire con l'echo esempio per il sorgente della pagina
<?php echo base_url();?>miacartella/miasottocartella/<?php echo $res->nomecampoimmaginescelto ?>
altri dati....sempre espressi dalla formula <?php echo $res->nomecampodastampare ?>
      <?php endforeach; ?>

La query del modello è sicuramente da migliorare ma quello che importa al di la dello stile è che comunque funziona e ci consente di esplodere tutte le info che abbiamo omesso in prima pagina estrapolando dalla tabella tutto quello che necessita, per un test sulla realtà si può visionare ad esempio http://umbriawayformazione.altervista.org/ci_project_chess/index.php/chess/bg7 . La differenza con una query passiva é palese, perché qui ci sono dei parametri in ingresso da masticare e metabolizzare prima di consegnarli alla funzione che dovrà catturare tutti quei record caratterizzati da quella variabile specifica e non altra. Infine un WARNING, visto che a me succede spesso di dimenticare di inserire la riga di sicurezza canonica voluta da codeigniter per le sue pagine. Prima del tag document seguito da html nella nostra pagina dobbiamo inserire il codice:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...