Programmazione (scripting) server-side con PHP...

21
1 MODULO 1 PARTE 3 Programmazione (scripting) server-side con PHP 3.b Goy - a.a. 2009/2010 Programmazione Web 1 3.b Interazione con un database (MySQL Server) Informazione persistente Se vogliamo tener traccia di varie informazioni (per esempio dati sull'utente) in modo persistente, rendendole cioè disponibili al di là della singola interazione (e potenzialmente anche al di là dell'esistenza dell'applicazione t ) d bbi l l fil t stessa) dobbiamo salvarle su file system In un'architettura client-server abbiamo due possibilità: il file system del server file di testo [che non vedremo...] database il file system del client: cookie Goy - a.a. 2009/2010 Programmazione Web 2 il file system del client: cookie

Transcript of Programmazione (scripting) server-side con PHP...

1

MODULO 1PARTE 3

Programmazione (scripting) server-side con PHP

3.b

Goy - a.a. 2009/2010 Programmazione Web 1

3.bInterazione con un database

(MySQL Server)

Informazione persistenteSe vogliamo tener traccia di varie informazioni (per esempio dati sull'utente) in modo persistente, rendendole cioè disponibili al di là della singola interazione (e potenzialmente anche al di là dell'esistenza dell'applicazione t ) d bbi l l fil tstessa) dobbiamo salvarle su file system

In un'architettura client-server abbiamo due possibilità:• il file system del server

• file di testo [che non vedremo...]• database

• il file system del client: cookie

Goy - a.a. 2009/2010 Programmazione Web 2

il file system del client: cookie

2

Ripasso di database - IL'utilizzo di un database ci permette di salvare i dati in modo strutturatoQuando progettiamo un database relazionale, dobbiamo definire quali informazioni conterrà e quali saranno ledefinire quali informazioni conterrà e quali saranno le relazioni tra le informazioni → questo può essere fatto a vari livelli:

vista 1

livello concettuale

vista 2 vista n

Goy - a.a. 2009/2010 Programmazione Web 3

livello logico

livello fisico

Ripasso di database - IILivello logico: rappresentazione tabellare dei dati

N Inv Autore Titolo Anno ed Casa ed

Tabella: LIBRI colonna/campo

N.Inv Autore Titolo Anno_ed Casa_ed

riga/record

Goy - a.a. 2009/2010 Programmazione Web 4

Quando vogliamo costruire una tabella, dobbiamo innanzitutto definire la sua struttura: i nomi dei campi (colonne) e i tipi di dati in essi contenuti

3

Ripasso di database - IIIInterazione con un database:• interrogazione • inserimento di dati• cancellazione di dati• aggiornamento (update)

Ogni interazione con la base di dati:– viene interpretata, analizzata ed eseguita dal DBMS

(DataBase Management System)– costituisce una query, espressa (direttamente oppure

Goy - a.a. 2009/2010 Programmazione Web 5

costituisce una query, espressa (direttamente oppure tradotta) in SQL

– restituisce come risultato un insieme di record(recordset)

Ripasso di database: SQLSQL (Structured Query Language) - casi semplici:• interrogazione

SELECT colonna1 [, colonna2, ecc] FROM tabella[WHERE condizione] [ORDER BY colonna]

↓↓nella condizione si possono usare i soliti operatori: =, >, <, >=, <=, <>; AND, OR, NOT

• inserimentoINSERT INTO tabella [(colonna1, ecc)] VALUES (valore1, ecc)

• cancellazioneDELETE FROM tabella

Goy - a.a. 2009/2010 Programmazione Web 6

DELETE FROM tabella[WHERE condizione]

• aggiornamento (modifica)UPDATE tabellaSET colonna1=valore1 [colonna2=valore2, ecc][WHERE condizione]

4

Ripasso di database: MySQL Server - INel corso utilizzeremo MySQL Server (con PHP) per la costruzione di un piccolo database di esempio, che gestiscele informazioni sugli utenti di una ipotetica bacheca di annunci on-line • MySQL (www.mysql.com) è un database Server, basato su

SQL, multi-processo, multi-utente; è veloce e robusto• MySQL Server è distribuito gratuitamente, con una licenza

GNU (www.gnu.org/gnu/thegnuproject.it.html)• La distribuzione di MySQL Server include il database

server (DBMS) e diversi client: il database server

Goy - a.a. 2009/2010 Programmazione Web 7

server (DBMS) e diversi client: il database server– risiede sulla macchina su cui si trovano i dati– riceve le richieste (query) dai client– accede ai database– fornisce le risposte (risultati delle query)

Ripasso di database: MySQL Server - IIAttenzione! • Il DBMS MySQL funziona con un’architettura

client-serverMySQL clientMySQL clientMySQL

• Non confondete MySQL Server con il Web (HTTP) Server (per es. Apache)

• Aprire una connessione al DB significa aprire una connessione con MySQL Server e poi chiedergli di selezionare un database

MySQL clientServer MySQL client

Goy - a.a. 2009/2010 Programmazione Web 8

⇒ connessione al DB Server e selezione del database su cui operare sono due operazioni diverse!Se devo effettuare due interazioni con due database distinti, mi occorre una sola connessione al DB Server!

5

MySQL Server: XAMPPSe avete installato XAMPP, MySQL Server dovrebbe già essere installato sul vostro PC e avviando il pannello di controllo di XAMPP potete avviare o fermare MySQLServer:

Goy - a.a. 2009/2010 Programmazione Web 9

phpMyAdmin[vedi prossima slide]

MySQL Server: phpMyAdminXAMPP comprende anche phpMyAdmin, un'interfaccia utente web-based (scritta in PHP), per interagire con MySQL Server:• Potete accedere a phpMyAdmin, cliccando sul pulsante p p y , p

Admin (di fianco a MySql), nel pannello di controllo• oppure dal browser, potete connettervi direttamente a:

http://localhost/phpmyadmin/• Cliccando su Privilegi, in alto nella home page di

phpMyAdmin, potete controllare gli utenti abilitati ad accedere al DB Server

Goy - a.a. 2009/2010 Programmazione Web 10

NB: la configurazione di default di XAMPP prevede, su localhost, un utente root, senza password (come vi dice phpMyAdmin stesso, questa non è una configurazione sicura, ma in fase di sviluppo va bene…)

6

MySQL/phpMyAdmin - creazione di un DB - I

lo creiamo

Goy - a.a. 2009/2010 Programmazione Web 11

indichiamo il nome di un nuovo db ("bacheca")

MySQL/phpMyAdmin - creazione di un DB - II

...con 5 campi (colonne)

creiamo una nuova tabella ("utenti")...

Goy - a.a. 2009/2010 Programmazione Web 12

(co o e)tabella ( utenti )...

7

MySQL/phpMyAdmin - creazione di un DB - III

1) digitiamo i nomi dei campi

3) impostiamo le proprietà che desideriamo[vedi prox slide]

2) selezioniamo il tipo del valore [vedi prox slide]

