serpico84
07-12-2010, 17:16
Ciao ragazzi vi chiedo aiuto poichè vorrei ottimizzare il codice che vi posto con l'uso del try catch finally che secondo me compatta molto il codice oltre a renderlo piu efficiente. Ho provato un po ma non mi risulta semplice come in java (l'ide mi segnala errori). Per adesso vi posto il codice senza alcun try catch finally:
public function login_query ($user, $pass)
{
//richiamo la funzione di connessione al db
$mysqli=conn();
$query="SELECT nome_utente FROM account WHERE nome_utente=? AND password=?";
$stmt=mysqli_stmt_init($mysqli);
if (mysqli_stmt_prepare($stmt, $query))
{
mysqli_stmt_bind_param($stmt,'ss',$user,$pass);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$result);
if (mysqli_stmt_fetch($stmt)){
date_default_timezone_set('Europe/Rome');
echo "Bentornato ".' '.$result," oggi è il".' '.date('d/m/Y').' '."<br /><br />";
//chiusura dello statement
mysqli_stmt_close($stmt);
// chiusura della connessione
$mysqli->close();
menu_utente();
}
else
{
//chiusura dello statement
mysqli_stmt_close($stmt);
$stmt2=mysqli_stmt_init($mysqli);
$query="SELECT nome_utente FROM administrator WHERE nome_utente=? AND password=?";
if (mysqli_stmt_prepare($stmt2, $query))
{
mysqli_stmt_bind_param($stmt2,'ss',$user,$pass);
mysqli_stmt_execute($stmt2);
mysqli_stmt_bind_result($stmt2,$result2);
if (mysqli_stmt_fetch($stmt2))
{
date_default_timezone_set('Europe/Rome');
echo "Bentornato ".' '.$result2," oggi è il".' '.date('d/m/Y').' '."<br /><br />";
//chiusura dello statement
mysqli_stmt_close($stmt2);
// chiusura della connessione
$mysqli->close();
menu_admin();
}
else
{
echo "l'utente".' '.$user.' '." non esiste o la password è errata<br /><br />";
echo '<a href="home.php">Torna alla home</a>';
//chiusura dello statement
mysqli_stmt_close($stmt2);
// chiusura della connessione
$mysqli->close();
}
}
}
}
}
Il codice è semplice, una volta effettuata la connessione fa una query tramite un prepared statement. Se trova qualcosa nella tabella account va nella funzione menu_utente altrimenti fa la query nella tabella administrator. Se non trova niente anche li avvisa che l'utente non esiste.
Le chiusure dei statement e della connessione, ad esempio, vorrei metterle un'unica volta in un finally.
public function login_query ($user, $pass)
{
//richiamo la funzione di connessione al db
$mysqli=conn();
$query="SELECT nome_utente FROM account WHERE nome_utente=? AND password=?";
$stmt=mysqli_stmt_init($mysqli);
if (mysqli_stmt_prepare($stmt, $query))
{
mysqli_stmt_bind_param($stmt,'ss',$user,$pass);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$result);
if (mysqli_stmt_fetch($stmt)){
date_default_timezone_set('Europe/Rome');
echo "Bentornato ".' '.$result," oggi è il".' '.date('d/m/Y').' '."<br /><br />";
//chiusura dello statement
mysqli_stmt_close($stmt);
// chiusura della connessione
$mysqli->close();
menu_utente();
}
else
{
//chiusura dello statement
mysqli_stmt_close($stmt);
$stmt2=mysqli_stmt_init($mysqli);
$query="SELECT nome_utente FROM administrator WHERE nome_utente=? AND password=?";
if (mysqli_stmt_prepare($stmt2, $query))
{
mysqli_stmt_bind_param($stmt2,'ss',$user,$pass);
mysqli_stmt_execute($stmt2);
mysqli_stmt_bind_result($stmt2,$result2);
if (mysqli_stmt_fetch($stmt2))
{
date_default_timezone_set('Europe/Rome');
echo "Bentornato ".' '.$result2," oggi è il".' '.date('d/m/Y').' '."<br /><br />";
//chiusura dello statement
mysqli_stmt_close($stmt2);
// chiusura della connessione
$mysqli->close();
menu_admin();
}
else
{
echo "l'utente".' '.$user.' '." non esiste o la password è errata<br /><br />";
echo '<a href="home.php">Torna alla home</a>';
//chiusura dello statement
mysqli_stmt_close($stmt2);
// chiusura della connessione
$mysqli->close();
}
}
}
}
}
Il codice è semplice, una volta effettuata la connessione fa una query tramite un prepared statement. Se trova qualcosa nella tabella account va nella funzione menu_utente altrimenti fa la query nella tabella administrator. Se non trova niente anche li avvisa che l'utente non esiste.
Le chiusure dei statement e della connessione, ad esempio, vorrei metterle un'unica volta in un finally.