Esercizi ed appunti PHP



Documenti analoghi
Lavorare con MySQL Parte Seconda.

Esercitazione PAM. (Php Apache MySQL)

PHP e Structured Query Language

<?php include './include/page.php';

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Non vedo l ora Realizzazione di un sistema per la gestione dell orario scolastico

MySQL Database Management System

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

MySQL Database Management System

Dott.ssa Maria Vittoria Avolio. Dott.ssa Adriana Pietramala

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

PHP e MySQL. Scripting server-side per accesso a DB MySQL

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Form Editor. Dove NomeProfilo è personalizzabile.

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

PHP e MySQL. Guida scaricata da

19. LA PROGRAMMAZIONE LATO SERVER

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Gestire le sessioni con le Servlet

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda)

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server)

Eprogram ITIS V anno Unità 6 - PHP e MySQL

APPUNTI DI PHP : V INFORMATICA SEZIONE G

I file di dati. Unità didattica D1 1

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

La pagina Web modulo.html utilizza le specifiche di stile descritte nel foglio feedback.css.


Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Web Programming. Lezione 4: Cookie e Sessioni. Giulio Rossetti 14/04/2011. Guru@Work

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

Visualizzazione ordini in MyShopDB

Architettura a tre livelli (1)

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

IL DAT A B A S E DI ALGE B R A N D O

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro)

GERARCHIE RICORSIVE - SQL SERVER 2008

Dove die( stringa ) è una funzione di utilità del php che stampa la stringa e fa terminare lo script.

1. Le macro in Access 2000/2003

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Tener traccia del client

Cos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico)

1.0 GUIDA PER L UTENTE

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

Il linguaggio HTML - Parte 3

Obiettivo dell esercitazione

PHP - Storia. Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Esercitazione sulle libpq - libreria C per PostgreSQL

Esercitazione 8. Basi di dati e web


STAMPA UNIONE DI WORD

Microsoft Access Maschere

$qb reale output Litri di benzina consumati pa.php

Al giorno d oggi, i sistemi per la gestione di database

OSSIF WEB. Manuale query builder

ARCHIVIA PLUS - ARCHIFILE

MODULO 5 ACCESS Basi di dati. Lezione 4

View Mobile User s Guide

Esempio di esecuzione di una pagina JSP: Il client chiede la pagina: sdfonline.unimc.it/info/modulo.jsp;

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

Informatica A per Ingegneria Gestionale ( ) Il linguaggio HTML. Elisa Quintarelli-Laura Mandelli. HyperText Markup Language

Lezione 6: Form 27/04/2012

2104 volume III Programmazione

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

RELAZIONE DI PROGETTO DELL ESAME STRUMENTI PER APPLICAZIONI WEB

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

XML e PHP. Gestire XML con PHP. Appendice

