500 likes | 666 Views
Interazione tra basi di dati e web. Php e MySQL PhpMyAdmin Smarty template. Francesco Brancati – francesco.brancati@gmail.com Cristina Pucci – cristinapucci@inwind.it. Php e MySQL. Gestire intere sezioni di siti web in modo semplice e veloce
E N D
Interazione tra basi di dati e web • Php e MySQL • PhpMyAdmin • Smarty template Francesco Brancati – francesco.brancati@gmail.com Cristina Pucci – cristinapucci@inwind.it
Php e MySQL • Gestire intere sezioni di siti web in modo semplice e veloce • Gestione efficiente: possibilità di effettuare modifiche frequenti di contenuto ed eventualmente di veste grafica • Ci vengono in aiuto i linguaggi di programmazione orientati al web publishing come Php • Php ottimo per la creazione di pagine dinamiche, ma non offre nessuna possibilità di memorizzazione dei dati • Soluzione: utilizzare parallelamente un linguaggio di programmazione e un database Php e MySQL
Connessione al database: config.inc.php • Parametri per la connessione: • host: da cui si può raggiungere MySQL (generalmente è localhost) • username e password: per l'accesso al database • nome del database. Questi parametri vengono forniti dall'amministratore dello spazio web Php e MySQL
config.inc.php (1) Creiamo una pagina di nome config.inc.php con i parametri necessari: <? // parametri del database$db_host = "localhost";$db_user = "cristina";$db_password = "pucci";$db_name = "bdd"; // password per inserimento articoli$password = "master";?> Php e MySQL
config.inc.php (2) • config indica che il file contiene dei dati relativi alla configurazione dello script. • .inc ci ricorderà che questo file non è una pagina che verrà visualizzata direttamente, ma verrà inclusa all'interno di altre. • .php invece viene inserito per motivi di sicurezza. Se qualcuno cercherà di visualizzare questa pagina con il browser, vedrà solo una pagina vuota. Php e MySQL
Connessione al database: connect.inc.php • Possiamo realizzare la connessione al db attraverso la funzione mysql_connect. • Creiamo una pagina di nome connect.inc.php da includere in ogni file che effettua una operazione sul db <?$db = mysql_connect($db_host, $db_user, $db_password); if ($db == FALSE)die ("Errore nella connessione. Verificare i parametri nel file config.inc.php"); Php e MySQL
connect.inc.php • Se la connessione ha buon esito restituisce un identificatore alla connessione in $db • Se la connessione non va a buon fine viene restituito FALSE. • Dobbiamo specificare su quale database vogliamo lavorare e verificare nuovamente la riuscita dell'operazione: mysql_select_db($db_name, $db) or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php"); ?> Php e MySQL
Creazione delle tabelle: install.php • Dopo aver creato la connessione possiamo finalmente agire sul database • Il file install.php crea le tabelle necessarie al funzionamento dell’applicazione • Le query vengono comunicate al database attraverso la funzione mysql_query: $query = "CREATE TABLE news ( " ."id INT (5) UNSIGNED not null AUTO_INCREMENT, " ."titolo VARCHAR (255) not null, " ."testo TEXT not null, " ."data INT (11), " ."autore VARCHAR (50), " ."mail VARCHAR (50), " .”PRIMARY KEY (id))"; Php e MySQL
install.php • Se si verifica un errore durante l’esecuzione della query, questo viene visualizzato con la funzione mysql_error() if (mysql_query($query, $db)) echo "L'installazione è stata eseguita correttamente"; else echo "Installazione fallita: " .mysql_error()." durante l'esecuzione della query:".$query; include(“disconnect.inc.php"); ?> Php e MySQL
Connessione al database: disconnect.inc.php • Al termine dello script è sempre bene terminare la connessione al database includendo il file disconnect.inc.php : <? mysql_close($db); ?> Php e MySQL
Intestazione e piè di pagina: top_foot.inc.php • Creiamo una pagina top_foot.inc.php con i codici html che caratterizzano la veste grafica. <? function top() { ?><HTML><HEAD><meta name=generator content="Script di esempio"></HEAD><BODY bgcolor=ffffff text=000000><font face=verdana,tahoma,arial size=-1><h1>News</h1><br><? }function foot() { ?></body></HTML><? } ?> Php e MySQL
Creazione del modulo: insert.php • Creiamo il modulo per l'inserzione degli articoli: insert.php • questa pagina contiene la form necessaria a raccogliere i dati • non ci sono accessi al database • separazione tra interfaccia grafica e interazione con db Php e MySQL
insert.php (1) <?include ("top_foot.inc.php"); //intestazionetop();?> <form method=post action=save.php>Titolo:<br><input type=text size=40 name=titolo><br><br>Data:<br> <select name=giorno> <?for ($i=1; $i<=31; $i++)echo "<option value=$i>$i";?> Php e MySQL
insert.php(2) </select><select name=mese><option value=1>Gennaio<option value=2>Febbraio ... <option value=12>Dicembre</select><select name=anno><option value=2001>2001<option value=2002>2002<option value=2003>2003<option value=2004>2004<option value=2005>2005</select><br><br> Php e MySQL
insert.php (3) Autore:<br><input type=text size=40 name=autore><br><br>E-mail:<br><input type=text size=40 name=mail><br><br>Testo:<br><textarea cols=60 rows=40 name=testo></textarea><br><br>Password:<br><input type=password size=40 name=pass><br><br> <input type=submit value=Invia> </form> <?// chiusura paginafoot();?> Php e MySQL
Inserimento nel database: save.php • Creiamo la pagina save.php • controllo della password • controllo dei campi not null • controllo ed escaping dei caratteri particolari dentro le stringe • conversione delle date in formato timestamp • connessione al db e esecuzione della query Php e MySQL
save.php (1) <? include("top_foot.inc.php"); include("config.inc.php"); top(); if (!strcmp($pass,$password)) die ("Password errata"); if (trim($titolo) == "" OR trim($testo) == "") die("I campi Titolo e Testo devono essere riempiti!"); Php e MySQL
save.php (2) $titolo = addslashes(stripslashes($titolo)); $autore = addslashes(stripslashes($autore)); $mail = addslashes(stripslashes($mail)); $testo = addslashes(stripslashes($testo)); $titolo = str_replace("<", "<", $titolo); $titolo = str_replace(">", ">", $titolo); $autore = str_replace("<", "<", $autore); $autore = str_replace(">", ">", $autore); $testo = str_replace("<", "<", $testo); $testo = str_replace(">", ">", $testo); $testo = nl2br($testo); $data = mktime("0", "0", "0", $mese, $giorno, $anno); Php e MySQL
save.php (3) $db = mysql_connect($db_host, $db_user, $db_password); if ($db == FALSE) die ("Errore nella connessione. Verificare i parametri nel file config.inc.php"); mysql_select_db($db_name, $db) or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php"); $query = "INSERT INTO news (titolo, testo, data, autore, mail) VALUES ('$titolo', '$testo', '$data', '$autore', '$mail')"; Php e MySQL
Visualizzazione degli ultimi articoli: index.php • Si estraggono dal db i titoli degli articoli tramite mysql_query() • La funzione ci restituisce un identificatore nella variabile $result • Si scorre riga per riga il risultato dell’interrogazione tramite mysql_fetch_assoc(), che ci restituisce un array associativo • Si visualizzano gli articoli Php e MySQL
index.php <? include("top_foot.inc.php"); include("config.inc.php"); top(); include("connect.inc.php"); $query = "SELECT id" .",data" .",titolo " ."FROM news " ."ORDER BY data DESC " ."LIMIT 0,5"; $result = mysql_query($query, $db); while ($row = mysql_fetch_array($result)) { echo "<a href=\"view.php?id=$row[id]\">" . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; } include("disconnect.inc.php"); foot(); ?> Php e MySQL
Visualizzione dell'articolo completo: view.php • Si estrae dalla tabella la riga corrispondente all’articolo interessato • Si visualizzano le informazioni Php e MySQL
view.php <? include("top_foot.inc.php"); include("config.inc.php"); top(); include("connect.inc.php"); $query = "SELECT titolo,testo,data,autore,mail FROM news WHERE id='$id'"; $result = mysql_query($query, $db); $row = mysql_fetch_assoc($result); $data = date("j/n/y", $row[data]); echo "<b>$row[titolo]</b><br><br>"; echo "$row[testo]<br><br>"; if ($row[mail] != "") echo "$data, <a href=mailto:$row[mail]>$row[autore]</a><br>"; else echo "$data, $row[autore]<br>"; echo "<br><a href=index.php>Torna alla pagina iniziale</a><br>"; echo "<a href=all.php>Visualizza tutti gli articoli</a><br>"; include("disconnect.inc.php"); foot(); ?> Php e MySQL
Elenco di tutti gli articoli: all.php • Si stabilisce quanti titoli visualizzare per pagina • Si estraggono dal db i solo i titoli necessari per la pagina corrente Php e MySQL
all.php (1) <? include("top_foot.inc.php"); include("config.inc.php"); top(); include("connect.inc.php"); if (!isset($start) OR $start<0) $start = 0; $step = 10; $query = "SELECT id,data,titolo FROM news ORDER BY data DESC LIMIT $start,$step"; $result = mysql_query($query, $db); while ($row = mysql_fetch_array($result)) { echo "<a href=\"view.php?id=$row[id]\">" . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; } ?> Php e MySQL
all.php (2) <br><br> <table width=90% border=0><tr> <td width=20% align=left> <? if ($start>0) { $start_back = $start - $step; echo "<a href=all.php?start=$start_back>precedenti</a>"; } ?> </td> <? $query = "SELECT count(*) AS tot FROM news"; $result = mysql_query($query, $db); $row = mysql_fetch_array($result); $pages = intval(($row[tot]-1) / $step)+1; ?> <td width=60% align=center> <? for ($i=0; $i<$pages AND $i<20; $i++) { $start_page = $i * $step; echo "<a href=all.php?start=$start_page>" . ($i+1) . "</a> "; } ?> Php e MySQL
</td> <td width=20%> <? if ($start + $step < $row[tot]) { $start_next = $start + $step; echo "<a href=all.php?start=$start_next>successivi</a>"; } ?> </td> </tr></table> <br> <? echo "<a href=search.php>Cerca negli articoli</a>"; include(“disconnect.inc.php”); foot(); ?> all.php (3) Php e MySQL
Il motore di ricerca: search.php – result.php • Creiamo una form per immettere le parole da cercare • Supponiamo le chiavi divise da virgole ed usiamo la funzione array explode (string separator, string string [, int limit]); per ottenere un array di chiavi • Per ogni chiave facciamo una ricerca nel titolo, nel testo, e nell’autore • Visualizziamo i risultati Php e MySQL
<? include("top_foot.inc.php"); include("config.inc.php"); top(); ?> <form method=post action=result.php> <input type=text name=chiave><input type=submit value=cerca><br> </form> <? foot(); ?> search.php Php e MySQL
result.php <? include("top_foot.inc.php"); include("config.inc.php"); top(); include("connect.inc.php"); $keys = explode (",", $chiave); $query = ""; reset ($keys); foreach ($keys as $parola) { $parola = trim($parola); if ($parola != "") $query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR "; } $query .= "0"; $query = "SELECT id, titolo, data FROM news WHERE " . $query; $result = mysql_query($query, $db); while ($row = mysql_fetch_array($result)) { echo "<a href=\"view.php?id=$row[id]\">" . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; } include("disconnect.inc.php"); foot() ?> Php e MySQL
PhpMyAdmin • PhpMyAdmin è un'interfaccia grafica che permette di amministrare MySql • Con PhpMyAdmin, possiamo: • Visualizzare il contenuto del nostro database • Creare, modificare, cancellare database, intere tabelle o singoli record • Fare un backup (dump) dei dati contenuti • Importare grosse quantità di dati in diversi formati cvs, excel, sql… • Visualizzare informazioni interessanti sul db • Gestire gli utenti di MySQL ed i loro privilegi PhpMyAdmin
Home Page PhPMyAdmin
Struttura database PhPMyAdmin
Struttura tabella PhPMyAdmin
Dump PhPMyAdmin
Dump (2) PhPMyAdmin
Cos'è Smarty? • Smarty è un motore di template per PHP • Consente di separare logica e contenuto dell'applicazione dalla sua presentazione/layout • Programmatore e progettista non sono la stessa persona • Possibilità di apportare modifiche alla struttura logica dell’applicazione senza dover modificare il layout grafico e viceversa • Il programmatore (che si occupa della logica applicativa) può modificare il suo codice senza chiedere aiuto al grafico e viceversa Smarty
Compilazione dei template • Smarty legge i file dei template • Crea script PHP a partire da questi • una volta creati, questi script vengono eseguiti da quel momento in poi • Vantaggio: si evita una costosa analisi dei template ad ogni richiesta Smarty
Funzionalità di Smarty • E' estremamente veloce • E' efficiente, perché è l'analizzatore di PHP a fare il "lavoro sporco" • Non c'è sovraccarico per l'analisi del template, che viene compilato una sola volta • E' abbastanza furbo da saper ricompilare solo i template che sono stati modificati • Si possono creare funzioni personalizzate e modificatori di variabili personalizzati • Ciò rende il linguaggio dei template estremamente estensibile • La sintassi dei tag di delimitazione dei template è configurabile • Si possono usare {}, {{}}, <!--{}-->, ecc • E' consentito nidificare in maniera illimitata sezioni, test, ecc • E' possibile incorporare direttamente codice PHP nei file di template • Sebbene non dovrebbe essercene bisogno • Supporto nativo al caching • Funzioni personalizzate di gestione della cache • Architettura a plugin Smarty
Sintassi • Il concetto della programmazione con i template è semplice: • nel codice Php si definiscono variabili per l’utilizzo nel template • nel template si visualizzano queste variabili index.php include('Smarty.class.php'); // crea l’oggetto $smarty = new Smarty; // assegna un contenuto ad una variabile. // NB. di solito il contenuto è assegnato dinamicamente. $smarty->assign('name', 'mario rossi'); $smarty->assign('address', 'via forlì 42'); // lo visualizza $smarty->display('index.tpl'); Smarty
Sintassi • Il concetto della programmazione con i template è semplice: • nel codice php si definiscono variabili per l’utilizzo nel template • nel template si visualizzano queste variabili Smarty
Modificatori delle variabili • Sono usati per modificare l’output di una variabile, una funzione utente o una stringa da dentro il template • Per applicare un modificatore bisogna indicare il valore seguito da | (pipe) e dal nome del modificatore • Un modificatore può accettare parametri addizionali che modificano il suo comportamento • Questi parametri seguono il nome del modificatore e sono separati da : (due punti) Smarty
La funzione include • Permette l’uso delle variabili locali • nell’esempio precedente la variabile $title non è definita direttamente nel template ma è passata come parametro della funzione include() • così facendo $title può essere cambiata dinamicamente ogni volta che si include il file header.tpl • Usando il modificatore default è possibile dichiarare un valore predefinito nel caso la variabile non sia definita nella include() Smarty
Generare un elenco di dati • Si crea un array con i dati da elencare e si passa al template • Nel template si cicla sull’array tramite il costrutto section • Con la funzione cycle values alterniamo lo sfondo $smarty->assign('name', array('franco','marco','joe','lucia','carla')); • <table> • {section name=mysec loop=$name} • <tr bgcolor="{cycle values="#eeeeee,#dddddd"}"> • <td>{$name[mysec]}</td> • </tr> • {/section} • </table> Smarty
Generare un elenco di dati • L’output generato è questo: • <table> • <tr bgcolor="#eeeeee"><td>franco</td></tr> • <tr bgcolor="#dddddd"><td>marco</td></tr> • <tr bgcolor="#eeeeee"><td>joe</td></tr> • <tr bgcolor="#dddddd"><td>lucia</td></tr> • <tr bgcolor="#eeeeee"><td>carla</td></tr> • </table> Smarty
Risorse • http://freephp.html.it/ • http://www.risorse.net/ • http://www.php.net/ • http://smarty.php.net/ • http://www.mysql.com/ Risorse