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

2018-08-09 Thread Giuseppe Naponiello
Salve a tutti,
mi scuso per l'eventuale OT.
Vado subito al dunque:
ho un form per la creazione di un nuovo utente, i dati vengono salvati
tramite PDO in un db postgres. Poiché alcuni dati vengono salvati in una
tabella (rubrica) mentre altri in una tabella specifica (utenti), utilizzo
le funzioni PDO per le transazioni.
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.
Ho provato a gestire la cosa con try - catch ma non ho risolto.
Consigli?

Grazie a tutti e buona serata
-- 
*Giuseppe Naponiello*

*A**rc-**T**eam srl*
piazza Navarrino, 13 - 38023Cles (TN)
C.F. e P. IVA IT-01941600221
cell. +393476846599
mail: beppen...@arc-team.com
pec: arc-t...@pec.it
101 | www.arc-team.com
110 | http://arc-team-open-research.blogspot.it/
000 | https://independent.academia.edu/GiuseppeNaponiello


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

2018-08-09 Thread Davide Prina

On 09/08/2018 16:20, Giuseppe Naponiello wrote:


ho un form per la creazione di un nuovo utente, i dati vengono salvati
tramite PDO in un db postgres.



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?


perché evitare 3?
se l'utente è creato devi impostare, all'interno della transazione un 
flag che dice utente creato, mail da inviare.


Poi un job ogni tot manda la mail a tutti quelli che hanno lo stato 
creato, ma mail non inviata e se riesce ad inviare la mail cambia lo 
stato, altrimenti mette in un log l'errore d'invio.


In questo modo risolveresti anche il punto 4.

Poi non è capito il tuo discorso, forse perché non conosco PHP, ma se 
l'utente non viene creato non potevi semplicemente verificare quanti 
record erano stati inseriti nella tabella con l'ultima insert fatta e se 
ti ritornava 1, allora spedivi la mail?


Ciao
Davide

--
Dizionari: http://linguistico.sourceforge.net/wiki
Motivi per non comprare/usare ms-windows-vista:
http://badvista.fsf.org/
Non autorizzo la memorizzazione del mio indirizzo su outlook



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

2018-08-09 Thread Alessandro Pellizzari
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.



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

2018-08-09 Thread Gollum1
Il giorno gio 9 ago 2018 alle ore 21:24 Davide Prina
 ha scritto:
>
> On 09/08/2018 16:20, Giuseppe Naponiello wrote:
>
> > ho un form per la creazione di un nuovo utente, i dati vengono salvati
> > tramite PDO in un db postgres.
>
>
> perché evitare 3?
> se l'utente è creato devi impostare, all'interno della transazione un
> flag che dice utente creato, mail da inviare.
>
> Poi un job ogni tot manda la mail a tutti quelli che hanno lo stato
> creato, ma mail non inviata e se riesce ad inviare la mail cambia lo
> stato, altrimenti mette in un log l'errore d'invio.
>
> In questo modo risolveresti anche il punto 4.
>
> Poi non è capito il tuo discorso, forse perché non conosco PHP, ma se
> l'utente non viene creato non potevi semplicemente verificare quanti
> record erano stati inseriti nella tabella con l'ultima insert fatta e se
> ti ritornava 1, allora spedivi la mail?
>

la butto lì, non ho grande esperienza, ma perché non fare la procedura
di creazione dell'utente, in un task successivo controllare se
l'utente è stato creato, e solo a quel punto inoltrare la mail.
oltretutto presentare in fase di login, il link per richiedere la mail
con la password se non si è già ricevuta, sposti il problema
all'utente (molti mandano una mail di certificazione dell'account, per
verificare la mail, se non viene verificata, entro 48 ore cancelli
l'utente, perché se dovessero aver messo la mail sbagliata, avresti
altrimenti bruciato lo username, così invece l'utente può procedere a
rifare la procedura diregistrazione).

e ti toglieresti dalle cosidette tutti i controlli incrociati che devi
fare (e che non sempre puoi verificare, tu puoi aver inviato la mail,
ma l'utente potrebbe non averla ricevuta per problemi suoi).

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...