COSTRUZIONE SITO WEB da AlterVista (

Relazioni tra tabelle

Interfaccia di base di GroupWise WebAccess

GESGOLF SMS ONLINE. Manuale per l utente

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

Utilizzo del Terminalino

Utilizzare PHP 5. Le variabili GET e POST

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

bool mysql_select_db([string database_name [,resource link_identifier]]) Connessione ad un server MySQL vuole conettere

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Procedura SMS. Manuale Utente

I.N.A.I.L. Certificati Medici via Internet. Manuale utente

ISI s.r.l. Corso di Access 05 CREARE UN ELENCO MAILING ED INVIARE MESSAGGI DI POSTA ELETTRONICA Pag. 1/6

Dispensa di database Access

Esercizio 2. Client e server comunicano attraverso socket TCP

Esercitazione 01: DDL e DML di base

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Access. P a r t e p r i m a

Transcript:

Indice 1. Informazioni sulla versione PHP installata... 2 2. Generatore di numeri random... 2 3. Contatore di visitatori... 2 4. Programma di inserimento di un nuovo record in un file... 4 scrivi_record.htm... 5 scrivi_record.php... 6 5. Dati i conoscenti presenti in una rubrica telefonica,... 8 conf.php...11 crea_db.php...12 crea_tabella.php...13 aggiungi1.php...14 aggiungi2.php...16 Soluzione n.1: seleziona.php...19 Soluzione n.2: seleziona.php...21 modifica1.php...24 modifica2.php...26 cancella.php...27 Promemoria PHP per la gestione di un db MySql...29 Pag. 1 / 29 by Prof.Grazia Cesarini (versione β) 1

<?php phpinfo(); 1. Informazioni sulla versione PHP installata 2. Generatore di numeri random <?php $max = trim($_post['max']); : : <form name="form1" method="post" action="<? echo $_SERVER['PHP_self']; "> <input name="max" type="text" value="<?php echo $max; " size="10" maxlength="4"> Numero casuale generato <?php echo rand(1,$max); <input type="submit" name="submit" value="invia"> </form>: 3. Contatore di visitatori Pag. 2 / 29 by Prof.Grazia Cesarini (versione β) 2

<?php include('config_contatore.php'); if (!file_exists($contatore)): $contonumerico= 0; $fp = fopen($contatore,"w"); flock($fp, 2); fwrite ($fp,$contonumerico); flock($fp, 3); fclose($fp); else: $fp = fopen($contatore,"r+"); $contonumerico= fread($fp,filesize($contatore)); fclose($fp); endif; $contonumerico++; $fp = fopen($contatore,"w"); flock($fp, 2); fwrite ($fp,$contonumerico); flock($fp, 3); fclose($fp); <html> <head> <?php $Contatore = "public/../../visite_php.dat"; Per aumentare la portabilità dello script conviene mantenerlo esterno nome e path del file da usare. Se il file non esiste viene: aperto in scrittura (w) (=creato) bloccato in scrittura (2) scritto un valore nullo per il contatore sbloccato (3) chiuso Se il file esiste viene: aperto in lettura e scrittura (r+) letto il contatore chiuso In ogni caso viene: incrementato il contatore bloccato in scrittura (2) scritto il nuovo valore per il contatore sbloccato (3) chiuso Nella pagina HTML viene visualizzato il valore del contatore appena calcolato Pag. 3 / 29 by Prof.Grazia Cesarini (versione β) 3

<title>contatore</title> </head> <body> Questa pagina ha avuto <? echo $contonumerico; visitatori </body> </html> ($contonumerico). La funzione (o meglio costrutto linguistico) echo() serve per scrivere o stampare l output inviato al browser del visitatore che accede al sito. L output a video prodotto da echo() deve essere in formato html. 4. Programma di inserimento di un nuovo record in un file Pag. 4 / 29 by Prof.Grazia Cesarini (versione β) 4

scrivi_record.htm <html> <head> <title>scrivi e leggi record</title> </head> <body> <form action="scrivi_record.php" method="post"> <table border="0" align="center" cellpadding="10" cellspacing="10"> <tr> <td>nome</td> <td><input name="nome" type="text" size="30" maxlength="30"></td> </tr> <tr> <td>cognome</td> <td><input name="cognome" type="text" size="30" maxlength="30"></td> </tr> <tr align="center" valign="middle"> <td colspan="2"> <input name="invia" type="submit" value="inserisci dati"> <input name="ripristina" type="reset" value="ripulisci"> </td> </tr> </table> </form> Nelle applicazioni web, l input dell utente si acquisisce tramite i moduli (o FORM) HTML. Un qualsiasi elemento di un form sarà automaticamente disponibile per uno script PHP. Un semplice form in HTML che non presenta nessun tipo di tags particolari. Quando l'utente riempie questo form e preme il pulsante submit, viene richiamata la pagina scrivi_record.php: Quando si definisce un form è opportuno: utilizzare sempre un "NAME" per ogni elemento di dati (INPUT, SELECT, TEXTAREA etc.). Questi attributi NAME diventeranno nomi delle variabili PHP: non si potrà accedere ai valori se non si utilizza un attributo NAME per ciascuno. Il NAME di un campo di modulo non deve necessariamente essere uguale al nome di campo di database corrispondente, ma spesso è una buona idea. E' possibile (spesso indispensabile) specificare un "VALUE" invece che Pag. 5 / 29 by Prof.Grazia Cesarini (versione β) 5

</body> </html> lasciare che HTML spedisca il valore predefinito. VALUE può essere impostato sui dati che si desidera visualizzare nel modulo. scrivi_record.php <?php include ('studenti_configurazione.php'); if (isset($_post['cognome']) isset($_post['nome'])): // Scrivi record $fp = fopen($file,"a+"); flock($fp, 2); fwrite ($fp,$_post['cognome']. ", ". $_POST['nome']. "\n"); flock($fp, 3); fclose($fp); endif; <?php $file="public/../../studenti.dat"; Per aumentare la portabilità dello script conviene mantenerlo esterno nome e path del file da usare. Viene verificao l'avvenuto passaggio dei dati in input (provengono dalla pagina scrivi_record.htm) $fp = fopen($file,"a+"): Apre in lettura e scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo flock($fp, 2): blocca il file in scrittura (2) fwrite...: scrivi record flock($fp, 3): rilascio del file (3) fclose($fp): chiuso Pag. 6 / 29 by Prof.Grazia Cesarini (versione β) 6

<html> <head> <title>scrivi e leggi record</title> </head> <body bgcolor="#ffffff" title="file"> <table width="100%" border="1" cellspacing="0" cellpadding="10"> <tr> <td>cognome</td> <td>nome</td> </tr> <? $line = ""; // Apre in lettura e scrittura e posiziona il puntatore all'inizio del file. $fp = @fopen($file, "r+") or die("impossibile trovare il file"); while (!feof($fp)): $line = fgets($fp, 4096); if ($line!= ""): $vet=explode(",",$line); echo "<tr>"; echo "<td>". $vet[0]. "</td>"; echo "<td>". $vet[1]. "</td>"; echo "</tr>"; endif; endwhile; $fp = fopen($file, "r+"): il file viene aperto in lettura e scrittura (r+) letto il contatore chiuso fgets / fread: la funzione legge un file riga per riga. fgets è un alias di fread Trasferimento $line in un vettore Visualizzazione dei dati letti La funzione echo() (o meglio costrutto linguistico) serve per scrivere o stampare l output inviato al browser del visitatore che accede al sito. L output a video prodotto da echo() deve essere in formato Pag. 7 / 29 by Prof.Grazia Cesarini (versione β) 7

fclose($fp); </table> <a href="scrivi_record.htm" target="_self">torna alla pagina precedente</a> </body> </html> html. In ogni caso viene: incrementato il contatore bloccato in scrittura (2) scritto il nuovo valore per il contatore sbloccato (3) chiuso 5. Dati i conoscenti presenti in una rubrica telefonica, di cui sono noti i seguenti dati: con id corrispondente alla chiave primaria, realizzare i seguenti programmi creazione di un database creazione della tabella rubrica inserimento di un nuovo record modifica di un record cancellazione di un record id nome cognome prefisso telefono data Pag. 8 / 29 by Prof.Grazia Cesarini (versione β) 8

Gestione database Creare un nuovo database Creare una nuova tabella Aggiungere un nuovo record Modificare un record esistente Cancellare un record esistente crea_db.php crea_tabella.php aggiungi1.php seleziona.php aggiungi.php modifica1.php cancella.php modifica2.php Pag. 9 / 29 by Prof.Grazia Cesarini (versione β) 9

index.htm (solo html): programma "accessorio" necessario per organizzare la procedura di gestione della tabella <html> <head> <title>esercizio PHP: gestione database</title> </head> <body> <p align="center"><a href="crea_db.php" target="_self">crea database</a></p> <p align="center"><a href="crea_tabella.php" target="_self">crea tabella (rubrica) </a></p> Pag. 10 / 29 by Prof.Grazia Cesarini (versione β) 10

<p align="center"><a href="aggiung1i.php" target="_self">inserimento record</a></p> <p align="center"><a href="seleziona.php" target="_self">modifica record </a> </p> <p align="center"><a href="seleziona.php" target="_self">cancella record </a> </p> </body> </html> conf.php (solo php): programma "accessorio" per la definizione dei dati necessari per la connessione al database e l'apertura della tabella <?php $dbhost = "localhost"; Il nome dell'host (hostname) su cui si trova mysql Le variabili $dbhost, $dbuser e $dbpass contengono i parametri di connessione specificati per l utente che deve connettersi al server mysql. E bene tenere queste variabili in un file separato, di estensione.php, per evitare di dover riscrivere, in tutti i file che utilizzano una connessione al db, i valori di user e password di connessione: $dbname = "rubrica"; nome database $dbuser = " root"; nome utente (username) $dbpass = ""; password $connessione = @mysql_connect($dbhost,$dbuser,$dbpass) or die("impossibile stabilire una connessione"); Questa funziona accetta tre argomenti e restituisce un identificativo di connessione (o handle), che deve essere utilizzato per le successive operazioni fornendolo come argomento alle altre funzioni che seguono. Il simbolo @ davanti ad una funzione PHP disabilita eventuali messaggi di warning che possono apparire all esecuzione dello script. Pag. 11 / 29 by Prof.Grazia Cesarini (versione β) 11

$db = @mysql_select_db($dbname, $connessione) or die("impossibile selezionare il database"); La funzione die è un alias della funzione exit() e, come tale, visualizza un messaggio e termina lo script corrente. Serve per selezionare (aprire) il database su cui lavorare. Come argomento accetta il nome del database e quello della connessione. Attenzione Si ricordi di aggiungere l estensione php a tutti i file da includere, per evitare che un utente smaliziato visualizzi il codice sul browser semplicemente collegandosi all indirizzo dovuto. Provate a vedere con Google quanti siti hanno un file db.inc che può essere visualizzato in chiaro e che conterrà probabilmente il nome utente e la password per connettersi al database. crea_db.php (php + mysql): creazione di un nuovo database <?php $dbhost="localhost"; $dbname="rubrica"; $dbuser="root"; $dbpass=""; $connessione = @mysql_connect($dbhost,$dbuser,$dbpass) or die("impossibile collegarsi al server @mysql."); $db = @mysql_create_db($dbname,$connessione) or die("impossibile creare il database rubrica"); Apertura della connessione Crea un nuovo database mysql sull'host associato al link più vicino aperto Pag. 12 / 29 by Prof.Grazia Cesarini (versione β) 12

@mysql_close($connessione); echo "Il database è stato creato con successo"; Chiusura del database crea_tabella.php (php + mysql): creazione di una nuova tabella <?php include("conf.php"); $sql = "CREATE TABLE rubrica(id int not null AUTO_INCREMENT PRIMARY KEY, Nome varchar(40), Cognome varchar(40), Prefisso varchar(5), Telefono varchar(20), Data date)"; $risultato=@mysql_query($sql, $connessione) or die ("Impossibile creare la tabella!"); La funzione "include" (simile alla require) accetta come unico parametro il percorso del file da includere e può restituire un valore (il file incluso è in realtà una funzione che ha una istruzione di return alla fine) Genera la tabella con i vari campi e ed il campo chiave opportunamente definiti La funzione mysql_query() si utilizza per eseguire una query qualsiasi al database selezionato. Tale funzione accetta come argomenti la query da eseguire, di tipo stringa, e l identificativo di connessione precedentemente ottenuto con le funzioni connect. la funzione restituisce FALSE se la query non è stata eseguita correttamente query di selezione: la funzione restituisce un recordset, nel caso la query sia di tipo SELECT, che deve essere successivamente scandito per prelevare i singoli record, query di comando: è possibile sapere su quanti record ha avuto effetto la query Pag. 13 / 29 by Prof.Grazia Cesarini (versione β) 13

@mysql_close($connessione); echo "La tabella è stata creata con successo"; Dopo aver effettuato tutte le operazioni sul database, quali selezioni, cancellazioni, update etc., bisogna chiudere la connessione tramite la funzione mysql_close(), che accetta come argomento l handle di connessione aggiungi1.php (html + php): programma di inserimento di un nuovo record e segnalazione dell'avvenuto salvataggio di un record nuovo <html> <head> <title>inserimento record</title> </head> <body> <h1 align="center">inserimento</h1> <p align="center"> <? echo $_REQUEST['messaggio'] $_REQUEST contiene le variabili inviata come parametro. Al posto della funzione $_REQUEST può essere usata le funzione $_GET e &_POST </p> <form name="form1" method="post" action="aggiungi.php"> <table width="350"> <tr> <td width="59">nome</td> <td width="240"> <input name="nome" type="text" size="25" maxlength="40"> </td> Pag. 14 / 29 by Prof.Grazia Cesarini (versione β) 14

</tr> <tr> <td>cognome</td> <td> <input name="cognome" type="text" size="25" maxlength="40"> </td> </tr> <tr> <td>prefisso</td> <td> <input name="prefisso" type="text" size="5" maxlength="5"> </td> </tr> <tr> <td>telefono</td> <td> <input name="telefono" type="text" size="20" maxlength="20"> </td> </tr> <tr> <td>data</td> <td> <input name="data" type="text" size="12" maxlength="12"> </td> </tr> <tr align="center"> <td height="23" colspan="2"> <input name="submit" type="submit" value="inserisci"> Esercizi ed appunti PHP Pag. 15 / 29 by Prof.Grazia Cesarini (versione β) 15

<input name="reset" type="reset" id="reset" value="annulla"> </td> </tr> </table> </form> <h2 align="center"><a href="index.htm">torna al menù</a></h2> </body> </html> Esercizi ed appunti PHP aggiungi2.php (php + mysql): programma di salvataggio di un nuovo record e preparazione del messaggio che segnala dell'avvenuto salvataggio di un record nuovo Pag. 16 / 29 by Prof.Grazia Cesarini (versione β) 16

<?php $nome = $_POST['nome']; $cognome = $_POST['cognome']; $prefisso = $_POST['prefisso']; $telefono = $_POST['telefono']; $data = $_POST['data']; include("conf.php"); $sql = "Insert into rubrica (nome, cognome, prefisso, telefono, data) values ('$nome', '$cognome', '$prefisso', '$telefono', $_POST contiene le variabili inviate con il metodo POST $_REQUEST contiene le variabili inviate con il metodo POST o con il metodo GET La funzione "include" include il file per l apertura della connessione e del database Preparazione query SQL Pag. 17 / 29 by Prof.Grazia Cesarini (versione β) 17

'$data')"; $risultato = @mysql_query($sql, $connessione) or die("impossibile eseguire l'interrogazione"); $messaggio = "Record n. ". mysql_insert_id($connessione). " inserito con successo!!"; @mysql_close($connessione); header("location: aggiungi1.php?messaggio=". $messaggio); exit; La funzione mysql_query() si utilizza per eseguire una query qualsiasi al database selezionato. Quando la tabella è dotata di un campo autoincrementale, tramite la funzione mysql_insert_id(...), eseguita immediatamente dopo una query di inserimento nel database, è possibile ottenere il valore dell'unico campo autoincrementale della tabella Chiusura connessione Ritorno al programma di inserimento: Spedisce un header HTTP. Utilizzando "Location" si trasmette al browser, oltre un header, anche un REDIRECT con codice di stato (302) il nome indicato dopo il simbolo? (messaggio, in questo caso) rappresenta il parametro da passare al programma chiamato (aggiungi1.php, in questo caso). Tutto quello che troviamo dopo il simbolo = è il valore che verrà passato al programma chiamato. Più parametri possono essere separati con il simbolo & exit assicura che il codice sottostante non sia eseguito dopo il redirezionamento Pag. 18 / 29 by Prof.Grazia Cesarini (versione β) 18

