php e mysql phpmyadmin smarty template

48
Php e MySQL Php e MySQL PhpMyAdmin PhpMyAdmin Smarty template Smarty template Interazione tra basi di dati e web Interazione tra basi di dati e web Francesco Brancati – [email protected] Cristina Pucci – [email protected]

Upload: camden-marsh

Post on 03-Jan-2016

111 views

Category:

Documents


1 download

DESCRIPTION

Interazione tra basi di dati e web. Php e MySQL PhpMyAdmin Smarty template. Francesco Brancati – [email protected] Cristina Pucci – [email protected]. Php e MySQL. Gestire intere sezioni di siti web in modo semplice e veloce - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Php e MySQL PhpMyAdmin Smarty template

• Php e MySQLPhp e MySQL• PhpMyAdminPhpMyAdmin• Smarty templateSmarty template

Interazione tra basi di dati e webInterazione tra basi di dati e web

Francesco Brancati – [email protected]

Cristina Pucci – [email protected]

Page 2: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 2

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

Page 3: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 3

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

Page 4: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 4

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

Page 5: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 5

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.

Page 6: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 6

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

Page 7: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 7

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

Page 8: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 8

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

Page 9: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 9

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

Page 10: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 10

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

Page 11: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 11

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><? } ?>

Page 12: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 12

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

Page 13: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 13

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

insert.php (1)

Page 14: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 14

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>

Page 15: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 15

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();?>

Page 16: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 16

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

Page 17: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 17

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

Page 18: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 18

save.php (2)

$titolo = addslashes(stripslashes($titolo));$autore = addslashes(stripslashes($autore));$mail = addslashes(stripslashes($mail));$testo = addslashes(stripslashes($testo));$titolo = str_replace("<", "&lt;", $titolo);$titolo = str_replace(">", "&gt;", $titolo);$autore = str_replace("<", "&lt;", $autore);$autore = str_replace(">", "&gt;", $autore);$testo = str_replace("<", "&lt;", $testo);$testo = str_replace(">", "&gt;", $testo);$testo = nl2br($testo);

$data = mktime("0", "0", "0", $mese, $giorno, $anno);

Page 19: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 19

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

Page 20: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 20

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

Page 21: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 21

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();?>

Page 22: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 22

Visualizzione dell'articolo completo: view.php

• Si estrae dalla tabella la riga corrispondente all’articolo interessato

• Si visualizzano le informazioni

Page 23: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 23

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();?>

Page 24: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 24

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

Page 25: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 25

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>"; }?>

Page 26: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 26

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> ";}?>

Page 27: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 27

all.php (3)

</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();?>

Page 28: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 28

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

Page 29: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 29

search.php

<?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();?>

Page 30: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Php e MySQL 30

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()?>

Page 31: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

PhpMyAdmin 31

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

Page 32: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

PhPMyAdmin 32

Home Page

Page 33: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

PhPMyAdmin 33

Struttura database

Page 34: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

PhPMyAdmin 34

Struttura tabella

Page 35: Php e MySQL PhpMyAdmin Smarty template

Query SQL

Page 36: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

PhPMyAdmin 36

Dump

Page 37: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

PhPMyAdmin 37

Dump (2)

Page 38: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 38

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

Page 39: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 39

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

Page 40: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 40

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

Page 41: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 41

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.phpindex.phpinclude('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');

Page 42: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 42

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.tplindex.tpl output <html>

<head>

<title>Info Utente</title>

</head>

<body>

Utente:<p>

Name: {$name}<br>

Address: {$address}<br>

</body>

</html>

<html>

<head>

<title>Info Utente</title>

</head>

<body>

Utente:<p>

Name: mario rossi<br>

Address: via forlì 42<br></body>

</html>

Page 43: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 43

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)

Page 44: Php e MySQL PhpMyAdmin Smarty template

header.tplheader.tpl footer.tplfooter.tpl <html>

<head>

<title>{$title|default:"no title"}</title>

</head>

<body>

</body>

</html>

index.tplindex.tpl output {include file="header.tpl" title="Info Utente"}

Utente:<p>

Name: {$name|capitalize}<br>

Address: {$address|escape:”htmlall”}

<br>

Date: {$smarty.now|date_format:

"%Y-%m-%d"}<br>

{include file="footer.tpl"}

<html>

<head>

<title>Info Utente</title>

</head>

<body>

Utente:<p>

Name: Mario Rossi<br>

Address: via forl&igrave 42<br>Date: 2005-04-29<br>

</body>

</html>

Page 45: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 45

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()

Page 46: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 46

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>

Page 47: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Smarty 47

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>

Page 48: Php e MySQL PhpMyAdmin Smarty template

Interazione tra basi di dati e web

Risorse 48

Risorse

• http://freephp.html.it/• http://www.risorse.net/• http://www.php.net/• http://smarty.php.net/• http://www.mysql.com/