- Home
- Categorie
- Coding e Sistemistica
- PHP
- Invio mail giorno di compleanno iscritti
-
Invio mail giorno di compleanno iscritti
ciao a tutti,
nuovo quesito...
Vorrei realizzare uno script, che includerò poi nella home del sito, che permetta l' invio automatico di una mail a chi compie gli anni quel giorno...Lo script l' ho abbastanza chiaro in mente.. cioè quando qualcuno apre la home, il PHP mi fa un controllo sul giorno e sul mese corrente, poi mi connetto al database, verifico chi ha il giorno uguale al giorno corrente e poi se il mese è uguale al mese corrente parte la mail...
Fino qui neanche un problema...
Il problema è:
Come faccio a fare in modo che venga mandata una sola mail???
Cioè: teoricamente questo controllo lo fa tutte le volte che uno accede alla home, quindi avrei una mail per ogni accesso... ovvio che questo non va bene..
Help me!!!!!!
-
potresti crearti una nuova tabella nel db chiamata mail_spedite strutturata così:
id | data | spedita | e_mail
nel campo spedita (true/false) salvi l'azione, e nella home di metti un if così se il record non c'è spedisce la mail e lo aggiunge, e se c'è non la spedisce più.
-
grazie ciccio
anche io avevo pensato a una cosa del genere, però non voglio una tabella chilometrica con il passare del tempo..
secondo te se ogni giorno faccio anche un controllo sulla data de database e se è diversa faccio un UPDATE inserendo la nuova e imposto di nuovo spedta a false, dici che riesco a fare tutto con un unico record?
-
Grazie ciccio, ho risolto.
Posto il codice che ho utilizzato:[php]
<?php
include "../code/config.php";
$data = date("Y-m-d");$punt_db=mysql_connect($host,$user,$psw) or $conn="Errore nella connessione al database&";
mysql_select_db($db,$punt_db) or die("Impossibile raggiungere il database".$db);$rs = mysql_query("SELECT * FROM `datacomple`"); $row = mysql_fetch_assoc($rs);
if ($row['data']!=$data){
$select_query="UPDATEdatacomple
SETdata
= '$data' WHEREid
= '1'";
$result=mysql_query($select_query,$punt_db) or die("Errore nella query".mysql_error());$giorno_attuale=(int)date("j"); $mese_attuale=(int)date("n"); $res = mysql_query("SELECT * FROM `elenco` WHERE `day` = '$giorno_attuale' "); $rig = mysql_fetch_assoc($res); $nr = mysql_num_rows($res); for($x = 0; $x < $nr; $x++){ if ($rig['month']==$mese_attuale){ $emailTo = $rig['email']; $messaggio = "Ciao, oggi è il tuo compleanno! Tantissimi auguri da tutto il Sacca Tennis Team"; $subject = "Buon compleanno"; $headers = "From: Sacca Tennis Team <[email protected]>\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "Return-Path: Sacca Tennis Team <[email protected]>" ." \r\n"; $headers .= "Reply-To: Sacca Tennis Team <[email protected]>" . "\r\n"; mail($emailTo, $subject, $messaggio, $headers); } }
}
mysql_close($punt_db);
?>
[/php]Attenzione: quando vado a vedere il giorno e il mese attuali io ho usato i parametri di [php]date()[/php] che servivano a me, ma non è detto che siano quelli che servono a voi...
Per sicurezza consultate il manuale di PHP onlineciao a tutti
-
Perchè effettui questo controllo ogni volta che si apre la home?
Credo proprio nn ti convenga per almeno 2 motivi:
-1 Se per disgrazia nessuno visita il tuo sito un giorno non parte l'email
-2 Appesantisci di tanto effettuando controlli / select /mail() la tua home.Prova ad utilizzare un servizio Contrab it.wikipedia.org/wiki/Crontab.
Se il tuo hosting non ti fornisce tale servizio puoi usarne uno esterno come: webcron.org
-
ciao visitaci,
-
il sito viene visitato ben più di una volta al giorno.
-
il controllo lo effettuo poichè se ogni volta che uno va nella home mi manda una mail, mi vengono inviate n mail, in questo modo invece lo fa solo quando la data odoerna è diversa da quella preesistente e poi mi aggiorna il database con la data odierna
-
la home non è poi appesantita dal momento che il tutto viene fatto solo una volta al giorno
-
-
- il controllo lo effettuo poichè se ogni volta che uno va nella home mi manda una mail, mi vengono inviate n mail, in questo modo invece lo fa solo quando la data odoerna è diversa da quella preesistente e poi mi aggiorna il database con la data odierna
Beh ma puoi sempre fare una paginetta in php che lo faccia a parte e dire al crontab di visitarla 1 volta al giorno così eviti i controlli nella home
- la home non è poi appesantita dal momento che il tutto viene fatto solo una volta al giorno
Ci sarà pure un IF in + e del codice in + nella home
- il controllo lo effettuo poichè se ogni volta che uno va nella home mi manda una mail, mi vengono inviate n mail, in questo modo invece lo fa solo quando la data odoerna è diversa da quella preesistente e poi mi aggiorna il database con la data odierna
-
@visitaci said:
Beh ma puoi sempre fare una paginetta in php che lo faccia a parte e dire al crontab di visitarla 1 volta al giorno così eviti i controlli nella home
facile a dirsi difficile a farsi...
è un polentone... è più sicuro lasciarlo dove sicuramente qualcuno va@visitaci said:
Ci sarà pure un IF in + e del codice in + nella home
si ma è solo quello che ho postato... roba da 1 o 2 Kb al massimo
comunque grazie dei sugerimenti
-
vabè ci rinuncio! Spero ci sia qualcuno più bravo di me che riesca a farti cambiare idea sull'implementazione.
Alla fine hai aggiunto dei dati in più sulla tabella ed altri controlli.
Non devi vedere i codici solo in funzione dei kb occupati, il php viene interpretato ed eseguito da un webserver o parte di esso, più codice metti più lenta risulterà la pagina soprattutto se il codice è ridondante o inutile (correggetemi se dico qualche stupidata).Personalmente un occhiatina su come funziona il Crontab la darei.
Alla fine fai una paginetta in php con il codice da eseguire e dici al crontab di visitarla 1 volta al giorno ed il gioco è fatto.