modifica record cancella record seleziona.php modifica1.php cancella.php modifica2.php Soluzione n.1: seleziona.php (php + html + mysql): ricerca, in base all Id o a Cognome e Nome, del record da modificare/cancellare Pag. 19 / 29 by Prof.Grazia Cesarini (versione β) 19

<html> <head> <title>esercizio PHP: gestione database</title> </head> <body> <form id="form1" name="form1" method="post" action="..php"> <table width="100%" border="0"> <tr> <td width="9%">id</td> <td width="91%"><input name="id" type="text" id="id" size="10" /> </td> </tr> <tr> <td>cognome</td> <td><input name="nome" type="text" id="nome" size="50" /></td> </tr> Pag. 20 / 29 by Prof.Grazia Cesarini (versione β) 20

<tr> <td>nome</td> <td><input name="cognome" type="text" id="cognome" size="50" /></td> </tr> <tr> <td> </td> <td><input type="submit" name="invio" id="invio" value="visualizza" /> <input type="reset" name="ripristina" id="ripristina" value="annulla" /> </td> </tr> </table> </form> <h1 align="right"><a href="index.htm">torna al menù</a></h1> </body> </html> Soluzione n.2: seleziona.php (php + html + mysql): visualizzazione di tutti i record ricercati e possibilità di scelta di un record da modificare/cancellare <html> <head> <title>seleziona i record della rubrica</title> </head> <body> <p align="center"> <?php echo $_REQUEST['messaggio'] </p> <TABLE border="1" align="center" cellpadding="10" cellspacing="0"> <TR> <TH>Modifica</TH> $_REQUEST contiene le variabili inviata come parametro. Al posto della funzione $_REQUEST può essere usata la funzione $_GET Intestazione tabulato Pag. 21 / 29 by Prof.Grazia Cesarini (versione β) 21

