62 DBMS – aspetti architetturali

Nella lezione precedente, abbiamo effettuato la pagina di login e registrazione passando da un form. Considerando la struttura del codice, risulta un po’ confuso e comunque abbiamo diverse porzioni di codice che potrebbero essere riutilizzate, o con dei cambiamenti o manutenzione, dovremmo andare a modificare diverse pagine tipo la connessione al database, il login … Se queste parti dobbiamo riutilizzarle, si dovrebbero fare dei copi e incolla, e per ogni modifica dovremmo modificare diverse pagine con un enorme lavoro. La soluzione sta nell’incapsulare (wrapper) le parti di codice in funzioni personalizzate richiamabili nelle pagine a cui servono. Un altro vantaggio sta nel non essere legati ai nomi dei campi:

$email = $_POST['email'];

Il campo email potrebbe cambiare o chiamarsi differentemente.

Un altro esempio, i messaggi di errore potrebbero essere riscritti in altra lingua, basta memorizzarli in un file e richiamare quella variabile a seconda della lingua da utilizzare e un altro file per un altra lingua.

Creo quindi una cartella my_ini fuori dalla cartella pubblica, dove inserirò i miei file ini con le configurazioni restituite nella forma chiave valore. Dentro la cartella sposto il vecchio file ini e aggiungo un file messaggi_errore.ini che contiene:

[errori]
connessione_fallita = connessione al server fallita. Impossibile accedere.
db_non_trovato = non trovo il database ...

vado poi ad assegnare la path della cartella ad una variabile:

$cartella_ini = "../my_ini";

e richiamo i miei dati

//recupero credenziali da file ESTERNO alla cartella pubblica del sito
$accessData=parse_ini_file($cartella_ini . '/confagtest.ini');
$messaggi_errore = parse_ini_file($cartella_ini . 'messaggi_errore.ini');

Ancora meglio invece che legarsi ad un percorso per ogni sito, posso usufruire del percorso già impostato nella chiave DOCUMENT_ROOT presente nella variabile server $_SERVER, aggiungendo il percorso della mia cartella ini. In questo modo avrò un percorso sempre fornito da quel server.

$cartella_ini = $_SERVER['DOCUMENT_ROOT']."/fagtest/my_ini/";

analogamente creiamo una cartella contenente i file da includere che chiameremo my_include e creiamo il file setup.php

<?php
 session_start();
 $nl = "<br />";
 $cartella_ini = $_SERVER['DOCUMENT_ROOT']."/fagtest/my_ini/";
?>

a questo punto includiamo il setup.php nel file login_migliorata.php

 include($_SERVER['DOCUMENT_ROOT']."/fagtest/my_include/setup.php");

ho trasformato 3 righe di codice in 1 e l’inclusione sarà sempre disponibile.

Potrei includere anche  i dati di accesso nel setup, oppure ancora meglio, potrei fare un setup.php generico che va bene per tutti i siti ed un setup_con_DB.php da usare per quelli che usano il database, dove includiamo il setup standard + i dati di accesso

<?php
 include($_SERVER['DOCUMENT_ROOT']."/fagtest/my_include/setup.php");
 
 $accessData=parse_ini_file($cartella_ini . 'confagtest.ini');
?>

a questo punto possiamo inserire nel setup.php anche i messaggi di errore e nella pagina elogin_migliorata.php includere il file setup_con_DB.php

 <?php
 session_start();
 $nl = "<br />";
 $cartella_ini = $_SERVER['DOCUMENT_ROOT']."fagtest/my_ini";
 $messaggi_errore = parse_ini_file($cartella_ini . 'messaggi_errore.ini');
?>

e nella pagina elogin_migliorata.php includere il file setup_con_DB.php

 include($_SERVER['DOCUMENT_ROOT']."/fagtest/my_include/setup_con_DB.php");

ora non solo il nostro file elogin inizia a diventare più snello, ma ne abbiamo guadagnato anche in flessibilità.

Esiste anche una forma di include, include_once che permette di includere ogni volta che un include richiama un file che include a sua volta , di permettere solo una sola inclusione.

 include_once("");

Se include o include_once falliscono verrà generato un warning, ma il programma continuerà a funzionare. Se si preferisce che tale problema venga considerato un errore fatale, e quindi l’esecuzione del codice deve stopparsi, si potrà utilizzare require o require_once.