LAMP workshop
Fabrizio Felici
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
● Istallare Apache
Fedora, Debian, Ubuntu, Suse...
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 connessione
include "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 sono
while ($row=mysql_fetch_object($ris)) {
# stampa la linea presa nel formato 'oggetto' con un a capo in html
print_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 connessione
include "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 sono
while ($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 schermo
echo $out;
?>
Il risultato è apprezzabile, con righe simili:
BEATLES - Let it be (Apple Ita, buono) 18.00 €
LAMP workshop
Un tocco di HTML
<?php
include "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 sono
while ($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
<?php
include "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 sono
while ($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/
authoring per il
il miglior programma libero di
web,
disponibile per Linux, Win, Mac
●
http://www.grolug.org/forums
il posto giusto per fare tutte le vostre
domande
LAMP workshop
Per maggiori informazioni:
[email protected]
http://www.grolug.org
[email protected]
26/11/2005
Grosseto, LinuxDay 2005
15
Scarica

LAMP workshop