Newsgroup: it.comp.www.php
Titolo: non usare "or die"

Invio regolarmente una mail con questo script:
// SCRIPT INVIO MAIL
$mail = mail($destinatario, $oggetto, $messaggio, $headers) or die("Problemi
nell'invio della mail");
  if ($mail == TRUE){
  print "<p>Grazie per averci contattato!</p>";
  print "<p>Riceverete una conferma alla vostra email.</p>";}
  if ($mail == FALSE){
  print "<p>La mail non può essere inviata!</p>";}
// SCRIPT INVIO MAIL
Facendo delle prove in locale, che non funzionano perchè non è configurato
mi scrive questo errore:
Warning: mail(): Failed to connect to mailserver at "localhost" port 25,
verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in
c:\programmi\easyphp1-7\www\_lavori_open\infoimmobiliare\include\contents\i_
contatti_it.php on line 36
Ripeto che lo script funziona nel mio spazio web ma non in locale. Però
vedendo questo errore ho pensato di prevenirlo ed ho aggiunto "or die":
// SCRIPT INVIO MAIL con or die
$mail = mail($destinatario, $oggetto, $messaggio, $headers) or die("Problemi
nell'invio della mail");
...
Però "or die" è un analogo di "exit" e quindi si esce dal ciclo senza
stampare un form che ho in fondo alla pagina. In pratica io vorrei che non
mi stampasse l'errore ma "Problemi nell'invio della mail" e anche il form in
fondo alla pagina.
Qualcuno mi può suggerire come fare per non utilizzare "or die" ed impedire
che si veda il file che genera l'errore?


Potresti disattivare l'error_reporting nel php.ini (e non ti stamperà più
errori, solo una pagina bianca), oppure prependi il simbolo @ davanti alla
funzione che ti genera errore; in questo caso il php non stampa l'errore a
video (ma si blocca comunque se l'errore non permette di continuara a
processare la pagina)

Il punto è proprio questo. Vorrei che continuasse a processare la pagina
enza però stampare l'errore.
E' possibile?


E' possibile?
Usando @ davanti alla funzione mail appunto, in piu' togliendo die().
In pratica devi trasformare cosi' la tua riga di codice:
$mail = @mail($destinatario, $oggetto, $messaggio, $headers);
In questo modo:
- usando @ verra' soppresso per questa funzione l'eventuale messaggio
  di warning da parte di PHP nel caso di mancata configurazione per
  l'invio di mail (questo ovviamente non risolve il non-funzionamento
  in un caso simile)
- lo script continuera' ugualmente l'esecuzione anche in caso di esito
  negativo da parte della funzione mail() vista la rimozione di die()
PS: puoi ridurre a un controllo if/else la verifica dell'esito della
funzione mail() dato che quest'ultima restituisce solamente valore di
tipo bool (quindi se non e' true puo' essere soltanto false)
if ($mail == true)
{
    print "<p>Grazie per averci contattato!</p>";
    print "<p>Riceverete una conferma alla vostra email.</p>";
}
else
{
    print "<p>La mail non può essere inviata!</p>";
}
Ciao!
-- 
Daniele Alessandri

Grazie per l'aiuto!
Mi fai qualche esempio, se non , dell'utilizzo di @ ?
Oppure serve solamente a non stampare errori come nel mio caso?
--
Cristian aKa Cc
--

 Oppure serve solamente a non stampare errori come nel mio caso?
Esattamente, serve solo a sopprimere l'output dei messaggi di 
warning/errore. Questo pero' significa che l'errore in realta' rimane, 
tienilo ben presente. Nel caso di un warning lo script continua la sua 
esecuzione (fermo restando che dipende dalla funzione stessa e dalla 
logica dello script in cui essa viene chiamata), ma se una funzione 
dovesse ritornare un Fatal Error allora l'esecuzione verrebbe ugualmente 
interrotta.
-- 
Daniele Alessandri

Grazie mi interessa molto per non stampare a video il percorso e la pagina
che generano l'errore.