<TH>Cancellazione</TH> <TH>Id</TH> <TH>Cognome</TH> <TH>Nome</TH> <TH>Prefisso</TH> <TH>Telefono</TH> <TH>Data</TH> </TR> <?php include("conf.php"); Esercizi ed appunti PHP $sql = "SELECT * FROM rubrica order by Cognome ; Interrogazione della rubrica $risultato = @mysql_query($sql,$connessione) or die( "Errore: ". mysql_error()); $num=@mysql_num_rows$risultato); Esecuzione comando SQL o messaggio di errore mysql_query(): restituisce un recordset che deve essere successivamente scandito per prelevare i singoli record o di FALSE in caso di esito negativo Per determinare il numero di righe risultante da una query di selezione, si utilizza la funzione @mysql_num_rows(), che accetta come argomento il recordset prelevato e restituisce il numero di record risultante. for ($i=1;$i<=$num;$i++) { : } Un ciclo definito viene utilizzato quando sappiamo esattamente quante volte bisogna eseguire un blocco di istruzioni. $i++: l'operatore incrementale $i++ equivale a $i=$i+1 while($row=@mysql_fetch_assoc($risultato)): : endwhile; Pag. 22 / 29 by Prof.Grazia Cesarini (versione β) 22

while($row=@mysql_fetch_assoc($risultato)): <TR> <TD align='center'> <form name="form1" method="post" action="modifica.php"> <input name='id' type='hidden' value='<?php echo $row['id'] '> <input type="submit" name="invio" value="modifica utente"> </form> </TD> <TD align='center'> <form name="form1" method="post" action="cancella.php"> Un ciclo indefinito viene utilizzato quando non sappiamo esattamente quante volte bisogna eseguire un blocco di istruzioni. Per prelevare le informazioni da un recordset ed effettuare operazioni sui singoli record quali la visualizzazione sul browser: $row=@mysql_fetch_assoc($risultato): è equivalente alla chiamata di mysql_fetch_array(). Questa restituisce solo un array associativo oppure FALSE se non ci sono più righe. $row=@mysql_fetch_row($risultato): Restituisce un array che corrisponde al recordset caricato oppure FALSE se non ci sono più righe. Ogni colonna del risultato è memorizzata in un indice dell'array, partendo dall'indice 0. E possibile accedere ai singoli campi semplicemente ricordando la sequenza dei campi prelevati tramite l istruzione SELECT Inizio riga di dettaglio type= hidden : Per trasferire un valore al programma chiamato senza che l'utente ne abbia conoscenza. Il valore trasmesso proviene dalla lettura di un recordset. type= hidden : Per trasferire un valore al programma chiamato senza che l'utente ne Pag. 23 / 29 by Prof.Grazia Cesarini (versione β) 23

