Realizzare Registrazione e Login in PHP

Immagine originale tratta da Fotolia
Tempo stimato di lettura: 7 minuti, 53 secondi
Pubblicato il 30 Aprile 2013

Il web è pieno di guide riguardanti il php, ce ne sono davvero tantissime e di ogni genere, quelle complesse, quelle troppo banali, quelle inutilizzabili per il loro scarso metodo di arrivare all’utenza.

Oggi, qua su WebHouse, inizio un piccolo ciclo di “mini-guide” inerenti proprio questo linguaggio che tenterà, dove possibile, di far capire le sue basi anche agli utenti meno esperti.

Questa serie di articoli proverà ad arrivare a destinazione con semplicità e professionalità, riguarderà script piccoli ma utili, specifici e sopratutto focalizzati su un preciso obiettivo!

PS: Ricordiamo che è sempre opportuno preoccuparsi della sicurezza degli script che si metteno in rete. Di conseguenza ogni script dovrà poi essere corredato dalle opportune misure necessarie per prevenire attacchi dall’esterno.

In questo primo articolo tratterò un argomento da sempre molto richiesto in rete: vedremo come creare dei form di login e di registrazione. Prima di passare però al vero succo della questione è necessario trattare brevemente un altro argomento, i database.

Questi sono semplicemente degli archivi di dati correlati logicamente tra loro, fondamentalmente utilizzati per modellare una realtà tramite dei dati informatici.

Ma come possiamo utilizzare questi dati a nostro piacimento ? Con il  MySQL, “software” che ci permette di estrarli, leggerli, cancellarli ed eventualmente aggiornarli in qualsivoglia momento.

Come possono il login e la registrazione di un sito internet interagire con questo “archivio”? E cosa ci servirà per crearli ? Ve lo spiego subito. Nella sezione che riguarderà la registrazione potremo utilizzare il database per immagazzinare i dati dell’ utente, mentre dall’ altro lato, in quello del login, lo utilizzeremo semplicemente per leggere ciò che prima è stato inserito, tutto questo attraverso dei semplici codici appartenenti al MySQL. Vi sarà comunque tutto più chiaro una volta che avrete letto e visto con i vostri occhi ogni cosa. Iniziamo !!

Serviranno i seguenti elementi:

  • Mamp(mac)/Xampp(win), (le conoscenze di questi programmi dovrete averle).
  • Un editor di testo per scrivere il codice.

Creiamo subito i file fisici .php (vuoti)  e le tabelle nel database che ospiteranno tutti i nostri dati informatici.  Andiamo dentro la cartella htdocs di mamp/xamp e creiamo la cartellina che conterrà tutte le nostre cose, chiamiamola “prova”. Al suo interno a sua volta creeremo successivamente 5 file.php:

  • login.php
  • registration.php
  • db_con.php
  • index.php
  • prova.php // è semplicemente un file di prova in cui visualizzeremo il messaggio “login effettuato con successo”.

In login .php andrà inserita la pagina che conterrà tutti i file inerenti il relativo processo, nel registration.php tutti quelli inerenti la registrazione, in db_con.php  i parametri di connessione al database che, per questa volta, vi passerò semplicemente io, non essendo il tutorial incentrato su questo. 😉

Passiamo alla stesura del db_con.php:

<?php     //connessione al nostro database
$connessione_al_server=mysql_connect("localhost","root","root");  // ip locale, login e password
if(!$connessione_al_server){
die ('Non riesco a connettermi: errore '.mysql_error()); // questo apparirà solo se ci sarà un errore
}

$db_selected=mysql_select_db("prova",$connessione_al_server); // dove io ho scritto "prova" andrà inserito il nome del db
if(!$db_selected){
die ('Errore nella selezione del database: errore '.mysql_error()); // se la connessione non andrà a buon fine apparirà questo messaggio
}

?>

 

Come vedete il file è tutto commentato e comprensibile sicuramente per chiunque abbia una minima conoscenza di php. Se state utilizzando xamp(win) la password dovrà rimanere vuota altrimenti, con Mamp(mac) dovrà essere come per il nick, cioè “root”. Il primo passaggio è stato fatto, creiamo adesso il database andando nel phpMyAdmin di Mamp/xamp; chiamiamolo “prova” e all’ interno creiamo un’ unica tabella di nome “users”, contenente solamente 4 campi (faremo una registrazione molto semplice):

  • Campo “id” [ INT, auto_incement, primary ]
  • Campo “username” [VARCHAR, 255]
  • Campo “password” [VARCHAR, 255]
  • Campo “email” [VARCHAR, 255]

  INT e VARCHAR saranno tipologie di campi e 255, dove presente, sarà l’ eventuale lunghezza massima del campo.

creazione id, username e password nel database.

Fatto questo possiamo tornare sui nostri file fisici, aprire il registration.php ed incollarci dentro il seguente codice, anch’ esso tutto commentato.

Codice da inserire nel registration.php:

