creare-le-classi

Progettare un’area riservata completa – Creare le classi

Eccoci arrivati al momento di scrivere un pò di codice per cominciare a progettare un’area riservata completa.

Ma attenzione; prima di metterci a scrivere e sviluppare così come ci viene, consiglio di strutturare lo sviluppo seguendo una linea guida che utilizzo sempre così da andare avanti senza dover tornare indietro per mancanze.

Progammazione OOPP

Per cominciare, utilizzando le OOPP, andiamo a scrivere le classi che ci saranno utili per il funzionamento di tutta l’area riservata e ci permetteranno di avere ordine nel codice.

Classi

Le classi che normalmente utilizzo in un progetto sono le seguenti:

  • Autoloader.php
  • Mysqlimproved.php
  • Funzioni.php
  • Utility.php
Autoloader

Questa classe è veramente utile in quanto carica le classi quando necessario. Andiamo a vedere nei dettagli e come effettivamente questa classe ci aiuti. Le classi sono delle pagine .php come tutte con la differenza che contengono il codice delle classi anzichè la pagina web da visualizzare nel browser.

Attenzione!!!!

Ogni classe va inclusa in tutte le pagine che la istanziano. Vi immaginate un sito web con 100 classi? Allora questa classe ci viene in aiuto includendo la classe solamente se viene instanziata nella pagina.

Codice sorgente
class Autoloader {
	
/*
FUNZIONI NECESSARIE AL CARICAMENTO AUTOMATICO DELLE CLASSI
*/
	
        public function __construct() {
            spl_autoload_register(array($this, 'loader'));
        }
		
        private function loader($className) {
            //echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";
            include "classi/".$className . '.php';
        }
}

Da notare che utilizzo una cartella “classi” dove inserirò tutte le classi del progetto.

Mysqlimproved

Questa classe è dedicata alla connessione al database ed alle funzioni base delle query.
Per prima cosa ho creato un file ‘config.php’ dove vado a definire delle variabili base con tutti i dati di accesso al db.

define('HOST', 'localhost');
define('DATABASE_NAME', 'reservation');
define('USER', 'root');
define('PASSWORD', '');
define('CHARSET', 'utf8_general_ci');

In questo modo ho delle variabili definite da utilizzare nella classe per la connessione al db.

WordPress

Se si vuole implementare un’area riservata personale in wordpress senza utilizzare plugin e sfruttare il proprio codice, basta utilizzare il file ‘wp-config.php’ che contiene tutte le variabili per la connessione.

Cominciamo a vedere il codice della classe.

Per prima cosa apro la classe e dichiaro tutte le variabili da utilizzare.

Codice sorgente
class Mysqlimproved {
	
/*
FUNZIONI NECESSARIE ALLA CONNESSIONE DB E ALLE OPERAZIONI BASI DI QUERY
*/
	