<input name='id' type='hidden' value='<?php echo $row['id'] '> <input type="submit" name="invio" value="elimina utente"> </form> </TD> <TD><?php echo $row['id'] </TD> <TD><?php echo trim($row['cognome']) </TD> <TD><?php echo trim($row['nome']) </TD> <TD><?php echo $row['prefisso'] </TD> <TD><?php echo $row['telefono'] </TD> <TD><?php echo $row['data'] </TD> </TR> <?php endwhile; @mysql_close($connessione); </TABLE> <p align= center >Numero record trovati: <?php echo $num</p> </body> </html> abbia conoscenza. Il valore trasmesso proviene dalla lettura di un recordset. Fine riga di dettaglio Chiusura ciclo Chiusura database modifica1.php (php + html + mysql): programma di modifica del record scelto <? $id = trim($_post['id']); $nome = trim($_post['nome']); $cognome = trim($_post['cognome']); include("conf.php"); Da seleziona.php provengono a questa pagina: id cognome e nome Pag. 24 / 29 by Prof.Grazia Cesarini (versione β) 24

if ($id > 0): $sql = "SELECT * FROM rubrica WHERE Id=$id ; else: $sql = "SELECT * FROM rubrica WHERE Nome = '$nome' AND Cognome = '$cognome' ORDER BY Cognome"; endif; $risultato = @mysql_query($sql,$connessione) or die( "Errore: ". mysql_error()); $row=@mysql_fetch_assoc($risultato) or die("dato mancante"); @mysql_close($connessione); <html> <head> <title>modifica di un record nella rubrica</title> </head> <body> <form name="form1" method="post" action="modifica2.php"> Id<?php echo $id; <input name="id" type="hidden" value="<?php echo $row[ id ]; "> Nome <input name="nome" type="text" value="<?php echo $row[ nome ]; " size="25" maxlength="40"> Cognome Query di lettura del record da modificare Query di lettura del record da modificare Esecuzione comando SQL o messaggio di errore mysql_query(): restituisce un recordset che deve essere successivamente scandito per prelevare i singoli record Estrazione del risultato Chiusura connessione type= hidden : Per trasferire un valore al programma chiamato senza che l'utente ne abbia conoscenza. Il valore trasmesso proviene dalla lettura di un recordset. Pag. 25 / 29 by Prof.Grazia Cesarini (versione β) 25