<?php
session_start(); // dive essere la prima cosa nella pagina, aprire la sessione
include("db_con.php"); // includo il file di connessione al database
if($_POST["username_reg"] != "" && $_POST["password_reg"]!= "" && $_POST["email_reg"] != ""){  // se i parametri iscritto non sono vuoti non sono vuote
$query_registrazione = mysql_query("INSERT INTO users (username,password,email)
VALUES ('".$_POST["username_reg"]."','".$_POST["password_reg"]."','".$_POST["email_reg"]."')") // scrivo sul DB questi valori
or die ("query di registrazione non riuscita".mysql_error()); // se la query fallisce mostrami questo errore
}else{
header('location:index.php?action=registration&errore=Non hai compilato tutti i campi obbligatori'); // se le prime condizioni non vanno bene entra in questo ramo else
}
if(isset($query_registrazione)){ //se la reg è andata a buon fine
$_SESSION["logged"]=true; //restituisci vero alla chiave logged in SESSION
header("location:index.php");
}else{
echo "non ti sei registrato con successo"; // altrimenti esce scritta a video questa stringa
}
?>

Questo file di registrazione utilizza un “INSERT mysql” per inserire nel database i dati che gli son stati passati dal form di registrazione (username_reg, password_reg, email_reg), dati che adesso andremo a vedere e ad inserire nell’ index.php..

Codice da inserire nell’ index.php:

<?php
session_start();// come sempre prima cosa, aprire la sessione 
include("db_con.php"); // includere la connessione al database
?>
<html>  
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h2>Registrazione</h2>   
<form name="form_registration" method="post" action="registration.php">
<br/>
<p>Username: <input type="text" name="username_reg"></p>
<br/>
<p>Password: <input type="password" name="password_reg"></p>
<br/>
<p>Email: <input type="text" name="email_reg" ></p>
<br/>
<button>Registrati</button>
</form>
<h2>Log in</h2>
<form name="form_login" method="post" action="login.php">
<p>Username</p><input type="text" name="username" ></p>
<p>Password <input name="password"></p>
<button>Accedi</button>
</form>
<body>
</html>

 

In questa pagina non farete altro che creare due form in html, quello di registrazione contenente tre campi, “username_reg”, “password_reg”, ed “email_reg”  (campi collegati alla pagina registration.php attraversio l’ attributo “action”) , e quello di login, che avrà solamente due campi, quello “username” e quello “password”. !!

Creiamo adesso la pagina, come per la registrazione, collegata al rispettivo form di login, login.php! Apritela e incollateci dentro il seguente codice.

Codice da inserire nel login.php:

<?php
session_start();// come sempre prima cosa, aprire la sessione 
include("db_con.php"); // Include il file di connessione al database
$_SESSION["username"]=$_POST["username"]; // con questo associo il parametro username che mi è stato passato dal form alla variabile SESSION username
$_SESSION["password"]=$_POST["password"]; // con questo associo il parametro username che mi è stato passato dal form alla variabile SESSION password
$query = mysql_query("SELECT * FROM users WHERE username='".$_POST["username"]."' AND password ='".$_POST["password"]."'")  //per selezionare nel db l'utente e pw che abbiamo appena scritto nel log
or DIE('query non riuscita'.mysql_error());
// Con il SELECT qua sopra selezione dalla tabella users l utente registrato (se lo è) con i parametri che mi ha passato il form di login, quindi
// Quelli dentro la variabile POST. username e password.
if(mysql_num_rows($query)&gt;0){        //se c'è una persona con quel nome nel db allora loggati
$row = mysql_fetch_assoc($query); // metto i risultati dentro una variabile di nome $row
$_SESSION["logged"] =true;  // Nella variabile SESSION associo TRUE al valore logge
header("location:prova.php"); // e mando per esempio ad una pagina esempio.php// in questo caso rimanderò ad una pagina prova.php
}else{
echo "non ti sei registrato con successo"; // altrimenti esce scritta a video questa stringa di errore
}
?>

Prima cosa che faccio, assegno alla sessione i parametri passati dal form di login, così resteranno fino a scadenza al suo interno e potranno eventualmente esser riutilizzati per qualcos’ altro. Dopo ciò faccio un “SELECT mysql” per selezionare e cercare nella tabella “users” del database qualche utente che corrisponde ai dati inseriti nel form. Se tutto funziona correttamente il login avrà successo, altrimenti, si visualizzerà a schermo un messaggio di errore.

Codice da inserire nel prova.php:

<?php echo "Ti sei loggato con successo";?>

A questo punto, se avrete eseguito questi passaggi correttamente, dovreste essere in grado di registrarvi al vostro “sito”  e successivamente anche di loggoravi. Fate delle prove, iniziate a registrare qualche utente dal form e andate a visualizzare la tabella users nel database; se questa avrà al suo interno gli utenti che avete inserito, allora avrete fatto tutto correttamente nella sessione inerente la registrazione. Dopo di che  provate a loggoravi con gli utenti che avete creato e controllate che anche questa passaggio funzioni.

Ho testato il codice in locale e tutto dovrebbe essere funzionante, per qualsiasi problema o errore non esitate comunque a fare domande.. !! Un saluto 😉

Appena ne avrò tempo implementerò nel codice anche le indispensabili pratiche di sicurezza.. !! Pazientate !! 🙂