Newsgroup: it.comp.www.php
Titolo: confronto gestione errori tra due manuali diversi

facendo un confronto tra manuali (Corso PHP di Luca Balzerani) in rete
ed un libro Pagine Web dinamiche (Tansley)
, la gestione errori di una eventuale connessione e selezione del
database non sono uguali:
--------------------------------------------------------------
Sul manuale online:
--------------------------------------------------------------
$conn = mysql_connect ($host,$user,$password)
                                     or die ("Impossibile collegarsi al
server MySql: ", mysql_error());
$db= mysql_select_db ($nomedb, $conn)
                                     or die ("Impossibile selezionare il
database: ", mysql_error());
a cui ho solo aggiunto anche l'errore.
1---)  va bene la virgola prima di mysql_error o serve il punto (su un
esempio ho visto il punto ma non c'era la frase
prima) '
--------------------------------------------------------------
Mentre su libro riporta:
--------------------------------------------------------------
$conn = mysql_connect ($host,$user,$password);
if (!$conn) {
                    echo "Impossibile collegarsi al server MySql ";
                    exit;
                  }
$db= mysql_select_db ($nomedb, $conn);
if (!$db) {
                    echo "Impossibile selezionare il database ";
                    exit;
                  }
--------------------------------------------------------------
2---) Qual'è la differenza ?
A parte la visualizzazione del messaggio di errore (che sul primo caso
ho solo aggiunto io).
3--) su un esempio ho visto che davanti a mysql_connect è stato usato un
@mysql_connect;
mi sembra di aver letto qualcosa riguardo a tale simbolo pero' non mi
ricordo il suo utilizzo;
comunque tra gli esempi l'ho visto usato solo una volta davanti
mysql_connect quindi chiedo quando va usato..
Grazie

gld12 wrote:

1)-> Io userei il punto
2)-> Niente di fondamentale, in realtà fanno la stessa cosa:
- prova a connettersi
- se non ci riesce esce (il primo con die(),
il secondo con un controllo:
in pseudocodice
se(è falso){
	Mostra il msg di errore
	Esci dallo script
}
Non saprei quale è migliore... direi che vanno bene entrambi.
3)->Il simbolo @ davanti a l'istruzione serve per evitare che il PHP 
mostri l'errore con le sue specifiche.
Si usa molto nelle chiamata ai databases ma anche nelle operazioni sui 
file ed altre operazioni.
E' una buona pratica di sicurezza per evitare che un malintenzionato 
cerchi di hackerare il tuo sito basandosi sui messaggi di errore e le 
informazioni che il messaggio stesso veicola.
Fai una prova:
mysql_query("SELECT ciccio FROM tabella_insistente",$link);
e
@mysql_query("SELECT ciccio FROM tabella_insistente",$link);
Ciao
Marcello

 database non sono uguali:
L'utilizzo di die () personalmente lo trovo scomodo, sopratutto su
progetti di un certo livello.
La soluzione del tipo:
$res = command ();
if ($res)
{ 
	//OK
}
else
{ 
	//KO
}
permette di gestire in modo efficiente gli errori, ad esempio
visualizzare una pagina etc.
Nei miei siti utilizzo sempre una pagina error.php cui facci il
redirect tramite htaccess nel caso vi siano errori HTTP (404,500 etc)
ed anche se ci sono problemi di DB etc.
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1

 informazioni che il messaggio stesso veicola.
allora vuol dire che, se si usa @, non ha piu' senso usare .mysql_error()
pero' per sapere che c'è stato un errore un avviso deve pur darlo;
ipotizzop che sia solo la frase che metto dentro "Impossibile etc.." e da
questa
si sa solo che c'e' stato un errore e basta;
pero' poi io amministratore per sapere quale è stato l'errore devo pur
metterlo da qualche parte;
mi sfugge a questo punto come si fa alivello di codice archiviare l'errore
ah... dimenticavo
3° thank

 ed anche se ci sono problemi di DB etc.
ci sono esempi in rete di questa gestione errori;
pero' ipotizzo che per non far vedere ad altri gli errori usi @, pero' poi
puoi ugualmente
intrappolare gli stessi senza farli vedere ad altri?
e comunque un messaggio di comunicazione che è successo qualcosa, lo devi
far apparire a video in modo che sai che c'è stato un errorevai a leggere il
file error.php e consideri l'ultimo errore in lista (ipotizzo che ci si
aqualcosa del genere)
come quello che ha bloccato il tutto;


 come quello che ha bloccato il tutto;
Non proprio. Non salvo gli errori in alcuna lista, passo il riferimento
dallo script che ha generato l'errore allo script error.php via GET.