<input name="cognome" type="text" value="<?php echo $row[ cognome ]; " size="25" maxlength="40"> Prefisso <input name="prefisso" type="text" value="<?php echo $row[ prefisso ]; " size="5" maxlength="5"> Telefono <input name="telefono" type="text" value="<?php echo $row[ telefono ]; " size="25" maxlength="20"> Data <input name="data" type="text" value="<?php echo $row[ data ]; " size="12" maxlength="12"> <input name="invio" type="submit" id="invio" value="modifica record"> </form> </body> </html> modifica2.php (php + mysql): programma di salvataggio del record modificato e preparazione del messaggio che segnala dell'avvenuto salvataggio del record modificato <? $id = $_POST['id']; $nome = $_POST['nome']; $cognome = $_POST['cognome']; $prefisso = $_POST['prefisso']; $telefono = $_POST['telefono']; $data = $_POST['data']; include("conf.php"); $sql = "Update rubrica Set nome='$nome', Pag. 26 / 29 by Prof.Grazia Cesarini (versione β) 26

cognome='$cognome', prefisso='$prefisso', telefono='$telefono', data='$data' WHERE id='$id'"; $risultato = @mysql_query($sql, $connessione) or die("impossibile eseguire l'interrogazione"); @mysql_close($connessione); $messaggio = "Record n. ". $id. " modificato con successo!!"; header("location: seleziona.php?messaggio=". $messaggio); exit; Esecuzione query Chiusura connessione Messaggio Ritorno al programma di modifica cancella.php (php + mysql): programma di cancellazione del record scelto e preparazione del messaggio che segnala dell'avvenuta cancelazione del record <?php include("conf.php"); $id = trim($_post['id']); $nome = trim($_post['nome']); $cognome = trim($_post['cognome']); if ($id > 0): $sql = "SELECT * FROM rubrica WHERE Id=$id ; else: $sql = "SELECT * FROM rubrica WHERE Nome = '$nome' AND Cognome = '$cognome' ORDER BY Cognome"; endif; $sql = "SELECT * FROM rubrica WHERE id=". $id; Da seleziona.php provengono a questa pagina: id cognome e nome Query di lettura del record da cancellare Query di lettura del record da cancellare Pag. 27 / 29 by Prof.Grazia Cesarini (versione β) 27