	//definisco le variabili per la connessione
	private $host;
	private $user;
	private $password;
	private $database;
	private $charset;
	// contiene la query
	private $query;
	// connessione e risorsa mysqli
	protected $mysqli;
	// risultato con i dati estratti
	private $result;

Preparo il costruttore che avvierà la connessione al db ogni qualvolta verrà istanziata la classe e il distruttore che chiude la connessione in modo automatico.

Codice sorgente
public function __construct(){
  // Parametri di connessione
  $this->host = HOST;
  $this->user = USER;
  $this->password = PASSWORD;
  $this->database = DATABASE_NAME;
  $this->charset = CHARSET;
	
  // connessione in construct per non chiamare il metodo
  $this->connect($this->host, $this->user, $this->password, $this->database, $this->charset);
}
	
public function __destruct(){
  $this->disconnect();
}

Come noterete nel costruttore assegno alle variabili della classe le definizioni fatte nel file di configurazione (config.php). Per wordpress basterà modificare le assegnazioni in questo modo.

Codice sorgente
// Parametri di connessione
$this->host = DB_HOST;
$this->user = DB_USER;
$this->password = DB_PASSWORD;
$this->database = DB_NAME;
$this->charset = DB_CHARSET;

Ora andiamo a scrivere il metodo che effettua la connessione e la disconnessione. Non sono altro che i metodi richiamati nel costruttore (connessione) e nel distruttore (disconnessione).

Codice sorgente
// Metodo per la connessione
	public function connect($host, $user, $password, $database, $charset, $port = null, $socket = null){
		// creare la connessione
		$this->mysqli = new mysqli($host, $user, $password, $database, $port, $socket);
		
		if(mysqli_connect_error()){
			exit('Impossibile connettersi al DataBase'.$mysqli_connect_error);
		} else {
			$this->mysqli->set_charset($charset);
		}
		
		return true;
	}	
	
// Per Disconnetterci
	public function disconnect(){
		$this->mysqli->close();
		return true;
	}

Ora vediamo le varie operazione che saranno utili nello sviluppo per l’interrogazione del db. Cominciamo dal metodo prepare() che prende la query che scriveremo e la prepara per l’esecuzione. Questo metodo velocizza l’esecuzione delle varie operazioni.

Codice sorgente
// Per prepaparare la query
	public function prepare($query){
		$this->query = $query;
		return true;
	}

La seguente invece esegue la query.

Codice sorgente
// Per eseguire la query
	public function query(){
		if(isset($this->query)){
			$this->result = $this->mysqli->query($this->query);
			if(!$this->result) {
				exit("Errore nell'interrogazione del DataBase: ".$this->mysqli->error);
				return false;
			}else{ return true; }
		}	
	}

Ora scriviamo il metodo che ci spacchetta i dati in array in tre diversi modi e ci ritorna tutte le righe con i dati.

Codice sorgente
// Per fettchare , estrare i dati in un Array o Oggetto
	public function fetch($type = 'object'){
		switch($type){
			case 'array':
				$rows = $this->result->fetch_array();
				break;
			case 'object':
				$rows = $this->result->fetch_object();
				break;
			case 'assoc':
				$rows = $this->result->fetch_assoc();
				break;
		}
		
		return $rows;
	}

Di base abbiamo impostato che ci restituisce un oggetto; lo scopo è lavorare infatti con le OOPP.

Infine vediamo due metodi che ci sono utili per diversi scopi che vedremo nelle prossime lezioni. Il numero di record trovati eseguendo la query e la chiusura, dopo averli memorizzati in una variabile, del risultato di dati della query. Per ultimo l’escape dei dati da passare nella SQL con chiusura della classe.

Codice sorgente
//per contare il numero di record
	public function numrec(){
	
		$numrec = $this->result->num_rows;
		
		return $numrec;
		
	}

//per chiudere il set di risultati
	public function result_close(){
	
		$this->result->close();
		
		return true;
		
	}

// Per ripulire i dati
	public function escape($data){
		return $this->mysqli->real_escape_string($data);
	}
}

Ecco a voi l’intera classe:

Codice sorgente
class Mysqlimproved {
	
/*
FUNZIONI NECESSARIE ALLA CONNESSIONE DB E ALLE OPERAZIONI BASI DI QUERY
*/
	
	//definisco le variabili per la connessione
	private $host;
	private $user;
	private $password;
	private $database;
	private $charset;
	// contiene la query
	private $query;
	// connessione e risorsa mysqli
	protected $mysqli;
	// risultato con i dati estratti
	private $result;
	
	public function __construct(){
		// Parametri di connessione
		$this->host = DB_HOST;
		$this->user = DB_USER;
		$this->password = DB_PASSWORD;
		$this->database = DB_NAME;
		$this->charset = DB_CHARSET;
		
		// connessione in construct per non chiamare il metodo
		$this->connect($this->host, $this->user, $this->password, $this->database, $this->charset);
	}
	
