scrivere-i-metodi

Progettare un’area riservata completa – Scrivere i metodi

Nella precedente lezione della guida su come progettare un’area riservata completa abbiamo visto come creare le classi necessarie all’area riservata. Inoltre abbiamo tutto il codice della classe necessaria per connettersi al database e di quella per il caricamento delle classi istanziate.

Progettare un’area riservata completa – Scrivere i metodi

Ora vedremo insieme come scrivere i metodi delle due classi di servizio per creare tutte le operazioni utili al funzionamento della nostra area personale.

Prepared Statement con Mysqli

La prima cosa che dobbiamo imparare è cosa sono i prepared statements, perchè utilizzarli e come.
Cominciamo con definirli dicendo che sono dei costrutti supportati da MySQL 4.1 in poi che consentono alle applicazioni di interagire attraverso le query con il database manager in modo sicuro e più efficiente.

Per prima cosa i prepared utilizzano un template che dopo averlo definito sarà pronto a ricevere i dati passati in bind ed elaborati nella query scritta precedentemente.

Ci danno modo anche di proteggerci dagli attacchi basati su SQL injections così da non poter alterare i nostri dati.

Maggiori informazioni potete trovarle qui: PHP Prepared Statements

Esempi pratici

Vedremo insieme alcuni esempi pratici che io utilizzo spesso per i miei metodi e le varie opzioni che possono essere utilizzate all’interno di essi per ottenere ciò che ci serve.

Select di un record
//preparo la query per selezionare un utente dall'id
	final public function selectUtenteById($idutente){
		
		$tmpl = "SELECT IdUtente, Username, Email, Role, Abilitazione FROM utenti WHERE IdUtente = ?";
		
		$stmt = $this->mysqli->prepare($tmpl);
				
		$stmt->bind_param("i",$idutente);
		
		$stmt->execute();
		
		$result = $stmt->bind_result($idutente,$username,$email,$role,$abilitazione);
			
		$results = array();
		
		while($stmt->fetch()){
			
			$results['IdUtente'] = $idcliente;
			$results['Username'] = $codcliente;
			$results['Email'] = $email;
			$results['Role'] = $role;
                        $results['Abilitazione'] = $abilitazione;
				
		}
		
		$stmt->close();
		
		return $results;
		
	}

Andiamo ad analizzare le varie parti del metodo.

$tmpl = è il template che contiene tutta la query. Da notare il punto interrogativo (?) messo dove vano passate le variabili.

$stmt = qui andiamo a richiamare il metodo prepare della classe Mysqli che prepara la query per il passaggio dei parametri e l’esecuzione.

bind_param = questa funzionalità delle prepared statement (da adesso stmt) invia i paramentri alla query che andranno a sostituire i punti interrogativi presenti nella query memorizzata nel template ($tmpl). Per prima cosa dichiariamo il tipo di variabile (i per intero o s per stringa. Dettagli qui) e subito dopo la variabile che abbiamo passato richiamando il metodo (selectUtenteById($idutente)).

execute() = altra funzionalità delle stmt che esegue la query.

bind_result = memorizzandoli in una variabile ($result) andiamo a prendere tutti i dati della query. Tra parentesi mettiamo tutti i dati; io consiglio di dare il nome più possibile simile a come si sono chiamati i campi del db. (Es. IdUtente -> $idutente).

$results = creo un array dove inserirò tutti i dati ottenuti dalla query.

fetch() = con questa funzionalità andiamo a recuperare i dati e con l’utilizzo di un ciclo while li memorizziamo nell’array creata precedentemente ($results).

close() = chiudiamo la stmt e ritorniamo l’array con i dati.

Ora andiamo a vedere in modo più semplice altri modi di scrivere metodi per ottenere altri risultati.

Select di un singolo dato

Vediamo come ricavare un singolo dato di un record. Prendiamo come esempio di prendere il nome utente (username) passando l’id:

//preparo la query per selezionare l'username dell'utente passando l'id
	final public function selectUsernameByIdUtente($idutente){
	
		$tmpl = "SELECT Username FROM utenti WHERE IdUtente = ?";
		
		$stmt = $this->mysqli->prepare($tmpl);
		
		$stmt->bind_param("i", $idutente);
		
		$stmt->execute();
		
		$stmt->bind_result($username);
		
		$stmt->fetch();
		
		$stmt->close();
		
		return $username;
	}

Rispetto il precedente metodo abbiamo la funzionalità bind_result che lega le variabili ai risultati ottenuti. In questo modo possiamo dichiarare una variabile a cui legare il risultato. Anche in questo caso io consiglio di dare un nome simile al nome del campo del db.

Insert dei dati

Ora vediamo come utilizzare le stmt per inserire un record.

//funzione per inserire un nuovo utente
	final public function insertNuovoUtente($username,$pass,$email){
		
		$tmpl = "INSERT INTO utenti (Username,Password,Email) VALUES (?, ?, ?)";
		
		$stmt = $this->mysqli->prepare($tmpl);
		
		$stmt->bind_param("sss", $username, $pass, $email);
		
		$stmt->execute();
		
		$stmt->store_result();
		
		$id = $stmt->insert_id;
		
		$stmt->close();
		
		return $id;
		
	}

Abbiamo sempre la variabile $tmpl che contiene la query e i punti interrogativi dove si attengono i parametri.

Da notare che in questo metodo memorizziamo l’id dell’inserimento e lo ritorniamo perchè ci servirà per inserire un nuovo record nella tabella ‘profilo’ collegandolo al record della tabella ‘utenti’. Prima di memorizzare l’id storicizziamo i risultati con la funzionalità della stmt ‘store_result()‘ così da averli disponibili.

Nel prossimo articolo andremo a sviluppare la login ed il logout per poter accedere alla nostra area riservata.

  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

Web Developer vi augura Buon Natale
Progettare un’area riservata completa – Creare le classi

Potrebbero interessarti anche

14 thoughts on “Progettare un’area riservata completa – Scrivere i metodi

    1. Hello, it’s true that for now WordPress is the best platform for blogs, but I want to give the material to create a reserved area to be developed if the code so as to customize it in all its aspects.

      ==============================================================

      Ciao, si vero che per ora WordPress è la migliore piattaforma per blog, ma voglio dare materiale per poter creare una propria area riservata sviluppando da se il codice così da personalizzarla in ogni suo aspetto.

    1. Grazie mille.

      Continuerò a completare questa guida e spero nel più breve tempo possibile.

      Iscrivendosi alla Newsletter avrai modo di seguire tutte le novità del blog.

      ==================================================================

      Thanks so much.

      I will continue to complete this guide and I hope as soon as possible.

      By subscribing to the newsletter you will be able to follow all the news of the blog.

  1. Howdy! I realize this is somewhat off-topic however I needed to ask.
    Does building a well-established website like yours
    require a large amount of work? I am brand new to running a blog however I do write in my journal on a daily basis.

    I’d like to start a blog so I can easily share my experience and thoughts online.

    Please let me know if you have any ideas or tips for new aspiring blog owners.

    Appreciate it!

    1. Ciao collega 😀

      Sviluppare e progettare un blog di base non è difficile. Esistono tanti CMS come questo che ti permettono in modo facile di creare un blog e riempirlo di contenuto.

      Il consiglio che mi sento di dare e creare dei contenuti validi e di valore. Non è la bella grafica che attira utenti, ma valore da condividere.

      Buon lavoro.

      =========================================================================

      Hello colleague 😀

      Develop and design a basic blog is not difficult. There are many CMS like this that let you easily create a blog and fill it with content.

      The advice I give and create good content and value. It is not the beautiful graphics that attracts users, but the value to share.

      Good job.

    1. Grazie mille.

      Continuerò proprio per tutti voi che mi seguite.

      ==============================================

      Thanks so much.

      I will continue to own all of you who follow me.

    1. Felice di leggere le tue parole perchè vuol dire che sto comunicando correttamente con voi.

      =======================================================================

      Happy to read your words because it means that I am communicating with you properly.

    1. La più grande soddisfazione è riuscire ad aiutarvi.

      ================================================

      The greatest satisfaction is to be able to help you.

Lascia un commento

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