$risultato = @mysql_query($sql,$connessione) or die( "Errore: ". mysql_error()); $row=@mysql_fetch_row($risultato) or die("dato mancante"); $id=$row[0]; $sql = "DELETE FROM rubrica WHERE id=".$id; $risultato = @mysql_query($sql, $connessione) or die("impossibile eseguire l'interrogazione"); @mysql_close($connessione); $messaggio = "Record n. ". $id. " cancellato con successo!!"; header("location: seleziona.php?messaggio=". $messaggio); exit; Esecuzione comando SQL o messaggio di errore mysql_query(): restituisce un recordset che deve essere successivamente scandito per prelevare i singoli record Per prelevare le informazioni da un recordset ed effettuare operazioni sui singoli record quali la visualizzazione sul browser: $row=@mysql_fetch_row($risultato): Restituisce un array che corrisponde al recordset caricato oppure FALSE se non ci sono più righe. Ogni colonna del risultato è memorizzata in un indice dell'array, partendo dall'indice 0. E possibile accedere ai singoli campi semplicemente ricordando la sequenza dei campi prelevati tramite l istruzione SELECT Eliminazione record scelto Chiusura della connessione Messaggio Ritorno al programma di cancellazione Pag. 28 / 29 by Prof.Grazia Cesarini (versione β) 28

