Connessione ai database MySQL tramite script Php Il Php è un linguaggio di scripting che estende le funzionalità del server Web, mentre MySQL è un programma server che si occupa della gestione di basi di dati. Il sito Altervista mette a disposizione degli utenti un database MySQL. Per attivarlo occorre connettersi al proprio account (tramite login e password), andare al menu _RISORSE E UPGRADES, andare al paragrafo Database MySQL e selezionare un DB di Classe 1. A fine paragrafo vengono elencati i dati per accedere al database. La connessione tra Php e MySQL avviene tramite funzioni specifiche incluse nel linguaggio Php. La prima operazione da effettuare tramite uno script Php è la connessione al server MySQL. Per far ciò viene utilizzata la funzione mysql_connect(): $conn=mysql_connect(hostname, username, password) TRUE = successo e FALSE = fallimento. I tre parametri testuali sono: hostname che rappresenta l’indirizzo IP o il nome del server su cui è in esecuzione il server MySQL; se è lo stesso server su cui è in esecuzione il server Web, si indica con localhost. Nel nostro caso (altervista) va indicato proprio localhost. username è il nome dell’utente che ha i permessi per accedere al database. Nel nostro caso è la login utilizzata per accedere al proprio sito. password è la password dell’utente. Nel nostro caso è sufficiente “”. Dopo aver aperto una connessione con il server MySQL si può operare con i database (possono essere più di uno). Altavista associa solo un database ad ogni account, per cui le istruzioni per la creazione e la eliminazione di un database MySQL non saranno utilizzate per i nostri lavori, ma ricordatevi che esistono. Le funzioni principali per la gestione di un database MySQL tramite linguaggio Php: mysql_create_db(“Nome_DB”) [Crea un nuovo DataBase MySql] TRUE = successo e FALSE = fallimento. mysql_drop_db(“Nome_DB”) [Elimina un DataBase MySql] TRUE = successo e FALSE = fallimento. mysql_select_db(“Nome_DB”) [Selezione un DataBase MySql] TRUE = successo e FALSE = fallimento. Una volta aperta la connessione con il server MySQL e selezionato il database di interesse (nel nostro caso il database è unico, ma va comunque selezionato), è possibile interagire con esso tramite i comandi SQL. La funzione Php che permette di inviare comandi SQL al server MySQL è mysql_query(). L’ultima operazione da effettuare tramite uno script Php è la chiusura della connessione al server MySQL. Per far ciò viene utilizzata la funzione mysql_close(): mysql_close($conn) connessione.php <html> <head> <title>Test PHP-MySQL</title> </head> <body> <?php // parametri del database $hostname = "?????"; $username = "?????"; $password = ""; $db_name = "?????"; $conn = mysql_connect($hostname, $username, $password); if ($conn) {echo ("<p>Connessione con il server MySQL avvenuta con successo.</p>");} else {echo ("<p>Errore nella connessione con il server MySQL.</p>"); exit();} //Selezione del database $db = mysql_select_db($db_name); if ($db) {echo (“<p>Selezione del database avvenuta con successo.</p>”);} else {echo (“</p>Errore nella selezione del database.</p>”); exit();} mysql_close($conn); ?> </body> </html> 1 La manipolazione di database MySQL tramite script Php L’SQL (Structured Query Language) è un linguaggio non procedurale orami diventato uno standard tra i linguaggi per la gestione di database relazionali. Abbiamo già visto come effettuare la connessione al server MySQL tramite la funzione mysql_connect(), come selezionare il database su cui lavorare tramite la funzione mysql_select_db() e come chiudere la connessione al server MySQL tramite la funzione mysql_close(). Oltre a tali funzioni esistono, ovviamente, tutta una serie di operazioni finalizzate all’uso ed alla manipolazione dei dati (creazione, modica ed eliminazione di tabelle e inserimento, modifica, cancellazione e selezione di record, ecc.). La funzione Php che consente di interagire con il database tramite i comandi SQL è mysql_query(). Questa funzione è la funzione Php che consente di inviare comandi SQL al server MySQL, come se fossero comandi in linea. La prima cosa da fare è creare nel nostro database almeno una tabella. Per i nostri esempi creeremo una tabella dal nome Amici avente i seguenti campi: Nome Campo id nome cognome telefono email Tipo Intero Testo Testo Testo Testo Dimensione 20 20 10 25 Il campo id cliente è univoco e rappresenta la chiave primaria, per cui è comodo che sia un intero che viene incrementato automaticamente. Il comando SQL per la creazione di una tabella è CREATE TABLE e specificatamente: CREATE TABLE Amici (id INT AUTO_INCREMENT, nome CHAR(20) NOT NULL, cognome CHAR(20) NOT NULL, telefono CHAR(10) NOT NULL, email CHAR (25) NOT NULL, PRIMARY KEY(id)). Volendo scrivere tale comando tramite Php: $query = mysql_query( “CREATE TABLE Amici (id INT AUTO_INCREMENT, nome CHAR(20), cognome CHAR(20), telefono CHAR(10), email CHAR(25), PRIMARY KEY(id))” ); Anche l’istruzione mysql_query(), come le precedentemente viste, salva nella variabile a cui viene associata (in questo caso $query) il valore dell’esito dell’operazione: TRUE = successo e FALSE = fallimento. Questo ci consente di controllare continuamente il lavoro tramite verifiche e messaggi d’errore. Per creare la tabella utilizzeremo il file connessione.php, già realizzato in precedenza, modificandolo e salvandolo col nome crea_tabella_amici.php. crea_tabella_amici.php <html> <head> <title>Test PHP-MySQL</title> </head> <body> <?php // parametri del database $hostname = "?????"; $username = "?????"; $password = ""; $db_name = "?????"; $conn = mysql_connect($hostname, $username, $password); if ($conn) {echo ("<p>Connessione con il server MySQL avvenuta con successo.</p>");} else {echo ("<p>Errore nella connessione con il server MySQL.</p>"); exit();} //Selezione del database $db = mysql_select_db($db_name); if ($db) {echo (“<p>Selezione del database avvenuta con successo.</p>”);} else {echo (“<p>Errore nella selezione del database.</p>”); exit();} 2 //Creazione della tabella Amici $query = mysql_query( “CREATE TABLE Amici (id INT AUTO_INCREMENT, nome CHAR(20) NOT NULL, cognome CHAR(20) NOT NULL, telefono CHAR(10) NOT NULL, email CHAR (25) NOT NULL, PRIMARY KEY(id));” ); if ($query) {echo (“<p>Tabella creata correttamente.</p>”);} else {echo (“<p>Errore nella creazione della tabella.</p>”); exit();} //Chiusura della connessione mysql_close($conn); ?> </body> </html> Il file sopra descritto (crea_tabella_amici.php) verrà utilizzato solo una volta, in quanto la creazione di una tabella specifica è un’operazione che il progettista del database effettua solo alla creazione del database (salvo modifiche e/o correzioni). Una volta creata la tabella (o le tabelle con le relative relazioni) il database è pronto per essere popolato ed utilizzato. Vogliamo ora inserire tabella Amici un nuovo amico avente le seguenti caratteristiche: o nome: Mario o cognome: Rossi o telefono: 080/4032156 o email: [email protected] Il comando SQL per la creazione di una tabella è INSERT e specificatamente: INSERT INTO Amici (nome, cognome, telefono, email) VALUES (‘Mario’, ‘Rossi’, ‘080/4032156’, ‘[email protected]’) Volendo scrivere tale comando tramite Php: $query = mysql_query( “INSERT INTO Amici (nome, cognome, telefono, email) VALUES (‘Mario’, ‘Rossi’, ‘080/4032156’, ‘[email protected]’)” ); Il campo id non viene indicato perché viene incrementato automaticamente. Per inserire il nuovo record nella tabella Amici utilizzeremo il file connessione.php, già realizzato in precedenza, modificandolo e salvandolo col nome inserisci.php. Anche in questo caso è necessario connettersi al server MySQL e selezionare il vostro database, dopodichè occorre aggiungere le istruzioni relative all’inserimento nella tabella Amici di un nuovo record ed infine chiudere la connessione. inserisci.php .. .. .. //Inserimento nuovo record $query = mysql_query( “INSERT INTO Amici (nome, cognome, telefono, email) VALUES (‘Mario’, ‘Rossi’, ‘080/4032156’, ‘[email protected]’)” ); if ($query) {echo (“<p>Record inserito correttamente.</p>”);} else {echo (“<p>Errore nell’inserimento del record.</p>”); exit();} .. .. .. Ovviamente un utente esterno non potrà mai popolare un database scrivendo direttamente le istruzioni in Php nello script, per cui è necessario creare una pagina Web contenente un modulo che deve contenere le caselle testo per i valori che l’utente deve inserire e richiamare una pagina Php che effettuerà l’inserimento dei dati inseriti. La prima pagina si chiamerà modulo_inserisci.html (html perché …) e conterrà un form con action=inserisci.php e method=post e i form necessari per l’inserimento dei quattro dati (l’id non va inserito) con i tasti submit (obbligatorio) e reset (facoltativo). 3 La pagina richiamata da modulo_inserimento.htm (utilizzate la pagina inserisci.php e modificatela all’uopo) riceverà i quattro dati (nome, cognome, telefono, email) ed aggiornerà la tabella con il nuovo record. A fine pagina aggiungete un link che consente di ritornare al modulo di inserimento: <A HREF=”modulo_inserisci.html”><P>PER EFFETTUARE UN ALTRO INSERIMENTO CLICCA QUI</P></A> modulo_inserisci.html <html> <head> <title>Mudulo per l'inserimento di un record</title> </head> <body> <h1>Inserisci i dati del nuovo amico:</h1> <form action="inserisci.php" method="get"> <p>Nome: <input type="text" name="nome" size=20 maxlength=20><br> <p>Cognome: <input type="text" name="cognome" size=20 maxlength=20><br> <p>Telefono: <input type="text" name="telefono" size=10 maxlength=10><br> <p>Email: <input type="text" name="email" size=25 maxlength=25><br> <br> <input type="submit" value="Inserisci"> <input type="reset" value="Annulla"> </form> </body> </html> Di seguito viene riportato il file inserisci.php modificato per essere richiamato da modulo_inserisci.html. inserisci.php <html> <head> <title>Script per l'inserimento di un record</title> </head> <body> <?php // parametri del database $hostname = "????"; $username = "????"; $password = ""; $db_name = "????"; $conn = mysql_connect($hostname, $username, $password); if ($conn) {echo ("<p>Connessione con il server MySQL avvenuta con successo.</p>");} else {echo ("<p>Errore nella connessione con il server MySQL.</p>"); exit();} //Selezione del database $db = mysql_select_db($db_name); if ($db) {echo ("<p>Selezione del database avvenuta con successo.</p>");} else {echo ("</p>Errore nella selezione del database.</p>"); exit();} //Assegnazione variabili $nome = $_GET['nome']; $cognome = $_GET['cognome']; $telefono = $_POST['telefono']; $email = $_POST['email']; //Inserimento nuovo record if (!$nome or !$cognome or !$telefono or !$email) //campi NOT NULL { echo "<CENTER><H1>Non hai inserito qualche campo obbligatorio!</H1></CENTER>";} else {$query = mysql_query("INSERT INTO Amici (nome, cognome, telefono, email) 4 VALUES ('$nome','$cognome','$telefono','$email')"); if ($query) {echo ("<p>Inserimento dati effettuato con successo.</p>");} else {echo ("<p>Errore nell'inserimento dei dati in tabella.</p>");} } mysql_close($conn); ?> <a href="modulo_inserisci.html"><p>PER EFFETTUARE UN ALTRO INSERIMENTO CLICCA QUI</p></a> </body> </html> Dopo aver inserito vari record nella tabella Amici vi sarà sicuramente venuta la curiosità di vedere il frutto del vostro lavoro. Per visualizzare il contenuto della tabella utilizzeremo il file visualizza.php. All’interno troverete due nuove funzioni Php-MySQL: mysql_num_rows(“Nome_Query”) [Ritorna il numero dei record della query] mysql_fetch_array(“Nome_Query”) [Ritorna un array contenente i dati del record corrente] visualizza.php <html> <head> <title>Modulo per la visualizzazione dei record</title> </head> <body> <?php // parametri del database $hostname = "????"; $username = "????"; $password = ""; $db_name = "????"; $conn = mysql_connect($hostname, $username, $password); if ($conn) {echo ("<p>Connessione con il server MySQL avvenuta con successo.</p>");} else {echo ("<p>Errore nella connessione con il server MySQL.</p>"); exit();} //Selezione del database $db = mysql_select_db($db_name); if ($db) {echo ("<p>Selezione del database avvenuta con successo.</p>");} else {echo ("</p>Errore nella selezione del database.</p>"); exit();} //Visualizzazione di tutti i record della tabella Amici $query = mysql_query( "SELECT * FROM Amici" ); $numero = mysql_num_rows($query); if ($numero == 0) {echo ("<p>La tabella è vuota.</p>"); exit();} ?> <table border=1 cellpadding=5> <tr><td>Nome</td> <td>Cognome</td> <td>Telefono</td> <td>Email</td></tr> <?php for ($i; $i<$numero; $i++) {//Estrazione del record i-esimo da $query 5 $record = mysql_fetch_array($query); ?> <tr><td><?php echo ($record["nome"]); ?></td> <td><?php echo ($record["cognome"]); ?></td> <td><?php echo ($record["telefono"]); ?></td> <td><?php echo ($record["email"]); ?></td></tr> <?php } ?> </table> <?php {mysql_close($conn);} ?> </body> </html> 6