	public function __destruct(){
		$this->disconnect();
	}

// Metodo per la connessione
	public function connect($host, $user, $password, $database, $charset, $port = null, $socket = null){
		// creare la connessione
		$this->mysqli = new mysqli($host, $user, $password, $database, $port, $socket);
		
		if(mysqli_connect_error()){
			exit('Impossibile connettersi al DataBase'.$mysqli_connect_error);
		} else {
			$this->mysqli->set_charset($charset);
		}
		
		return true;
	}	
	
// Per Disconnetterci
	public function disconnect(){
		$this->mysqli->close();
		return true;
	}
	
// Per prepaparare la query
	public function prepare($query){
		$this->query = $query;
		return true;
	}
	
// Per eseguire la query
	public function query(){
		if(isset($this->query)){
			$this->result = $this->mysqli->query($this->query);
			if(!$this->result) {
				exit("Errore nell'interrogazione del DataBase: ".$this->mysqli->error);
				return false;
			}else{ return true; }
		}	
	}

// Per fettchare , estrare i dati in un Array o Oggetto
	public function fetch($type = 'object'){
		switch($type){
			case 'array':
				$rows = $this->result->fetch_array();
				break;
			case 'object':
				$rows = $this->result->fetch_object();
				break;
			case 'assoc':
				$rows = $this->result->fetch_assoc();
				break;
		}
		
		return $rows;
	}
	
//per contare il numero di record
	public function numrec(){
	
		$numrec = $this->result->num_rows;
		
		return $numrec;
		
	}

//per chiudere il set di risultati
	public function result_close(){
	
		$this->result->close();
		
		return true;
		
	}

// Per ripulire i dati
	public function escape($data){
		return $this->mysqli->real_escape_string($data);
	}
}
Funzioni

Questa classe la utilizzo per contenere tutte le operazioni dell’area riservata come l’insert dei dati, la modifica; tutte le operazioni che richiedono una connessione al database.

Questa classe sarà l’estensione della precedente così da sfruttare tutti i metodi per elaborare i dati.

Creiamo la classe che conterrà tutti i metodi necessari.

Codice sorgente
class Funzioni extends Mysqlimproved {
	
/*
INIZIO BLOCCO FUNZIONI PER SELECT DATI
*/

qui vanno tutti i metodi per le select

/*
FINE BLOCCO
*/

}

E’ buona abitudine commentare e suddividere le varie tipologie di metodi. Io suddivido sempre in base a che tipo di query vado ad effettuare: select, update, delete.

Utility

Questa classe la utilizzeremo per tutte le operazioni che non interagiranno con il database, ma opereranno soprattutto per formattazione e altre utilità tecniche.

Codice sorgente
class Utility {
	
/*
BLOCCO DI FUNZIONI DI MANIPOLAZIONE DEI DATI SENZA CONNESSIONE AL DB
*/

}

Abbiamo terminato di preparare tutte le classi che ci serviranno per sviluppare l’area riservata completa. Passiamo ora a vedere come scrivere i metodi delle ‘Funzioni’.

  1. Introduzione
  2. Analisi dei dati
  3. Creare il database e le tabelle
  4. Creare le classi
  5. Scrivere i metodi
  6. Login e Logout
  7. Utilizzare le sessioni
  8. Protezione dell’area
  9. Gestire il menu
  10. Gestione degli utenti
  11. Gestire i ruoli
  12. Un log di controllo

Davide Arduini Arduini

Developer Web in Php, Html, Asp, Css. Esperienza in sviluppo di siti web, pannelli gestionali e applicativi aziendali per uso interno. Conoscenza base dei vari CMS (Joomla, WordPress, etc..)

WebSite


Seguimi su: TwitterFacebookLinkedInPinterestGoogle PlusYouTube

Progettare un'area riservata completa – Scrivere i metodi
Progettare un’area riservata completa – Creare il database e le tabelle

Potrebbero interessarti anche

8 thoughts on “Progettare un’area riservata completa – Creare le classi

  1. I’m impressed, I have to admit. Seldom do I come across a blog that’s equally educative and
    amusing, and without a doubt, you have hit the nail
    on the head. The problem is something which too few folks are speaking intelligently about.
    Now i’m very happy I found this during my search for something relating to this.

  2. Greetings from Los angeles! I’m bored to tears at work so I decided to check out your website on my iphone during lunch break.

    I really like the information you provide here and can’t wait
    to take a look when I get home. I’m surprised at how
    quick your blog loaded on my cell phone .. I’m not even using WIFI, just 3G ..
    Anyhow, excellent site!

  3. Hello I am so delighted I found your blog, I really found you by error, while I was looking on Google for something else,
    Regardless I am here now and would just like to say cheers for a incredible post and a all round
    thrilling blog (I also love the theme/design), I don’t have time to look
    over it all at the minute but I have book-marked it and also included your
    RSS feeds, so when I have time I will be back to read much more, Please do keep up the awesome work.

  4. I’m curious to find out what blog system you have been using?

    I’m experiencing some minor security problems
    with my latest website and I would like to find something more safe.
    Do you have any suggestions?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

This site uses Akismet to reduce spam. Learn how your comment data is processed.