Goy - a.a. 2009/2010 Programmazione Web 13

4) salviamo la tabella

Tipi principali:• INT = numero intero• VARCHAR = stringa a lunghezza variabile (lunghezza massima

specificata nella proprietà Lunghezza/Set)• TEXT = testo • DATE = data

MySQL/phpMyAdmin - creazione di un DB - IV

• DATE = dataVarianti di INT (NUMERIC):

• TINYINT, SMALLINT, MEDIUMINT, BIGINT = interi con lunghezze max predefinite

• DECIMAL, FLOAD, DOUBLE, REAL = decimali• BIT = 0/1, BOOL = true/false, …

Varianti di DATE (DATE and TIME):• …

Goy - a.a. 2009/2010 Programmazione Web 14

Varianti di VARCHAR (STRING):• CHAR = stringa a lunghezza fissa (specificata nella proprietà

Lunghezza/Set)• ENUM/SET = valori compresi in un elenco fornito dalla proprietà

Lunghezza/Set• …

8

Proprietà principali:• Lunghezza/Set = numero (max) di caratteri ammessi (o

lista dei possibili valori, se il tipo è ENUM/SET)• Null = indica se il valore del campo è opzionale o

MySQL/phpMyAdmin - creazione di un DB - V

• Null = indica se il valore del campo è opzionale o obbligatorio (cioè se può avere valore null)

• Predefinito = imposta un valore predefinito per il campo• A_I = auto_increment, proprietà generalmente usata con

numeri interi: ad ogni inserimento di un nuovo record nella tabella, assegna il valore precedente+1

• Indice → PRIMARY = chiave primaria = identificatore

Goy - a.a. 2009/2010 Programmazione Web 15

