Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

15
Fabrizio Felici LAMP workshop GROsseto Linux Users Group

Transcript of Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Page 1: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Fabrizio Felici

LAMP workshop

GROsseto Linux Users Group

Page 2: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Perché impegnarsi nel LAMP

● È (relativamente) facile da imparare● È un'architettura completamente libera● Sta diventando la piattaforma di riferimento in molti ambiti● C'è interoperabilità di sistemi● Si rivolge decisamente e funziona su internet e intranet● Permette di fare molto anche da soli

La cosa a cui bisogna stare attenti è... la facilità del linguaggio, che può portare a uno stile di programmazione superficiale; generamente un buon programma dev'essere:

● ben commentato;● orientato al riuso del codice (niente copia e incolla ma funzioni richiamabili);● scalabile (quello che funziona per due oggetti deve farlo per dieci milioni).

LAMP workshop

Page 3: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Conoscenze da sviluppare

● Linguaggio HTML (e javascript, css)● Linguaggio PHP● Linguaggio SQL● Analisi dei problemi● Cenni di amministrazione di sistemi

Con l'autoistruzione e la buona volontà si può ben colmare lacune e mancanze.

Questo workshop vuole far vedere che anche in un'ora si hanno dei risultati e delle soddisfazioni inaspettate.

LAMP workshop

Page 4: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

LAMP = Linux Apache Mysql Php (Perl, Python)

● Istallare Linux Fedora, Debian, Ubuntu, Suse...● Istallare Apache yum install httpd (Fed), apt-get install httpd (Deb,Ub)● Istallare Php yum install php (Fed), apt-get install php (Deb,Ub)● Istallare Mysql yum install mysql (Fed), apt-get install mysql (Deb,Ub)● Istallare librerie per mysql yum install php-mysql (Fed), apt-get install php-

mysql (Deb,Ub)

E' tutto ok? TEST:● /etc/init.d/mysqld start (Fed), /etc/init.d/mysql-ctl start (Deb,Ub)● /etc/init.d/httpd start (Fed), /etc/init.d/apachectl start (Deb,Ub)● Aprire browser su http://localhost/● echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php● Aprire browser su http://localhost/phpinfo.php

Se tutto OK: ● Istallare PhpMyAdmin da http://www.phpmyadmin.net/ prendiamo e

scompattiamo il file in /var/www/html, creando una dir chiamata phpmyadmin. LAMP workshop

Page 5: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Creazione del database

Vogliamo informatizzare la lista della nostra collezione di dischi/Cd.Dopo l'analisi scegliamo per ogni disco di inserire: autore, titolo, note, prezzo.Per esigenze di integrità, un database relazionale deve avere una chiave primaria, un campo distintivo diverso da record a record. Noi sceglaimo di mettere un numero, detto id.

Dall'interfaccia di phpmyadmin (http://localhost/phpmyadmin/):● scriviamo il nome del database: “dischi” e clic su crea;● creiamo una nuova tabella “oggetti” con il nome, 5 campi e clic su esegui;● inseriamo in ogni campo i nomi con i giusti tipi (numerici mediumint, float e varchar con lunghezza 100), per l'id extra auto_increment e accanto il bottone “primaria”, e salva.

Adesso abbiamo un database vuoto, che possiamo popolare come ci piace con la funzione “inserisci” e poi vedere a schermo con la funzione “mostra”.Ma il nostro scopo è costruire con le nostre mani una piccola applicazione che faccia questo, e altro.

LAMP workshop

Page 6: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Primo compito: connettersi al db

La prima cosa da fare è stabilire una connessione al database mysql, tramite le funzioni del modulo php-mysql; facciamo un file chiamato conn.php dentro /var/www/html con questo contenuto:

<?php# gli scritti preceduti da un # sono commenti# connessione al db, $ precede il nome di ogni variabile$db_nome = "dischi";$connessione = mysql_connect ("localhost", "root", "") or die ("Impossibile stabilire una connessione a $db_nome.");$db = mysql_select_db ($db_nome, $connessione) or die("Impossibile selezionare il database $db_nome.");?>

Come si vede, serve il nome del db (dischi), del nostro pc (localhost), il nome e la password di un utente valido del mysql (root e niente password, il che è una falla di sicurezza ma per provare va bene, ricordatevi poi di mettercela!).

Proviamo sul browser: http://localhost/conn.php; schermo bianco = tutto ok!

LAMP workshop

Page 7: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Arriva l'output (grezzo)

Ora è il momento di creare lo script che tirerà fuori tutti i nostri dati, pur se in modo piuttosto banale e sbrigativo; facciamo un file chiamato lista.php dentro /var/www/html con questo contenuto:

<?php# include nel file lo script di connessioneinclude "conn.php";# prepara la query che seleziona tutti i campi di tutte le righe di oggetti$sql = "SELECT * FROM oggetti";# esegue la query e mette tutto dentro $ris, si ferma se c'è un errore$ris = mysql_query ($sql, $connessione) or die (mysql_error());# seleziona a turno ogni riga del risultato fino a che ce ne sonowhile ($row=mysql_fetch_object($ris)) {

# stampa la linea presa nel formato 'oggetto' con un a capo in htmlprint_r ($row); echo "<br>";

}?>

LAMP workshop

Page 8: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Preparare un output migliore

Sul browser con http://localhost/lista.php potete vedere il risultato che sarà un elenco con righe simili a questa:

stdClass Object ( [id] => 2 [autore] => BEATLES [titolo] => Let it be [note] => Apple Ita [stato] => buono [prezzo] => 18.00 )

che non è di tutta questa bellezza, e ovviamente può (deve!) essere migliorato!

Come vedete ogni oggetto $row è composto dai campi id, autore etc, ognuno col suo valore 2, BEATLES etc...Per estrarre questi valori dentro il while basta riferirsi alla variabile $row->id, $row->autore etc...Per cui il nostro codice si modificherà leggermente in:

LAMP workshop

Page 9: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Prepara un output migliore<?php# include nel file lo script di connessioneinclude "conn.php";# prepara la variabile che conterrà l'output$out = "";# prepara la query che seleziona tutti i campi di tutte le righe di oggetti$sql = "SELECT * FROM oggetti";# esegue la query e mette tutto dentro $ris, si ferma se c'è un errore$ris = mysql_query ($sql, $connessione) or die (mysql_error());# seleziona a turno ogni riga del risultato fino a che ce ne sonowhile ($row=mysql_fetch_object($ris)) {

# aggiunge la riga a $out$out.= "$row->autore - $row->titolo ($row->note, $row->stato) $row-

>prezzo &euro;<br>";}# stampa tutto a schermoecho $out;?>

Il risultato è apprezzabile, con righe simili:BEATLES - Let it be (Apple Ita, buono) 18.00 €

LAMP workshop

Page 10: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Un tocco di HTML

<?phpinclude "conn.php"; # include nel file lo script di connessione# prepara la variabile che conterrà l'output$out = "<table><tr><td><b>Autore</b></td><td><b>Titolo</b></td><td>Note, stato</td><td>Prezzo(&euro;)</td></tr>";# prepara la query che seleziona tutti i campi di tutte le righe di oggetti$sql = "SELECT * FROM oggetti";# esegue la query e mette tutto dentro $ris, si ferma se c'è un errore$ris = mysql_query ($sql, $connessione) or die (mysql_error());# seleziona a turno ogni riga del risultato fino a che ce ne sonowhile ($row=mysql_fetch_object($ris)) {

# aggiunge la riga a $out$out.= "<tr><td>$row->autore</td><td>$row->titolo </td><td>($row->note,

$row->stato)</td><td>$row->prezzo</td></tr>";}$out.= "</table>";echo $out; # stampa tutto a schermo?>

Finalmente tutti i nostri risultati sono bellini in colonna! E ora se volessimo fare una ricerca per autore?...

LAMP workshop

