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" 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);