Oggetto:
Verificare tramite PHP l’inserimento di dati (tipicamente ID e PASSWORD) per l’accesso a servizi riservati.
Prima di iniziare:
Creare un database (che chiameremo “accessi”) con al suo interno una tabella (“utenti”) con i seguenti attributi:
codice INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
id VARCHAR(20) NOT NULL UNIQUE;
password VARCHAR(20) NOT NULL UNIQUE;
Inserire poi alcuni dati per poter verificare l’esattezza del codice che andremo a scrivere.
Passo 1:
Creazione della pagina HTML con all’interno il form contenente le due caselle di testo per l’inserimento del nome e
della password e con il pulsante per l’invio dei dati.
Per chi ha dei dubbi sul tag form alleghiamo il codice contenuto nel tag stesso:
<form action="verifica.php/asp" method="post">
Accesso Riservato:<br>
User id:<br>
<input type="text" name="id" size="20"><br>
Password:<br>
<input type="password" name="password" size="20"><br>
<input type="submit" value="Invia">
</form>
Per passare le informazioni del modulo alla pagina PHP utilizziamo il metodo POST in quanto consente di nascondere
le informazioni dell’utente senza utilizzare la stringa d’interrogazione. Inoltre i dati non vengono conservati dal
browser nella cache (e quindi disponibili a tutti quelli che accedono al computer) ma vengono trasportati nel corpo del
messaggio e passati al PHP come flusso di dati.
Passo 2:
Realizziamo la pagina verifica.php
:
1) Controllare che il contenuto delle variabili provenienti dal Form sia <> NULL.
2) Controllare la lunghezza delle variabili e al limite troncare oltre il numero max di caratteri permessi (vedi
dichiarazione attributi database).
3) Controllare che le variabili provenienti dal form non abbiamo al loro interno caratteri speciali che potrebbero
inficiare sulla sicurezza sia della macchina sia del nostro sito.
4) Effettuare la connessione al database.
5) Preparare la query SQL (SELECT ID, PASSW FROM UTENTE WHERE ID = Variabile_ID_passata_dal_form
AND PASSWORD = variabile_password_passata_dal_form) per verificare che l’utente che richiede l’accesso sia
già presente.
6) Eseguire la query
7) Controllare che il numero di righe restiruite dalla query sia = 1 e quindi far “partire” la pagina di accesso.
PHP
<?
// Memorizzo i valori che mi arrivano dal form e che sono contenuti nell’array
// associativo predefinito $_POST
$id = $_POST["id"];
$password= $_POST["password"];
// Controllo che le variabili non abbiano valore nullo
if (empty($name)) || (empty($passw))
{
// se è vuoto invio la pagina di avviso
header(“Location: noidpassw.php”);
}
// Prendo dalle variabili i primi 20 caratteri
$id = substr($id,0,20);
$password = substr($password,0,20);
// Controllo che le stringhe non contengano caratteri <> da A..Z a..z 0..9
if ((ereg("^[[:alnum:]]+$",$name)) and (ereg("^[[:alnum:]]+$",$passw)))
{
// se non hanno caratteri speciali
// imposto le variabili per la connessione al DB MySQL
$hostname = "localhost";
$dbname = "accessi";
$username = "prova";
$password = "prova";
// Effettuo la connessione al database e se non va a buon fine segnalo un
errore ed esco
if (!($conn = mysql_pconnect($hostname,$username,$password)))
// la funzione die visualizza un messaggio di errore e da lo stop
all’esecuzione drl programma
die “errore connessione al database Accessi di MySQL”;
// seleziono la tabella di lavoro
if (!mysql_select_db($dbname, $conn))
die “errore connessione alla tabella utenti DB Accessi di MySQL”;
// Preparo la query che intendo eseguire
$query = "SELECT ID, PASSW FROM UTENTE WHERE ID LIKE '".$name."' AND PASSW
LIKE '".$PASSW."';";
// Eseguo la query
if (!($result = @ mysql_query($query, $conn)))
die “Errore interrogazione DB Accessi di MYSQL”;
// Controllo che il numero di righe estratte sia = 1
if (mysql_num_rows($result) == 1)
{
// Invio la pagina di accesso
header(“Location: accesso.php”);
}
else
{
// Id e Password non riconosciuti
header(“Location: noidnopassw.php”);
}
}
else {
// Caratteri speciali non accettati
header(“Location: nochrspecial.php”);}
?>
Passo 1: Creare la tabella Utenti.
Chiameremo il nostro DB “accessi”.
Il nostro DB contiene una sola tabella “utenti” con i seguenti campi: codice, id, password.
PHP
MySQL da linea di comando
Aprire la console (finestra DOS), spostarsi nella directory c:\programmi\mysql\bin e digitare:
mysql –u root –p
vi sarà richiesta la password d’accesso come utente root (quella che avete immesso durante l’istallazione di mysql) e la
connessione andrà a buon fine il prompt diverrà:
mysql>
con mysql in esecuzione si possono digitare istruzioni SQL. Istruzioni che possono anche essere su più linee. Mysql
aspetta l’inserimento del ; (punto e virgola) prima di eseguire l’istruzione SQL.
A questo punto creiamo il database “accessi” con l’istruzione:
mysql>CREATE DATABASE ACCESSI
ed indichiamo a mysql che vogliamo lavorare sul DB appena creato:
mysql>USE ACCESSI
creiamo infine la tabella UTENTI
mysql>CREATE TABLE UTENTI (codice INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
id VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, UNIQUE(id,password);