Creare un sito dinamico in PHP ( http://www.ceptive.it/corsi/schedacorso.php?id=7&PHPSESSID=bdd2a1bb6bcc72d1a262e2ab72e56b4a ) Il nostro primo script Per tradizione, inizieremo con il classico script di saluto al mondo intero. Aprite il vostro editor di testi e digitate il codice seguente: <HTML> <?php echo "Ciao Mondo!"; ?> </HTML> Salva il file come primo.php e visualizzalo nel browser. La pagina visualizza la scritta "Ciao Mondo!". Visualizza dal tuo browser il codice HTML di questa pagina. E' presente soltanto la scritta Ciao Mondo!. Questo perchè il PHP ha processato il codice, e il codice ha detto al PHP di restituire in output la scritta "Ciao Mondo!". Nota i tag <?php and ?>. Questi delimitano il codice php e racchiudono il blocco di codice scritto in php. <?php dice al PHP di processare tutte le righe comprese tra questo tag php ed il tag filnale ?> che dice al PHP di terminare il processo. Tutte le righe esterne a questi tag vengono processate dal browser come codice HTML. Il nostro primo database Ora creiamo il nostro database e vediamo che cosa possiamo farci. Nel vostro phpMyAdmin create un database col nome learndb. Ora dobbiamo creare le tabelle nel database ed inserirci qualche dato. Nel vostro phpMyAdmin, inserite questa query: CONNECT learndb CREATE TABLE personnel ( id int NOT NULL AUTO_INCREMENT, firstname varchar(25), lastname varchar(20), nick varchar(12), email varchar(35), salary int, PRIMARY KEY (id), UNIQUE id (id) ); INSERT INTO personnel VALUES ('1', 'John', 'Lever', 'John', ' \n [email protected] Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo ', '75000'); INSERT INTO personnel VALUES ('2', 'Camilla', 'Anderson', 'Rose', ' \n [email protected] Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo ', '66000'); Questa query crea una tabella con 5 campi ed inserisce alcune informazioni. Visualizziamo il contenuto del database con PHP Adesso che abbiamo il nostro database con alcune informazioni al suo interno, visualizziamone il contenuto con il PHP. Salvate il codice seguente con il nome viewdb.php: <HTML> <?php $db = mysql_connect("localhost", "root", ""); mysql_select_db("learndb",$db); $result = mysql_query("SELECT * FROM personnel",$db); echo "<TABLE>"; echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Salary</B></TR>"; while($myrow = mysql_fetch_array($result)) { echo "<TR><TD>"; echo $myrow["firstname"]; echo " "; echo $myrow["lastname"]; echo "<TD>"; echo $myrow["nick"]; echo "<TD>"; echo $myrow["salary"]; } echo "</TABLE>"; ?> </HTML> Eseguitelo nel vostro browser e vedrete il database del personale. Ora esaminiamo il codice. Prima dichiariamo la variabile $db. Nel PHP dichiariamo una variabile inserendo il simbolo '$ ' seguito dal nome della variabile. Guardate questo esempio dove viene assegnato un valore ad una variabile: $nome_variabile= valore_assegnato; (esempio: $count= 4;) Ricordatevi di inserire il simbolo ';' alla fine di ogni riga. Dopo aver dichiarato la variabile $db abbiamo creato una connessione col database con il comando "mysql_connect("localhost", "root", "")". Questo significa collegati con il database MySQL nel server localhost con lo username root e la password "". Sostituisci questi valori con i tuoi dati se sono diversi. Abbiamo poi assegnato un puntatore al database $db; in altre parole, $db punta al nostro server localhost del database. Abbiamo selezionato il database con il quale vogliamo interagire, usando la riga "mysql_select_db("learndb",$db);": significa che noi vogliamo utilizzare il database "learndb" localizzato dalla variabile puntatore $db. Ma noi vogliamo informazioni dal database, allora abbiamo fatto una query al databaseusando la riga "$result = mysql_query("SELECT * FROM personnel",$db);" La parte "SELECT * FROM personnel" è un'istruzione SQL, che significa selezionare tutti i dati presenti nel database personnel. Il risultato della query mysql_ query() è stata poi salvata nella variabile $result. Ora possiamo accedere a tutti i dati presenti in tutte le righe del database dalla variabile $result. Utilizziamo la funzione mysql_fetch_array() per estrarre ogni riga dalla variabile $result e assegnarla alla variabile $myrow. Questa variabile contiene le informazioni di ogni riga strutturta come un array. Poi visualizziamo i dati contenuti in ogni riga. "echo $myrow["firstname"];" significa inviare in output il valore contenuto nel campo "firstname" della riga contenuta nella variabile $myrow. Qui abbiamo utilizzato il ciclo while(), cioè fino a quando ci sono dati da estrarre dalla variabile $result e da inserire nella variabile $myrow, esegui le righe contenute tra le parentesi graffe {}. Questo codice, potete formattarlo a vostro piacimento per rendere un output più gradevole. Congratulazioni! Avete appena creato la vostra prima pagina web dinamica! Creare una form HTML Ora vediamo come aggiungere un nuovo record al database. Con le vostre conoscenze di HTML, costruiamo una pagina che ci permetta di farlo. Creiamo una pagina html statica e la salviamo col nome datain.html: <HTML> <BODY> <form method="post" action="datain.php"> First name:<input type="Text" name="first"><br> Last name:<input type="Text" name="last"><br> Nick Name:<input type="Text" name="nickname"><br> E-mail:<input type="Text" name="email"><br> Salary:<input type="Text" name="salary"><br> <input type="Submit" name="submit" value="Enter information"> </form> </HTML> Adesso abbiamo una form di inserimento dati chiamata "datain.php". Dobbiamo creare il codice per questa pagina che permetta l'invio e l'inserimento dei dati al database MySQL. Ecco il codice che fa quello che abbiamo appena descritto, salvatelo col nome datain.php: <HTML> <?php $db = mysql_connect("localhost", "root",""); mysql_select_db("learndb",$db); $sql = "INSERT INTO personnel (firstname, lastname, nick, email, salary) VALUES ('$first', '$last', '$nickname','$email','$salary')"; $result = mysql_query($sql); echo "Thank you! Information entered.\ n"; ?> </HTML> Le prime tre righe le ho già spiegate in precedenza, con la piccola differenza che utilizziamo il comando SQL "INSERT INTO", che significa inserire nel database nelle colonne specificate (in questo caso firstname, lastname, nick, email) i dati contenuti rispettivamente nelle variabili'$first', '$last', '$nickname', '$email'. Ma da dove arrivano quese variabili? PHP crea le variabili automaticamente dai dati inviati dalla form. Il campo di inserimento della form chiamato "first" crea la variabile $first e contiene il testo inserito in quel dato campo. Nota Importante: Se avete installato PHP 4.2, dovete modificare il file php.ini e modificare la variabile register_globals da off a on, così: register_globals = on Se non è possibile, dovrete inizializzare le variabili manualmente voi stessi nel vostro codice. Questo è il metodo, se dovete inviare un dato da una form con il campo che si chiama "name" dovrete scriverre il codice seguente nella pagina che state inviando: <?PHP $name=$_POST[name]; $name=$_GET[name]; ?> //for post method //for get method Generalizzando si scrive così: <?PHP $nomevariabile=$_POST[nome_del_campo_inviato_dalla_form]; ?> Il codice risulterà scritto in questo modo: <HTML> <?php $db = mysql_connect("localhost", "root",""); mysql_select_db("learndb",$db); //variabili inserite menualmente $first=$_POST[first]; $last=$_POST[last]; $nickname=$_POST[nickname]; $email=$_POST[email]; $salary=$_POST[salary]; // $sql = "INSERT INTO personnel (firstname, lastname, nick, email, salary) VALUES ('$first','$last','$nickname','$email','$salary')"; $result = mysql_query($sql); echo "Thank you! Information entered.\n"; ?> </HTML> Uniamo il tutto Uniamo tutto il codice in un unico file. Lo chiameremo input.php: <HTML> <?php if($submit) { $db = mysql_connect("localhost", "root",""); mysql_select_db("learndb",$db); $sql = "INSERT INTO personnel (firstname, lastname, nick, email, salary) VALUES ('$first', '$ last', '$nickname','$email','$salary')"; $result = mysql_query($sql); echo "Thank you! Information entered.\n"; } else { ?> <form method="post" action="input.php"> First name:<input type="Text" name="first"><br> Last name:<input type="Text" name="last"><br> Nick Name:<input type="Text" name="nickname"><br> E-mail:<input type="Text" name="email"><br> Salary:<input type="Text" name="salary"><br> <input type="Submit"name="submit" value=" Enter information"></form> <? } ?> </HTML> Questo crea uno script che visualizza la form quando per inserire dati nel database. Abbiamo già detto che il PHP crea automaticamente variabili con i dati già inseriti al loro interno. Il PHP crea anche la variabile $submit se la form viene inviata. Lo script determina se la variabile $submit esiste. Se è così e contiene un valore, allora i dati inseriti nella form verranno aggiunti al nostro database; altrimenti, visualizzeremo la form. Provate ad inserire dei dati nel database e controllate se lo script funziona visualizzandoli utilizzando il file viewdb.php. Passaggio di variabili Consideriamo come vengono passate le informazioni ad una pagina PHP. Un metodo è quello di utilizzare le form come abbiamo già fatto; un altro metodo è quello di utilizzare le query strings. Cosa sono le query strings? Modificate la iga method="post" in method="get" nel nostro script input.php. Ora provate ad inviare i dati al database. Dopo aver cliccato su submit vedremo nel browser la nostra solita scritta "Thank you! Information entered". Ma osservate l'URL. Dovrebbe esserci una scritta come questa: http: Le informazioni sono state inviate come una stringa nell'URL invece di essere inviate direttamente. La frase dopo il carattere ? è la query string, e come potete vedere contiene il nome della variabile e il suo valore. Quando il PHP riceve una query string come ?first=John crea automaticamente una variabile chiamata $first e le assegna il valore che viene passato dalla query string. E' l'equivalente di $first="John";. Quando sono presenti più variabili, tvengono separate dal carattere &. Se non avete attivato l'opzione register_globals=on, dovete asscurarvi di inizializzare le variabili con $_GET così $first=$_GET[first];. Visualizzare le singole righe Ora creeremo uno script che visualizzeràle informazioni di una riga particolare del nostro database definita dalla variabile $id. Salva il codice seguente con il nome view.php. Provate a visualizzarlo nel vostro browser utilizzando questo percorso http://vostrohost/view.php?id=2 (abbiamo passato la variabile $id=2 tramite la query string). La pagina visualizzerà le informazioni relative alliid 2 del database MySQL. <HTML> <?php $db = mysql_connect("localhost", "root", ""); mysql_select_db("learndb",$db); $result = mysql_query("SELECT * FROM personnel WHERE id=$id",$db); $myrow = mysql_fetch_array($result); echo "First Name: ".$myrow["firstname"]; echo "<br>Last Name: ".$myrow["lastname"]; echo "<br>Nick Name: ".$myrow["nick"]; echo "<br>Email address: ".$myrow["email"]; echo "<br>Salary: ".$myrow["salary"]; ?> </HTML> In questo caso il comando SQL è cambiato e dice al databasedi cercare le righe che hanno il valore $id. Ma è possibile che più righe abbiano lo stesso id? Generalmente una colonna può contenere qualsiasi valore, lo stesso oppure no. Ma nel nostro database due righe non potranno mai avere lo stesso id, perchè quando abbiamo creato il nostro database, abbiamo definito l'id come UNIQUE. Salvate il file modificando il nome da viewdb.php a viewdb2.php. <HTML> <?php $db = mysql_connect("localhost", "root", ""); mysql_select_db("learndb",$db); $result = mysql_ query("SELECT * FROM personnel",$ db); echo "<TABLE BORDER=2>"; echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Options</B></TR>"; while($myrow = mysql_fetch_array($result)) { echo "<TR><TD>".$myrow["firstname"]." ".$myrow["lastname"]."<TD>".$myrow["nick"]; echo "<TD><a href=\"view.php?id=".$myrow[id]."\">View</a>"; } echo "</TABLE>"; ?> </HTML> Visualizzando questa pagina, avrete una lista di nomi con i ispettivi nicknames. Osservate la terza colonna con il suo link. Posizionatevi con il mouse sopra il link e guardate dove punta il collegamento. Il link dovrebbe essere così http://vostrohost/view.php?id=3 ed i links di ogni riga sono diversi. Cliccate su uno di questi links. Vi riportano alla pagina creata dal vostro codice view.php che visualizza le informazioni dettagliate di quella persona. Come viene ottenuto tutto ciò? Osservate il nostro codice del file viewdb2.php. Guardate la riga 11. L'unica cosa a noi non familiare, sono i puntini (.) sparsi nella riga. Questi puntini in PHP sono un operatore di concatenamento, significano che le stringhe ai lai del punto, sono concatenate tra di loro; ad esempio, se scrivo echo "Hello"."World", l'output sarà "HelloWorld". Nel nostro esempiousiamo l'operatore di concatenamento per generare una riga per il browser, come questa: <TR><TD>Camilla Anderson<TD>Rose<TD><a href="view.php?id=2">View</a> Eliminare righe Fino ad esso aabbiamo solo inserito nuove informazioni nel nostro database e le abbiamo visualizzate. Che cosa succede se dobbiamo eliminare dei dati inutili? Il nostro script delete.php farà questo per noi. Lavora esattamente come lo script view.php. L'unica differenza è il comando SQL "DELETE FROM personnel WHERE id=$id", che dice a MySQL di eliminare la riga che contiene l'id corrispondente alla variabile $id. Generalmente il comando SQL per eliminare una riga è DELETE FROM database_name WHERE field_name=somevalue <HTML> <?php $db = mysql_ connect("localhost", "root", ""); mysql_select_db("learndb",$ db); mysql_query("DELETE FROM personnel WHERE id=$id",$db); echo "Information Deleted"; ?> </HTML> Ancora una volta abbiamo modificato il nostro script viewdb2.php per inserire la nuova opzione e lo chiameremo viewdb3.php. <HTML> <?php $db = mysql_connect("localhost", "root", ""); mysql_select_db("learndb",$db); $result = mysql_query("SELECT * FROM personnel",$db); echo "<TABLE BORDER=2>"; echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Options</B></TR>"; while ($myrow = mysql_fetch_array($result)) { echo "<TR><TD>".$myrow["firstname"]." ".$ myrow[" nick"]; echo "<TD><a href=\"view.php?id=".$myrow[id]."\">View</a> "; echo "<a href=\"delete.php?id=".$myrow[id]."\">Delete</a>"; } echo "</TABLE>"; ?> </HTML> Provate a cliccare su delete e poi visualizzate ancra il database utilizando lo script viewdb3.php per verificare che la riga sia effettivamente eliminata. Modificare i dati Ci capiterà sicuramente di dover modificare i dati presenti nel database. Per creare lo script che farà questa operazione, modificheremo il file input.php. Chiameremo questo file modificato addedit.php: <HTML> <?php if($submit) { $db = mysql_connect("localhost", "root",""); mysql_select_db("learndb",$db); $sql = "INSERT INTO personnel (firstname, lastname, nick, email, salary) VALUES ('$first','$last','$nickname','$email','$salary')"; $result = mysql_query($sql); echo "Thank you! Information entered.\n"; } else if($update) { $db = mysql_connect("localhost", "root",""); mysql_select_db("learndb",$db); $sql = "UPDATE personnel SET firstname='$first', lastname='$last', nick='$nickname', email='$email', salary='$salary' WHERE id=$id"; $result = mysql_query($sql); echo "Thank you! Information updated.\n"; } else if($id) { $db = mysql_connect("localhost", "root", ""); mysql_select_db("learndb",$db); $result = mysql_query("SELECT * FROM personnel WHERE id=$id",$db); $myrow = mysql_fetch_array($result); ?> <form method="post"action="<?php echo $PHP_SELF?>"> <input type="hidden"name="id"value="<?php echo $myrow["id"]?>"> First name:<input type="Text"name="first"value="<?php echo $myrow["firstname"]?>"><br> Last name:<input type="Text" name="last" value="<?php echo $myrow["lastname"]?>"><br> Nick Name:<input type="Text" name="nickname" value="<?php echo $myrow["nick"]?>"><br> E-mail:<input type="Text" name="email" value="<?php echo $myrow["email"]?>"><br> Salary:<input type="Text" name="salary" value="<?php echo $myrow["salary"]?>"><br> <input type="Submit" name="update" value="Update information"></form> <? } else { ?> <form method="post" action="<?php echo $PHP_SELF?>"> First name:<input type="Text" name="first"><br> Last name:<input type="Text" name="last"><br> Nick Name:<input type="Text" name="nickname"><br> E-mail:<input type="Text" name="email"><br> Salary:<input type="Text" name="salary"><br> <input type="Submit" name="submit" value="Enter information"></form> <? } ?> </HTML> Il codice vi sembrerà un pò complesso, ma non lo è. Lo script precedente input.php può fare due cose: può aggiungere dati al nostro database e può visualizzare la form. Ora aggiungeremo due nuove opzioni: la possibilità di visualizzare la stessa form ma con i valori di una particolare persona presente nel database e la possibilità di aggiornare i records di questa persona. I comandi SQL per inserire nuove informazioni e aggiornare quelle esistenti sono diversi, così utilizziamo il nostro script precedente per inserire le informazioi. Lo script controlla la variabile $submit. Se contiene un valore, allora qualcuno ha inserito nuovi dati e le informazioni verranno inserite nel database. Se la variabile $submit non contiene nessun valore, allora qualcuno potrebbe aver inserito informazioni aggiornate, così viene controllata la variabile $update. Se contiene un valore, allora aggiorneremo il record della persona con il comando SQL "UPDATE personnel SET fieldname1= '$variablename1', fieldname2= '$variablename2' ......... WHERE id=$id";". Altrimenti, se qualcuno ha fornito l'id nella query string, visualizzeremo le informazioni relative alla persona identificata dall'id. Se tutto ciò non succede, verrà visualizzata la vecchia form. Proviamo lo script. Apritelo con il vostro browser per vedere che cosa succede. Poi richiamalo utilizzando la query string ?id=1. Modifica le inormazioni e clicca update. Verifica se il database è stato aggiornato usando lo script viewdb3.php. Un'altro nuovo elemento è stato inserito. E' la variabile globale PHP $PHP_SELF. Questa variabile contiene sempre il nom dello script che la contiene e la sua posizione. Abbiamo tilizzato questa variabile in una 'form action', non preoccupatevi del nome di questo file, questo script invierà sempre le informazioni a se stesso. Abbiamo modificato ancora una volta il nostro script per la visualizzazione inserendo questa opzione. Qui sotto c'è il codice di questo script che chiameremo viewdb4.php: <HTML> <?php $db = mysql_connect("localhost", "root", ""); mysql_ select_db("learndb",db); $result = mysql_query("SELECT * FROM personnel",$db); echo "<TABLE BORDER=2>"; echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Options</B></TR>"; while($myrow = mysql_fetch_array($result)) { echo "<TR><TD>".$myrow["firstname"]." ".$myrow["lastname"]."</a><TD>".$myrow["nick"]; echo "<TD><a href=\"view.php?id=".$myrow[id]."\">View</a> "; echo "<a href=\"delete. php?id=".$myrow[id]."\">Delete</a> "; echo "<a href=\"addedit.php?id=".$myrow[id]."\">Edit</ a>"; } echo "</TABLE>"; ?> </HTML> Cercare dati Arrivati a questo punto, ci serve un motore di ricerca dei dati presenti nel database. Questa pagina visualizzerà inizialmente una form statica e dopo aver inserito la parola da cercare, visualizzarà il risultato della ricerca. <HTML> <?php if ($searchstring) { $sql="SELECT * FROM personnel WHERE $searchtype LIKE '%$searchstring%' ORDER BY firstname ASC"; $db = mysql_connect("localhost", "root", ""); mysql_select_db("learndb",$db); $result = mysql_query($sql,$db); echo "<TABLE BORDER=2>"; echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Options</B></TR>"; while ($myrow = mysql_fetch_array($result)) { echo "<TR><TD>".$myrow["firstname"]." ".$myrow["lastname"]."<TD>".$myrow["nick"]; echo "<TD><a href=\"view.php?id=".$myrow["id"]."\">View</a>"; } echo "</TABLE>"; } else { ?> <form method="POST" action="<?php $PHP_SELF ?>"> <table border="2" cellspacing="2"> <tr><td>Insert you search string here</td> <td>Search type</td></tr> <tr> <td><input type="text" name="searchstring" size="28"></td> <td><select size="1" name="searchtype"> <option selected value="firstname">First Name</option> <option value="lastname">Last Name</option> <option value="nick">Nick Name</option> <option value="email">Email</option> </select></td> </tr> </table> <p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p> </form> <?php } ?> </HTML> Lo script controlla se la stringa contenuta in una variabile esiste. Se $searchstring contiene un valore, allora lo script ha qualche cosa da cercare; altrimenti, verrà visualizzata solo la form di ricerca. La parte di codice per la ricerca, è simile al nostro viewdb2.php. Il comando SQL merta una piccola spiegazione. Il comando SQL è: "SELECT * FROM personnel WHERE $searchtype LIKE '%$searchstring%' ORDER BY firstname ASC" Qui sono state introdote due nuove cose, "LIKE" e "ORDER BY". LIKE significa 'come'. Il segno '%' rappresenta ogni possibile comnbinazione di caratteri (numeri o lettere). Se Ssto cecando tutte le persone che il loro nome inizia con 'J' useremo questo comando SQL: "SELECT * FROM personnel WHERE firstname LIKE 'J%'" Per trovare persone che il loro nome finisca con J useremo '%J'. Se vogliamo trovare le persone che il loro nome abia 'J' in qualsiasi punto (nome, cognome) useremo '%J%'. 'ORDER BY' ordina semplicemente i records in ordine crescente o decrescente. Questa è la sintassi: "ORDER BY fieldname order_ method" where order_ method is ASC or DESC permette di ordinare in modo ASC=crescente o DESC=decrescente. Conclusioni Abbiamo imparato le basi per la creazione di un sito dinamico. Ora tocca a voi mettere in pratica tutto questo. Avete conoscenze suffucienti per creare questi utili lavori: * Database Utenti Potete creare un databse dei vostri utenti. Potete aggiungere a questo una pagina di login. * News Potete inserire nel vostro sito una sezioneche visualizza sempre le ultime news oppure una sezione "What's new" generata automaticamente. La tabella per fare questo è: CREATE TABLE news ( id INT NOT NULL AUTO_ INCREMENT, title VARCHAR(40), newsbody TEXT, news_ date DATE, PRIMARY KEY (id), UNIQUE id (id) ); Visualizzare automaticamente il titolo delle ultime 5 news, questo è il codice: <HTML> <?php $sql="SELECT * FROM news ORDER by news_date DESC"; $db = mysql_connect("localhost", "root", ""); mysql_select_db("newsdb",$db); $result = mysql_query($sql,$db); echo "Latest News:<br>"; $i=1; while ($myrow = mysql_fetch_array($result)) { echo "<a href=\"newsdetail.php?id=".$myrow["id"]."\">".$myrow["title"]."</a><br>"; $i=$i+1; if($i>5) break; } ?> </HTML> * Database dei Prodotti Potete creare un dettagliato database dei vostri prodotti. I vostri clienti potranno così vedere tutti i vostri prodotti e ricercarne uno in particolare.