|
L'ultima parte dell'agenda comprende le funzioni utilizzate per salvare i dati sul database. Poiché l'inserimento e la
modifica di un record sono ottenute utilizzando la stessa form, abbiamo uniformato la gestione, utilizzando la stessa
pagina sia per le operazioni di Nuovo e Modifica (che sia contatto o ditta). Analogamente, uniformiamo le gestione
per l'inserimento e l'aggiornamento nel database, con le funzioni insert_update_company() e
insert_update_contact().
// File: functions.inc
Function insert_update_contact() {
global $Contact;
$Contact = dbquote($Contact);
if(!$Contact[idContact]) {
$query = "INSERT INTO Contact(fkCompany, FirstName, LastName, Home, Mobile, Email)"
. " VALUES ($Contact[fkCompany], '$Contact[FirstName]', '$Contact[LastName]', "
. " '$Contact[Home]', '$Contact[Mobile]','$Contact[Email]')";
$res = mysql_query($query);
if(!$res)
setErr(ERR_FAIL_UPDATE);
} else {
$query = " UPDATE Contact SET fkCompany='$Contact[fkCompany]', FirstName='$Contact[FirstName]', LastName='$Contact[LastName]', "
." Home='$Contact[Home]', Mobile='$Contact[Mobile]', Email='$Contact[Email]' where idContact=$Contact[idContact]";
$res = mysql_query($query);
if(!$res) setErr(ERR_FAIL_UPDATE);
}
}
Function insert_update_company() {
global $Company;
$Company = dbquote($Company);
if(!$Company[idCompany]) {
$query = "INSERT INTO Company(Name, Street,City,State,Phone,Fax,Email,Web)"
. " VALUES ('$Company[Name]', '$Company[Street]', '$Company[City]', "
. " '$Company[State]','$Company[Phone]', '$Company[Fax]', '$Company[Email]', '$Company[Web]')";
$res = mysql_query($query);
if(!$res)
setErr(ERR_FAIL_UPDATE);
} else {
$query = "UPDATE Company SET Name='$Company[Name]', Street='$Company[Street]', City='$Company[City]', State='$Company[State]',"
." Phone='$Company[Phone]', Fax='$Company[Fax]', Email='$Company[Email]', Web='$Company[Web]'"
. " WHERE idCompany=$Company[idCompany]";
$res = mysql_query($query);
if(!$res) setErr(ERR_FAIL_UPDATE);
}
}
Anche in questo caso i dati sono presi da Company e Contact. Se è definito, rispettivamente,
Contact[idContact] e Company[idCompany]allora vuol dire che è stata richiesta originariamente una
modifica del database, pertanto va eseguita una UPDATE, altrimenti una INSERT. Notare che si ha il problema di
distinguere i caratteri speciali nelle interrogazioni del database, analogamente al problema di visualizzare i dati in una
pagina HTML. Caratteri come ' devono essere scritti in un comando SQL come \'. La funzione che risolve questo
problema è la dbquote(), che segue:
// File: functions.inc
Function dbquote($a) {
$b = array();
while(list($k,$v) = each($a))
$b[$k]=AddSlashes($v);
return $b;
}
La cancellazione di un record è più semplice. I casi sono due. Il primo, cancellare un contatto, è immediato. Nel
secondo caso, l'unica accortezza è che prendiamo è di evitare di cancellare una ditta se contiene dei contatti, in modo da
non lasciare contatti "orfani" che pur essendo presenti nel database non vengono visualizzati.
// File: functions.inc
Function delete_contact($idContact) {
$res = mysql_query("DELETE FROM Contact WHERE idContact=$idContact");
if(!$res) setErr(ERR_FAIL_UPDATE);
}
Function delete_company($idCompany) {
$res = mysql_query("SELECT idContact FROM Contact WHERE fkCompany=$idCompany");
if(mysql_num_rows($res)>0)
return setErr(ERR_CANNOT_DELETE, "la ditta contiene dei contatti");
$res = mysql_query("DELETE FROM Company WHERE idCompany=$idCompany");
if(!$res) setErr(ERR_FAIL_UPDATE);
}
|