Fabrizio Felici LAMP workshop GROsseto Linux Users Group.
-
Upload
tiziana-leonardi -
Category
Documents
-
view
236 -
download
1
Transcript of Fabrizio Felici LAMP workshop GROsseto Linux Users Group.
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
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
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
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
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
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
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
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 €<br>";}# stampa tutto a schermoecho $out;?>
Il risultato è apprezzabile, con righe simili:BEATLES - Let it be (Apple Ita, buono) 18.00 €
LAMP workshop
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(€)</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
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(€)</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
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
...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
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
26/11/2005 Grosseto, LinuxDay 2005 15
Per maggiori informazioni:
http://www.grolug.org