ALCUNE PRECISAZIONI SU PHP e Data Base Fate riferimento alla figura Client/Server che abbiamo fatto tempo fa alla lavagna: compare il simbolo di un DataBase. Per ora pensiamo a un database (d’ora in poi DB) come a un archivio e a un software dedicato per la registrazione, la consultazione e la modifica di dati. Esistono varie implementazioni di DB (Access, MySQL, Posgresql, Oracle, Informix, DB2, ecc.). Noi useremo Postgres su sistemi Linux. Linux è un S.O. multiprogrammato, e fra i numerosi programmi che girano insieme ce n’è uno che si chiama postmaster. Questo programma deve essere attivo, altrimenti non si può usare il database. Ogni utente Linux può essere promosso a utente di Postgres, e questa promozione la fa l’amministratore. Supponiamo dunque che l’utente pinco sia anche utente postgres. Adesso pinco può crearsi un DB, per esempio per inserirci dentro dati anagrafici di persone, dati relativi a learning e pillole della nostra area di progetto. Ma come si fa? Occorre prima capire come è fatto un DB. Lo diremo in modo molto informale, e senza i crismi dell’informatica teorica. Nel DB possiamo inserire delle tabelle. Pensiamo a una tabella come a una serie di righe, ognuna delle quali ha dei campi, un po’ come un file del tipo: anagrafica codice 48 70 800 cognome Garibaldi Cavour Magno nome Giuseppe Camillo Carlo email [email protected] [email protected] [email protected] La tabella ANAGRAFICA ha 4 campi, il primo di tipo intero, gli altri stringa. Si possono poi estrarre dalla tabella alcune righe, per esempio quelle che hanno il campo nome che inizia per “c”, oppure quelle che hanno codice > 50. Oppure si possono facilmente modificare i campi, come per es. la e-mail, o, ancora, cancellare righe. Per creare la tabella nel DB, occorre prima creare il DB stesso, dandogli un nome. In Linux: $>createdb learning $>psql learning Con questo secondo comando entriamo nell’ambiente di gestione testuale del DB. Apparirà il prompt learning=> Ora creiamo la tabella anagrafica con il comando seguente (che è uno standard del linguaggio SQL, cioè un linguaggio che si può usare anche con tutti gli altri DB come oracle, Access, Informix ecc.) learning=>create table anagrafica (codice int, cognome text, nome text, email text); Per vedere le tabelle presenti in un DB date: learning=>\d oppure learning=>\d anagrafica Inseriamo ora dei dati (sempre con comandi standard SQL): learning=>insert into table anagrafica values (48,’Garibaldi’,’Giuseppe’,’[email protected]’); Possiamo estrarre ora tutti i dati con: learning=>select * from anagrafica; Oppure possiamo estrarne solo alcuni: learning=>select * from anagrafica where codice > 50; learning=>select cognome, email from anagrafica where nome=’Camillo’; Questo, però, è un modo scomodo di operare. Vediamo come si fanno le stesse cose con il WEB e il PHP. Il codice PHP per interfacciarsi a un DB Postgres Ecco subito un esempio che consente di estrarre (che è la cosa più facile) dati da un DB. <? $PG_HOST="localhost"; // potrebbe essere una anche un ind. IP come 217.123.1.4 $PG_DATABASE="learning"; $PG_PORT="5432"; // 5432 è il port standard su cui è in ascolto postmaster $PG_USER="pinco"; $PG_PASS="pinco"; $connessione = pg_connect("dbname=$PG_DATABASE host=$PG_HOST port=$PG_POR T user=$PG_USER password=$PG_PASS"); if (!$connessione) // se qualcosa è andato storto { echo "Errore di connessione al database !<br>"; printf("%s", pg_errormessage($connessione)); // al posto di echo uso printf exit(); } $query=”select * from anagrafica”; $res=pg_Exec($connessione,$query); pg_close($connessione); $n_righe=pg_NumRows($res); // istruzione SQL per estrarre dati //pg_NumRows vi dà il n. di righe di cui si // compone la tabella risultante $res for($i=0;$i<$n_righe;$i++) { $rec=pg_fetch_Array($res,$i); echo $rec[codice].” “.$rec[nome].” echo “<HR>”; } “.$rec[cognome].” “.$rec[email]; ?> Come vedete, il primo passo consiste nel creare una specie di “canale di comunicazione” con il DB, canale che chiamiamo connessione. Il DB potrebbe anche essere posto su un altro computer, anche distante migliaia di chilometri, ma, per i nostri scopi, è meglio se lo teniamo sullo stesso server. La connessione tra PHP e DB, quindi, fa riferimento alla macchina locale. Siccome questa parte è sempre la stessa per qualsiasi operazione dobbiate poi fare sul DB, conviene metterla in un file di tipo include. Poi vi dirò come. Il secondo passo consiste nel dire cosa si deve fare sul DB, e dare l’ordine di farlo, ottenendo il risultato in una variabile (che può anche essere molto grossa) che abbiamo chiamato $res. Pensiamo a $res come a una tabella da cui dobbiamo tirar fuori tute le righe e stamparne i campi. Allora, terzo passo, con un ciclo che scandisce la tabella da stampare, tiriamo fuori ciascuna riga (istruzione pg_fetch_Array). Ogni riga estratta è vista come un vettore, il cui indice può essere o un numero (da 0 a 3 perché la nostra tabella anagrafica è fatta di 4 campi per ogni riga), o anche il nome del campo. Strano ma vero. Cose che in C sarebbero fantascienza. Ecco il risultato a video: Aggiungete poi effetti grafici in HTML, mettete i dati in una tabella, e avrete maggior soddisfazione !