• Indice → PRIMARY = chiave primaria = identificatore univoco di record; non può essere null! (nel nostro es. impostiamo user_id come chiave primaria)Altri possibili valori: UNIQUE/INDEX/FULLTEXT

MySQL/phpMyAdmin - creazione di un DB - VI

inseriamo dei valori…

NB: query SQL corrispondenteall'operazione (inserimento di campi) appena

Goy - a.a. 2009/2010 Programmazione Web 16

campi) appena fatta

NB: struttura della tabella utenti

9

MySQL/phpMyAdmin - creazione di un DB - VII

inseriamo degli utenti nel databaseNB: non inseriamo lo user_id (viene inserito automaticamente)

Goy - a.a. 2009/2010 Programmazione Web 17

Ripasso di database: note su SQL - INOTE su SQL:

INSERT: se non inserite tutti i campi (come nel nostro es: user_id è auto_increment quindi non lo inseriamo noi ma automaticamente il DBMS!), dovete obbligatoriamenteautomaticamente il DBMS!), dovete obbligatoriamente indicare quali campi inserite (e nell'ordine corretto); per es:INSERT INTO utenti (cognome, nome, email, data_n) VALUES ('Caio', 'Tizio', '[email protected]', '1999-09-29')

SELECT: se volete selezionate tutte le colonne, potete usare l'*; per es:

Goy - a.a. 2009/2010 Programmazione Web 18

SELECT * FROM utenti WHERE email='[email protected]'

10

Ripasso di database: note su SQL - IINB: attenzione ai tipi di dati e alla struttura del database!INSERT INTO utenti VALUES ('Caio', 'Tizio', '[email protected]')→ ERRORE! (mancano user_id e data_n!)INSERT INTO utenti (cognome, nome, email) VALUES ('Caio', 'Tizio', '[email protected]')→ OKINSERT INTO utenti (cognome, nome, email, data_n) VALUES ('Caio', 'Tizio', [email protected], '1999-09-29')→ ERRORE! (il tipo del campo email è stringa: ci vogliono le virgolette!)

Goy - a.a. 2009/2010 Programmazione Web 19

virgolette!)INSERT INTO utenti (cognome, nome, email, data_n) VALUES ('Caio', 'Tizio', '1999-09-29', '[email protected]')→ ERRORE! (l'ordine è sbagliato!)

I file che contengono i database si trovano in: C:\xampp\mysql\data\

Da phpMyAdmin è possibile esportare un database comequery SQL:

MySQL/phpMyAdmin: esportare un DB - I

sulla sinistra selezionate il database che volete esportare

Goy - a.a. 2009/2010 Programmazione Web 20

fate click su Esporta

11

MySQL/phpMyAdmin: esportare un DB - II

eseguite l'esportazione (creazione della query

Goy - a.a. 2009/2010 Programmazione Web 21

(creazione della queryche costruisce il db)

MySQL/phpMyAdmin: esportare un DB - III

compare una pagina con la query SQL che permette di ricostruirepermette di ricostruire il database

fate copia&incolla e salvatela in un file:

nome-db.sql(per es. bacheca.sql)

Goy - a.a. 2009/2010 Programmazione Web 22

(p q )

12

Da phpMyAdmin è possibile importare un database come query SQL:

• Aprite il file nome-db.sql (per es. bacheca.sql) e leggete il nome del DB; create un DB con quel nome

MySQL/phpMyAdmin: importare un DB

leggete il nome del DB; create un DB con quel nome• Cliccate il alto su SQL• Fate copia&incolla del contenuto di nome-db.sql nella

finestra e cliccate sul pulsante Esegui

Goy - a.a. 2009/2010 Programmazione Web 23

Vi ricordate lo schema standard di elaborazione di una pagina web dinamica server-side (per es. PHP)?

PHP: interazione con un database - I

Server clientrequest

(pag.php)elaborazione

(interpretazione

Se lo script PHP contiene istruzioni di interazione con un database, la fase di "elaborazione" (interpretazione dello script)

Server client

Server clientresponse

?⇓

HTML (+Javascript) HTML (+

Javascript)

( pdel codice PHP)

Goy - a.a. 2009/2010 Programmazione Web 24

database, la fase di elaborazione (interpretazione dello script) implicherà anche una connessione con tale database:

elaborazione(interpretazione del codice PHP)

= DB

...<?phpconn. DB ?>...

13

PHP e MySQL: interazione – ICosa si deve fare per accedere ad un DB (MySQL) dauna pagina web (PHP)? All'interno di uno script PHP dobbiamo:1. Aprire una connessione con MySQL Server2. Selezionare un database3. Inviare al DB Server una query SQL4. Eventualmente, estrarre (e visualizzare) i dati

contenuti nel risultato della query (recordset)5 Chiudere la connessione

Goy - a.a. 2009/2010 Programmazione Web 25

5. Chiudere la connessione

PHP e MySQL: interazione – II1. Aprire una connessione con MySQL Server

Per connettersi a MySQL Server bisogna avere:• il nome dell'host (o l'indirizzo IP) su cui risiede il DB Server• un nome-utente e una password

$conn = mysql_connect("localhost", "root", "")or die ("Non riesco a creare la connessione");

apro una connessione a MySQL Server: la funzionemysql_connect ha 3 argomenti: db server, user-id, passwordNB: Se avete installato XAMPP (senza modificare le impostazioni di default) MySQL Server è accessibile su localhost con user-id="root" e password = ""

Goy - a.a. 2009/2010 Programmazione Web 26

pPer verificare: nella prima pagina di phpMyAdmin cliccate su Privilegi

14

PHP e MySQL: interazione – III

A B A | | Bt t t

$conn = mysql_connect("localhost", "root", "")or die ("Non riesco a creare la connessione");

vi ricordate se A è true non è necessario valutare B... tanto il risultato farà true true true

true false truefalse true truefalse false false

⇒ se mysql_connect riesce a creare una connessione: • valore di ritorno = id della connessione, assimilabile a true

va uta e ... ta to su tato a àcomunque true!⇒l'interprete non lo valuta⇒B viene valutato (interpretato)

solo se A è false

Goy - a.a. 2009/2010 Programmazione Web 27

• la funzione die non viene valutata⇒ se mysql_connect non riesce a creare una connessione: • valore di ritorno = false• la funzione die viene valutata (termina il processo e scrive ilmessaggio)

PHP e MySQL: interazione – III2. Selezionare un database

mysql_select_db("bacheca") or die ("Non trovo il DB");

seleziono un database: la funzione mysql_select_dbha 2 argomenti: il nome del db (obbligatorio) e laha 2 argomenti: il nome del db (obbligatorio) e la connessione (opzionale: se non viene specificata siusa l'ultima connessione aperta); restituisce true incaso di successo, false in caso di fallimento (posso invocarla assegnando il suo risultato ad una variabile:$db_selected = mysql_select_db("bacheca") or...ma non è necessario...)

Goy - a.a. 2009/2010 Programmazione Web 28

se la funzione mysql_select_db provoca un errore(restituisce false), allora viene eseguita (valutata) la funzione die, che termina il processo e scrive il messaggio

15

PHP e MySQL: lettura – I3. Inviare al DB Server una query SQL:

a. definire la queryb. inviarla al DB Server$sql = "SELECT user_id, nome, cognome FROM utenti

WHERE cognome = 'Rossi'";

VEDI provaDB1.php

WHERE cognome = Rossi ;

$ris = mysql_query($sql) or die ("Query fallita!");

...e la invio al DB Server: la funzione mysql_query ha 2 argomenti: la query sql (stringa, obbligatorio) e la connessione (opzionale: se non viene specificata si usa l' lti i t )

creo una stringa contenente la query SQL…

Goy - a.a. 2009/2010 Programmazione Web 29

l'ultima connessione aperta)$ris conterrà il risultato della query (diverso a seconda del tipo di query: SELECT, INSERT, UPDATE, DELETE, ...)Se abbiamo inviato una SELECT $ris contiene un recordset, cioè una lista di record

PHP e MySQL: lettura – II4. Eventualmente [nel caso di una SELECT], estrarre (e

visualizzare) i dati contenuti nel risultato della query (recordset = lista di record):while ($riga = mysql_fetch_array($ris)) {

h $ i [" "] " "

VEDI provaDB1.php

echo $riga["nome"] . " ";echo $riga["cognome"] . "<br>";

}

con un ciclo, leggo uno per uno i record contenuti nel risultato della query: la funzione mysql_fetch_array estrae dal suo argomento ($ris) i record uno per volta (ad ogni ciclo); il record estratto di volta in volta viene messo nella variabile $riga; quando non ci sono più record da estrarre,

Goy - a.a. 2009/2010 Programmazione Web 30

$riga; quando non ci sono più record da estrarre, mysql_fetch_array restituisce false, la condizione del while diventa falsa e il ciclo termina

il record corrente è una lista (array) associativa: $riga[nomecampo] estrae il valore del campo nomecampo; echo lo scrive sulla pagina

16

PHP e MySQL: lettura – IIItabella utenti:

user_id cognome nome email data_n1 Rossi Mario [email protected] 1999-04-252 Bianchi Maria [email protected] 1997-02-28

$ris:

3 Rossi Paola [email protected] 1980-12-03SELECT user_id, nome, cognome FROM utenti WHERE cognome = 'Rossi'

user_id cognome nome1 Rossi Mario3 Rossi Paola

Goy - a.a. 2009/2010 Programmazione Web 31

$riga:

3 oss ao a$riga = mysql_fetch_array($ris)

user_id cognome nome1 Rossi Mario3 Rossi Paola

user_id cognome nome1 Rossi Mario

PHP e MySQL: lettura – IV

$ris:$riga:

$riga = mysql_fetch_array($ris)

user_id cognome nome1 R i M i user id cognome nome

eof

$riga: false ⇒ il ciclo si ferma (condizione falsa)[NB while (pippo=false) è equivalente a while (false)e while (pippo=true) è equivalente a while (true)]

1 Rossi Mario3 Rossi Paola

$riga = mysql_fetch_array($ris)

user_id cognome nome3 Rossi Paola

Goy - a.a. 2009/2010 Programmazione Web 32

NB Un record ($riga) in PHP è un array associativo ⇒$riga['user_id']→ 3$riga['cognome']→ Rossi$riga['nome']→ Paola

17

PHP e MySQL: interazione – IV5. Chiudere la connessione:

mysql_close();

chiudo la connessione a MySQL Server (la funzione mysql close ha un argomento opzionale, la connnessione:

Abbiamo visto l'uso di una query di tipo SELECT, cioè abbiamo letto dei dati dal database (e li abbiamo visualizzati sulla pagina web) = interrogazione del databaseVediamo adesso come fare a:• inserire nuovi dati (un nuovo record)

difi d ti i d i t t

ysq _c ose a u a go e to op o a e, a co ess o e:se non viene specificata si usa l'ultima connessione aperta)

Goy - a.a. 2009/2010 Programmazione Web 33

• modificare dati in un record esistente• cancellare dati (cancellare un record)NB: l'unica cosa che cambia è il passo 3, cioè la formulazione

della query SQL (e viene omesso il passo 4)

PHP e MySQL: inserimento Inserimento di un nuovo record:$co = $_POST["cognome_ut"];$no = $_POST["nome_ut"];$em = $_POST["email_ut"];$dn = $_POST["nascita_ut"];

ipotizziamo che l'utente abbia riempito un form con questi dati...

VEDI formDB2.html

VEDI provaDB2.php

_ _$conn = ...mysql_select_db("bacheca")... $sql = "INSERT INTO utenti (cognome,nome,email,data_n)

VALUES ('$co','$no','$em','$dn')";$ris = mysql_query($sql)... if (!$ris) {

echo "Query fallita!";}else {

Goy - a.a. 2009/2010 Programmazione Web 34

echo "Inserito utente ".$co." ".$no;}mysql_close();

se $ris contiene false (!$ris vale true), significa che l'inserimento ha prodotto un errore...

18

PHP e MySQL: modifica Modifica di dati in un record:$old_em = $_POST["old_email"];$new_em = $_POST["new_email"];$conn = ...mysql select db("bacheca")

ipotizziamo che l'utente abbia cambiato l'email attraverso un form...

VEDI provaDB3.php

VEDI formDB3.html

mysql_select_db( bacheca )... $sql = "UPDATE utenti SET email='$new_em'

WHERE email='$old_em'";$ris = mysql_query($sql)... if (!$ris) {

echo "Query fallita!";}else {

echo "Modificato email".$old_em." in ".$new_em;}

Goy - a.a. 2009/2010 Programmazione Web 35

}mysql_close();

se $ris contiene false (!$ris vale true), significa che l'aggiornamento ha prodotto un errore...

PHP e MySQL: modifica Cancellazione di un record:$em = $_POST["email_todel"];$conn = ...mysql_select_db("bacheca")... $sql = "DELETE FROM utenti WHERE email='$em'";

ipotizziamo che l'utente abbia chiesto la cancellazione dei suoi dati indicando l'email...

VEDI provaDB4.php

VEDI formDB4.html

$sql = DELETE FROM utenti WHERE email= $em ;$ris = mysql_query($sql)... if (!$ris) {

echo "Query fallita!";}else {

echo "Cancellato utente ".$em;}mysql_close();

i f l ( l ) i ifi

Goy - a.a. 2009/2010 Programmazione Web 36

se $ris contiene false (!$ris vale true), significa che la cancellazione ha prodotto un errore...

19

Per evitare di avere i parametri necessari alla connessione(nome dell'host, nome-utente e password: parametri della dalla funzione mysql_connect e nome del DB: parametro della funzione mysql select db) ripetuti in molti file (per

PHP e MySQL: parametri connessione - I

della funzione mysql_select_db) ripetuti in molti file (per modificarli, occorrerebbe editare e modificare tutti i file che li contengono) è buona norma definire, in un file separato, quattro variabili; tale file viene incluso quando necessarioPer es, definiamo un file, varDB.inc, in cui:

<?php$host="localhost";$user="root";

Goy - a.a. 2009/2010 Programmazione Web 37

$user= root ;$pwd="";$db="bacheca"

?>

... e dall'interno della pagine che accedono ai database includiamo il file:Per es:

<?php

PHP e MySQL: parametri connessione - II

<?phpinclude("varDB.inc");...$conn = mysql_connect($host, $user, $pwd) or die...mysql_select_db($db)......

?>

NB: le variabili $host, $user, $pwd e $db sono definite nel file varDB inc

Goy - a.a. 2009/2010 Programmazione Web 38

nel file varDB.inc

Attenzione! Questa modalità è obbligatoria nel progetto d'esame!

20

PHP e MySQL: miglioramenti... necessari! - I

Le interazioni viste sin qui sono i "mattoncini" di base; affinché un'interazione sia "corretta" sono necessari maggiori controlliPer es, quando inseriamo un nuovo utente nel database è bene controllare se è già presentecontrollare se è già presente⇒ il passo 3 diventa:

$sql_1 = "SELECT * FROM utenti WHERE email='$em'";$ris_1 = mysql_query($sql_1) or die ("Query 1 fallita!");if (mysql_num_rows($ris_1) != 0) {echo "un utente con questa email è già presente nel DB";

}else {$ l 2 "INSERT INTO t ti ( il d t )

Goy - a.a. 2009/2010 Programmazione Web 39

$sql_2 = "INSERT INTO utenti (cognome,nome,email,data_n)VALUES ('$co','$no','$em','$dn')";

$ris_2 = mysql_query($sql_2) or die ("Query 2 fallita!");}

NB1:• mysql_num_rows(risID) restituisce il numero di righe

(record) presenti nel risultato della query (recordset = risID) * usato con SELECT *

PHP e MySQL: miglioramenti... necessari! - II

• mysql_affected_rows() restituisce il numero di righe (record) modificate dalla query* usato con INSERT, UPDATE, DELETE *Per es, se volete controllare l'esito di un'UPDATE:$sql = "UPDATE utenti SET email='$new_em'

WHERE email='$old_em'";$ris = mysql query($sql) or die ("Query fallita!");

Goy - a.a. 2009/2010 Programmazione Web 40

$ y q _q y($ q ) ( Q y );if (mysql_affected_rows() = = 0) {echo "Attenzione! L'update non è stato effettuato";

}

21

PHP e MySQL: miglioramenti... necessari! - IIINB2: Anche quando fate un'update o una delete è comunque opportuno controllare prima se il record da modificare/cancellare esiste... :

$sql_1 = "SELECT * FROM utenti WHERE email='$em'";$ris 1 m sql q er ($sql 1) or die ("Q er 1 fallita!")$ris_1 = mysql_query($sql_1) or die ("Query 1 fallita!");if (mysql_num_rows($ris_1) = = 0) {echo "L'utente con l'email indicta non esiste";

}else {$sql_2 = "UPDATE utenti SET email='$new_em'

WHERE email='$old_em'";/* oppure $sql_2 = "DELETE FROM utenti WHERE email='$em'";

*/

Goy - a.a. 2009/2010 Programmazione Web 41

*/$ris_2 = mysql_query($sql_2) or die ("Query 2 fallita!");

}