[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT?] [PHP-PDO-CLASS] controllo incrociato tra due funzioni



On 09/08/18 15:30, Giuseppe Naponiello wrote:

> Salvati i dati nel db, utilizzo phpMailer per inviare all'utente la
> password generata automaticamente dal sistema.

> Allo stato attuale ho 4 possibili risultati:
> 1. entrambe le operazioni vanno a buon fine: dati salvati, mail spedita
> 2. nessuna delle operazioni va a buon fine: errore nella transazione dei
> dati, errore nell'invio della mail
> 3. l'utente viene creato ma la mail non viene spedita
> 4. la mail viene spedita ma l'utente non viene creato
> 
> Esiste un modo per evitare i punti 3 e 4? Cioé, se c'è un errore
> nell'invio della mail non salvare i dati nel db, oppure se c'è un errore
> nella query non inviare la mail.

Per prima cosa: non hai modo di sapere se ci sono stati errori
nell'invio della mail. L'unica cosa che puoi controllare (parzialmente)
è che il server SMTP che hai impostato per spedire mail non torni un errore.

In questo caso, e solo in questo caso, puoi provare con:

if (false === $pdo->beginTransaction()) {
  exit;
}
$res1 = $pdo->exec('insert into rubrica...');
$res2 = $pdo->exec('insert into utenti...');

$mailres = false;
if ($res1 > 0 && $res2 > 0) {
  $mailres = mail(...);
}

if ($mailres === false) {
  $pdo->rollBack());
} else {
  $pdo->commit();
}

Bye.


Reply to: