Top Banner
Fabrizio Felici LAMP workshop GROsseto Linux Users Group
15

Fabrizio Felici LAMP workshop GROsseto Linux Users Group.

May 02, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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]