Database in rete & Pagine dimamiche Creazione di un sito web con e di Jacopo Sirianni anno scolastico 2007/2008
Introduzione Data la sempre crescente quantità di informazioni presenti in un sito internet, sempre più spesso si realizzano soluzioni web che fanno uso di un database. Per creare il mio sito web ho utilizzato il linguaggio PHP e MySQL come DBMS separando la creazione dei contenuti da quella delle pagine per aumetare l'efficienza. Si è preferito inoltre l'uso di un database al posto del filesystem in quanto più efficiente e più adatto alla realizzazione di un sito internazionalizzabile.
Programmazione lato server: PHP PHP (acronimo di PHP: Hypertext Preprocessor) è un linguaggio di programmazione lato server che consente di creare pagine web dinamiche, ossia che sono frutto di un'elaborazione. PHP per funzionare ha bisogno di un apposito interprete che comunica con il web server. Server web Client richiesta pagina (X)HTML invio pagina Client richiesta pagina (X)HTML invio pagina Server web Interprete PHP richiesta esecuzione codice PHP invio risultato esecuzione <html> <head> ... </head> <body> ... <?php echo “questo è PHP!!!!”; ?> ... </body> </html> T e m p o
Programmazione lato client: JavaScript Il client riceve il codice JavaScript dal server web assieme al codice (X)HTML e viene eseguito da un interprete contenuto nel browser. Browser Server web La programmazione lato client è complementare a quella lato server. interprete JavaScript interprete PHP <html> <head> ... </head> <body> ... <script language=”javascript” type="text/javascript"> /* codice */ </script> ... </body> </html>
Database: cenni teorici Un database relazionale è strutturato in tabelle composte da righe e colonne. Ogni riga è resa univoca dalla chiave primaria. id date title_en title_it content_en content_it reads_en reads_it news desc_en desc_it category_en category_it path container name downloads files avere riferirsi Nei database relazionali è possibile stabilire delle relazioni tra le tabelle attraverso le chiavi esterne. Per progettare un database solitamente si realizza lo schema E/R (Entity / Relationship).
Database: SQL Le interrogazioni (query) al database vengono eseguite utilizzando il linguaggio SQL (Structured Query Language). SQL è: Semplice Potente Case-insensitive L'istruzione più utilizzata è la SELECT che permette di estrarre i dati dal database. La sua sintassi può essere estesa grazie ad elementi facoltativi come GROUP BY, ORDER BY e altri. SELECT nome_campi FROM tabella WHERE condizione; mysql_query("SELECT id, date, title_en, title_it, content_en, content_it, views_en, views_it, container_id FROM news ORDER BY date DESC LIMIT " . $start . ", 10" . ";");
Applicazioni e librerie sono ”limitanti” Database in rete Un DataBase Management System (DBMS) è un software che permette la gestione di una base di dati e può essere realizzato in vari modi: Applicazione (es: Microsoft Access) Libreria (es: SQLite) Server (es: MySQL) L'implementazione basata su file permette ad un solo utente per volta di scrivere nel database. L'accesso ai dati è getistito dal filesystem perchè non c'è un sistema di autenticazione. Non è possibile stabilire dei permessi all'interno del database. Applicazioni e librerie sono ”limitanti” Server
Database in rete: MySQL MySQL è un Relational DBMS (RDBMS) open source sviluppato da MySQL AB acquistata quest'anno da Sun Microsystems. MySQL è un server che gestisce la race condition ovvero l'accesso in contemporanea degli utenti al database. PHP per interrogare il database, deve prima connettersi e successivamente disconnettersi. $db_host = "localhost"; $db_user = "utente"; $db_password = "password"; $db_name = "database"; $db = mysql_connect($db_host, $db_user, $db_password); mysql_select_db($db_name) or die ("Errore nella selezione del database."); // interrogazioni mysql_close($db);
Interrogazioni in MySQL Le interrogazioni in MySQL vengono fatte con la funzione mysql_query() che restituisce una tabella con i risultati. Alcune delle altre funzioni che ho utilizzato sono: mysql_fetch_array($result, MYSQL_ASSOC) Preleva un record dall'interrogazione. mysql_num_rows($result) Conta il numero di righe (cardinalità) della tabella $result. Le pagine dinamiche agiscono da interfaccia tra l'utente e il database. $result = mysql_query(“SELECT * FROM tabella”); Pagina web DBMS DB
Passaggio delle variabili: GET e POST Le pagine web dinamiche possono generare il contenuto utilizzando dei parametri che possono essere passati dall'utente. I metodi per passare i parametri sono due: GET (usato con i link) visibile all'utente POST (usato con i form) invisibile all'utente I dati saranno accessibili nella pagina PHP grazie a degli array associativi, $_GET e $_POST. Ho utilizzato GET per identificare le diverse pagine del sito; questo permette all'utente di salvare le pagine nei segnalibri. <a href=”./index.php?section=projects”>Progetti</a> <form action=”pagina.php” method=”post”> <input type=”text” name=”name” /> <input type=”submit” name=”submit” value=”invia” /> </form> echo $_POST['name'];
Mantenimento dello stato: cookie e sessioni Una volta passati i parametri il problema è come renderli accessibili in tutte le pagine (HTTP è stateless). cookie sessioni I cookie sono piccoli file memorizzati nel client anche dopo la chiusura del browser o il riavvio del computer; vengono cancellati alla loro scadenza. I dati vengono letti dall'array $_COOKIE. I cookie possono essere un rischio per la sicurezza, richiedono il supporto dell'utente e non permettono di memorizzare array. Le sessioni superano queste limitazioni associando ad ogni utente un array identificato da un id. L'id viene memorizzato in un cookie o passato tramite GET. I valori della sessione sono accessibili tramite l'array $_SESSION. setcookie(“nomecookie”, “valore”, time() + 3600); session_start();
Note bibliografiche & riferimenti Informatica: le basi di dati e il linguaggio SQL, A. Lorenzi ed E. Cavalli, 2007, Atlas www.php.net www.mysql.com www.html.it it.wikipedia.org it.wikibooks.org Questo documento è scaricabile gratuitamente dal sito http://jacop0.altervista.org. Copyright © Jacopo Sirianni 2008 Alcuni diritti riservati. Questo documento è rilasciato sotto i termini della licenza Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported.