Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
In questa dispensa viene fornito un esempio per realizzare la funzionalit di login a un sito. Le tecnologie impiegate sono HTML, PHP e MySQL. Saranno descritti in dettaglio i passaggi per accedere al database.
<html> <head> <title>Esempio Login</title> </head> <body> <form id="login-form" name="login-form" method="" action=""> <label for="username">Username</label> <input id="username" name="username" type="text"> <label for="password">Password</label> <input id="password" name="password" type="password"> <input id="login-button" type="submit" value="Login"> </form> </body> </html>
Quando lutente fa clic sul pulsante Login, lo username e la password vengono inviati al server per lelaborazione. Lo script PHP che si occupa dellautenticazione dellutente deve: ottenere username e password; accedere al database e verificare se username e password esistono e a quale utente corrispondono; 1
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
inviare la risposta al client; la risposta sar positiva se lutente stato riconosciuto, negativa altrimenti.
Dopo aver deciso quale metodo HTTP utilizzare 1, torniamo al form e inseriamo il metodo nellattributo method. Naturalmente non consigliabile utilizzare get per linvio di password, quindi opteremo per post.
login.html
<html> <head> <title>Esempio Login</title> </head> <body> <form id="login-form" name="login-form" method="post" action=""> <label for="username">Username</label> <input id="username" name="username" type="text"> <label for="password">Password</label> <input id="password" name="password" type="password"> <input id="login-button" type="submit" value="Login"> </form> </body> </html>
<?php //recupero dei dati inviati //connessione al database //verifica dell'esistenza dell'utente //disconnessione dal database //elaborazione della risposta ?>
I dati inviati mediante il form vengono memorizzati nellarray $_POST $_POST username inserito password inserita username password Assegniamo tali valori a due variabili locali: $uid = $_POST[username] $pwd = $_POST[password] Vediamo come si modifica il codice di login.html e login.php.
1
Vedere http://www.scribd.com/doc/24193963/Passaggio-di-Parametri-al-Server
2
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
login.html
<html> <head> <title>Esempio Login</title> </head> <body> <form id="login-form" name="login-form" method="post" action="login.php"> <label for="username">Username</label> <input id="username" name="username" type="text"> <label for="password">Password</label> <input id="password" name="password" type="password"> <input id="login-button" type="submit" value="Login"> </form> </body> </html>
login.php
<?php //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database //verifica dell'esistenza dell'utente //disconnessione dal database //elaborazione della risposta ?>
Connessione al database
I comandi PHP necessari per connettersi al database ed eseguire interrogazioni sulle tabelle sono i seguenti:
CONNESSIONE AL SERVER
$db = mysql_select_db(nomedb, $conn) or die(impossibile selezionare il database); Vediamo lo script PHP modificato, supponendo che: lhost sia localhost, lo username sia root, non sia richiesta password, il nome del database sia db.
3
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
login.php
<?php //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database $conn = mysql_connect("localhost", "root", "") or die("Impossibile connettersi al server"); $db = mysql_select_db("db", $conn) or die("impossibile selezionare il database"); //verifica dell'esistenza dell'utente //disconnessione dal database //elaborazione della risposta ?>
Arrivati a questo punto, dobbiamo preparare ed eseguire la query che verifica se lutente registrato. Il recordset risultante deve poi essere esaminato per valutare i risultati ottenuti. Esso conterr il record dellutente che ha effettuato il login o nessun record, a seconda che lutente sia o meno registrato. I passi necessari per verificare lesistenza dellutente sono i seguenti:
$query = .............;
while ($row = mysql_fetch_array($result)) { ............. } Per accedere a un campo del record estratto si utilizza la sintassi: $row [nome_campo] Supponiamo che nel database esista una tabella utente come la seguente: utente idUtente username password 1 uid1 pwd1 2 uid2 pwd2 3 uid3 pwd3 La query in questione deve cercare nella tabella utente un record il cui username coincide con $uid e la password con $pwd: 4
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
SELECT username, password FROM utente WHERE username = $uid AND password = $pwd; Osservate che le variabili PHP devono essere racchiuse tra apici. Vediamo lo script PHP modificato:
login.php
<?php //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database $conn = mysql_connect("localhost", "root", "") or die("Impossibile connettersi al server"); $db = mysql_select_db("db", $conn) or die("impossibile selezionare il database"); //verifica dell'esistenza dell'utente $query = "SELECT username, password FROM utente WHERE username='$uid' AND password='$pwd'"; $result = mysql_query($query) or die("query fallita: ".mysql_error()); $trovato = false; while ($row = mysql_fetch_array($result)) $trovato = true; //disconnessione dal database //elaborazione della risposta ?>
La variabile $trovato, valorizzata inizialmente a false, acquisisce il valore true solo se si entra nel ciclo while, cio solo se il recordset risultante contiene almeno un record. In altri termini, $trovato varr true solo se lutente che ha effettuato il login effettivamente registrato. Il ciclo while estrae dal recordset risultante un record alla volta e lo assegna a $row. $row pertanto un array associativo i cui indici coincidono con i nomi dei campi della tabella utente. Disconnessione dal database
5
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
login.php
<?php //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database $conn = mysql_connect("localhost", "root", "") or die("Impossibile connettersi al server"); $db = mysql_select_db("db", $conn) or die("impossibile selezionare il database"); //verifica dell'esistenza dell'utente $query = "SELECT username, password FROM utente WHERE username='$uid' AND password='$pwd'"; $result = mysql_query($query) or die("query fallita: ".mysql_error()); $trovato = false; while ($row = mysql_fetch_array($result)) $trovato = true; //disconnessione dal database mysql_close($conn); //elaborazione della risposta ?>
La variabile $trovato, come detto in precedenza, vale true solo se lutente stato trovato nella tabella utente; in caso contrario vale false. Di conseguenza, sufficiente analizzare il valore di questa variabile per stabilire il tipo di risposta da restituire allutente. Per il momento invieremo la risposta utilizzando la funzione echo. Ecco lo script completo:
login.php
<?php //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database $conn = mysql_connect("localhost", "root", "") or die("Impossibile connettersi al server"); $db = mysql_select_db("db", $conn) or die("impossibile selezionare il database"); //verifica dell'esistenza dell'utente $query = "SELECT username, password FROM utente WHERE username='$uid' AND password='$pwd'"; $result = mysql_query($query) or die("query fallita: ".mysql_error()); $trovato = false; while ($row = mysql_fetch_array($result)) $trovato = true; //disconnessione dal database mysql_close($conn); //elaborazione della risposta if ($trovato) echo "Benvenuto ".$uid; else
6
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
<html> <head> <title>Esempio Login</title> </head> <body> <form id="login-form" name="login-form" method="post" action="login.php"> <label for="username">Username</label> <input id="username" name="username" type="text"> <label for="password">Password</label> <input id="password" name="password" type="password"> <input id="login-button" type="submit" value="Login"> </form> <?php //verifica dell'effettuazione del login if (isset($_POST["username"])) { //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database $conn = mysql_connect("localhost", "root", "") or die("Impossibile connettersi al server"); $db = mysql_select_db("db", $conn) or die("impossibile selezionare il database"); //verifica dell'esistenza dell'utente $query = "SELECT username, password FROM utente
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
WHERE
username='$uid' AND password='$pwd'"; $result = mysql_query($query) or die("query fallita: ".mysql_error()); $trovato = false; while ($row = mysql_fetch_array($result)) $trovato = true; //disconnessione dal database mysql_close($conn); //elaborazione della risposta if ($trovato) echo "Benvenuto ".$uid; else echo "Login errato o utente non registrato"; } ?> </body> </html>
8
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012
or die("query fallita: ".mysql_error()); return $result; } //verifica dell'effettuazione del login if (isset($_POST["username"])) { //recupero dei dati inviati $uid = $_POST["username"]; $pwd = $_POST["password"]; //connessione al database $conn = connect("db"); //verifica dell'esistenza dell'utente $query = "SELECT username, password FROM username='$uid' AND password='$pwd'"; $result = executeQuery($query); $trovato = false; while ($row = mysql_fetch_array($result)) $trovato = true; //disconnessione dal database disconnect($conn); //elaborazione della risposta if ($trovato) echo "Benvenuto ".$uid; else echo "Login errato o utente non registrato"; } ?> </body> </html>
utente
WHERE
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
9
Bocchi Cinzia Ultimo aggiornamento: 25/11/2012