Promemoria PHP per la gestione di un db MySql $connessione =@mysql_connect(nomehost, nomeutente, nomepassword) or die... $db =@mysql_create_db(nomeutente, nomeconnessione) $db =@mysql_select_db(nomedb, nomeconnessione) $risultato=@mysql_query(nomequery, nomeconnessione) $numero=@mysql_num_rows(nomerecordset) $riga=@mysql_fetch_row(nomerecordset) $riga=@mysql_fetch_assoc(nomerecordset) $nomecampo= $riga[nomecampo] @mysql_insert_id(nomeconnessione) @mysql_close(nomeconnessione) Serve per stabilire la connessione con il database Serve per creare il database Apre il database Restituisce il recordset che potrà successivamente essere letto (SELECT...) per prelevare i singoli record.nome query può contenere una qualunque istruzione sql (create table...,insert into...,select...,upadate...,delete from...). Estrae dal recordset il numero di righe che lo compongono Legge una riga del recordset(tabella virtuale e/o query) Legge una riga del recordset(tabella virtuale e/o query)in modalità associativa Consente di assegnare alla variabile $nomecampo il contenuto del campo scelto presente nella riga che sta leggendo Quando la tabella è dotata di un campo contatore/autoincrementale, la funzione, eseguita immediatamente dopo una query di inserimento nel database fornisce il valore dell'unico campo contatore della tabella. Chiude la connessione con il server Pag. 29 / 29 by Prof.Grazia Cesarini (versione β) 29