Page 11: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Arriva la ricerca<?phpinclude "conn.php"; # include nel file lo script di connessione# prepara la variabile che conterrà l'output con la casella per la ricerca$out = "<form action=\"$PHP_SELF\" method=\"POST\"><input type=\"text\" name=\"ricerca\" size=20><input name=\"cerca\" value=\"cerca\" type=\"submit\"></form><table><tr><td><b>Autore</b></td><td><b>Titolo</b></td><td>Note, stato</td><td>Prezzo(&euro;)</td></tr>";# prepara la query che seleziona tutti i campi delle righe che rispettano la condizione "where"$sql = "SELECT * FROM oggetti WHERE autore LIKE '%$ricerca%'";# esegue la query e mette tutto dentro $ris, si ferma se c'è un errore$ris = mysql_query ($sql, $connessione) or die (mysql_error());# seleziona a turno ogni riga del risultato fino a che ce ne sonowhile ($row=mysql_fetch_object($ris)) {

# aggiunge la riga a $out$out.= "<tr><td>$row->autore</td><td>$row->titolo </td><td>($row->note,

$row->stato)</td><td>$row->prezzo</td></tr>";}$out.= "</table>";echo $out; # stampa tutto a schermo?>

LAMP workshop

Page 12: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Arriva la ricerca...

Commentiamo brevemente le nuove aggiunte: $PHP_SELF è la variabile col nome dello script, usato per far puntare la form su sé stessa; il primo input è la casella di testo che si chiama “ricerca”, che quando premete il bottone cerca viene passata allo script stesso come variabile chiamata $_POST[ricerca]. Notare i doppi apici tutti con la backslash \ davanti, necessaria essendo dentro a una variabile.

A questo punto la SQL viene completata con la condizione autore LIKE '%$_POST[ricerca]%', cioè viene ricercato ogni nome di autore che contiene il testo che avete immesso, grazie alla presenza dei % che fungono da carattere jolly (l'equivalente dello * per i nomi di file).

Adesso non vi resta che provare a cambiare un po' di cose, come cercare per titolo, ordinare per prezzo con il comando ORDER BY prezzo aggiunto in coda alla $sql, selezionare solo un campo cambiando il * con il nome del campo stesso...

LAMP workshop

Page 13: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

...e questo è solo l'inizio!

Avete visto come in breve tempo e con poche righe di codice sia facile estrarre dei dati da un database, usando pochissime funzioni PHP e una query. Io trovo che sia elettrizzante riuscire a fare in questo modo una cosa che fino a poco fa magari ritenevate di chissà quale complessità.

Ovviamente è solo la punta dell'iceberg. Il resto tocca a voi!...

Potete appoggiarvi a phpmyadmin e vedere le query che fa lui per compiere operazioni come inserimenti, aggiornamenti e provare a implementarli ingrandendo la form, potete approfondire l'HTML, che vi serve per fare pagine più accattivanti, andare avanti a esplorare il PHP, che raccoglie migliaia di funzioni.

Benchè avete molta strada da fare da soli, nessuno vi vieta di rivolgervi ancora a noi, tramite il forum del nostro gruppo.

LAMP workshop

Page 14: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

Risorse utili

● http://www.php.net/manual/it/ manuale online delle funzioni del PHP;

● http://www.mysql.com/ sito ufficiale del Mysql;

● http://www.w3schools.com/tags/ manuale di riferimento HTML;

● http://www.hotscripts.com/PHP/ miriadi di script già pronti per esempi e

tutorial

● http://bluefish.openoffice.nl/ il mio programma preferito per scrivere in

PHP

● http://www.nvu.com/ il miglior programma libero di

authoring per il web,

disponibile per Linux, Win, Mac

● http://www.grolug.org/forums il posto giusto per fare tutte le vostre

domande

LAMP workshop

Page 15: Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

26/11/2005 Grosseto, LinuxDay 2005 15

Per maggiori informazioni:

[email protected]

http://www.grolug.org

[email protected]