• User

    Invio mail giorno di compleanno iscritti

    ciao a tutti,
    nuovo quesito... :arrabbiato:
    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??? :arrabbiato:
    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!!!!!!


  • User

    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ù.


  • User

    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?


  • User

    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="UPDATE datacomple SET data = '$data' WHERE id = '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 online

    ciao a tutti 🙂


  • User Attivo

    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


  • User

    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


  • User Attivo
    • 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 🙂

  • User

    @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


  • User Attivo

    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.