• User Attivo

    [Script] Newsletter senza DATABASE 1.1

    Newsletter senza utilizzo di database (1.1).
    Questo script è rivolto a tutti coloro che non hanno un dominio con un database Mysql e che
    vogliono però implementare una funzione di newsletter nel proprio sito web.
    File dello script:
    · config.php
    · cancella.php
    · gestione.php
    · invio_newsletter.php
    · newsletter.php
    · utenti.php
    · login.php
    Per prima cosa, la teoria sulla sicurezza.
    Molti di voi potranno pensare, ma quanto mi conviene utilizzare uno script senza database?
    Non è poco sicuro utilizzare dei file come database?
    La risposta a queste domande è indubbiamente SI ma ho lavorato per far si che questo
    problema diventi minimo, il nostro file dati si reggerà su una pagina con estensione ?.php? e
    non su un file di testo qualunque. Chiaramente il file non viene modificato come un file di testo
    ma bensì con un?operazione più complessa per garantire più sicurezza. Passiamo ai fatti per
    spiegare la situazione più semplicemente.
    Ecco il nostro file di dati chiamato utenti.php:
    [php]
    <?PHP
    $users[]="[email protected]";
    $users[]="[email protected]";
    ?>[/php]
    Il file nell?esempio è riempito da due indirizzi di posta elettronica, come potete vedere gli
    indirizzi sono inseriti in un array, quindi se viene richiamato tramite browser il file utenti.php
    non visualizzerà nulla dato che non ci sono stampe a video. Purtroppo per avere questo pizzico
    di sicurezza in più perdiamo un po? in velocità nella modifica del file.
    Il file delle configurazioni (config.php):
    [php]
    <?PHP
    /***************

    • config.php *
    • SCWD     *
      

    ***************/

    //Per prima cosa avvio la sessione così non ripeto dove serve questo comando
    session_start();

    $nome_sito="SCWD"; //Nome del sito

    $admin_nick="admin"; //Nickname amministratore (di default admin)
    $admin_passw="21232f297a57a5a743894a0e4a801fc3"; //Password amministratore in MD5! (di default admin in md5)

    $home_page="http://www.xxx.xx";//Indirizzo dell'home-page del tuo sito (http://www.xxxxxxx.xxx)
    $url_cancellati="http://www.xxx.it/newsletter/cancella.php";//Url completa di dove si trova la pagina (di default cancellati.php) che cancella gli utenti registrati (es. http://www.xxxxxxxxx.xxx/xxxxxx/cancellati.php)
    $torna_home="Torna all'<a href="$home_page">home page</a>."; //Testo da visualizzare per tornare all'home del tuo sito
    $db_utenti="utenti.php"; //nome o url completa di dove si trova il file contenente tutti gli utenti registrati

    $err_mail="Attenzione e-mail inserita non valida."; //Errore dell'inserimento dell'e-mail
    $err_mail_esistente="Attenzione e-mail inserita già presente."; //Errore che indica che l'e-mail già è presente nell'array
    $err_mail_inesistente="Attenzione e-mail non presente nei nostri archivi"; //Indica che l'e-mail che si vuoi cancellare non è presente
    $delete_mail="Attenzione per cancellarti dalla newsletter devi inserire il tuo indirizzo di posta elettronica:"; //Testo per cancellarsi dalla newsletter
    $delete_mail_confermato="$del_mail correttamente cancellata. Spiacenti di non averti più qui con noi."; //E-mail cancellata dalla newsletter correttamente
    $inserire_nick="Inserisci il nickname"; //Login (nick) amministratore
    $inserire_passw="Inserisci la password"; //Login (password) amministratore
    $registrato_ok="$mail - correttamente registrata.";
    $testa_news="<h1>SCWD</h1><hr>"; //La testa dell'e-mail
    $coda_news="______________________________________________________________________________________<br />
    Ti è arrivata questa e-mail perchè registrato alla newsletter di $nome_sito.<br />
    Per non ricevere più newsletter <a href="$url_cancellati">clicca qui</a><br /><br /><br />"; //La fine dell'e-mail

    $HTML_text_transform=1; //Nel testo dell'e-mail, se settato, trasforma automaticamente gli "a capo" con <br />. Di default è settato.

    $email_notify="[email protected]"; //Indirizzo e-mail dove verranno inviati i backup degli utenti registrati alla newsletter
    $notify_deleted=1; //Abilita la notifica tramite mail quando un utente si cancella dalla newsletter, inoltre fa un backup di tutti gli utenti presenti e lo invia tramite e-mail all'indirizzo della riga precedente.
    $notify_subscribed=1; //Abilita la notifica tramite mail quando un utente si iscrive alla newsletter, inoltre fa un backup di tutti gli utenti presenti e lo invia tramite e-mail all'indirizzo specificato due righe sopra.
    ?>
    [/php]
    Questo è un normale file di configurazione, le variabili più importanti da cambiare sono:
    · $nome_sito;
    · $admin_nick;
    · $admin_passw;
    · $home_page;
    · $url_cancellati;
    · $db_utenti;
    Nel codice in alto è già tutto commentato comunque velocemente vediamo i più importanti:
    · $nome_sito è il nome del vostro sito (es. SCWD);
    · $admin_nick è il nick dell'amministratore per accedere alla gestione della newsletter;
    · $admin_passw è la password dell'amministratore per accedere alla gestione della
    newsletter criptata in MD5 (quindi inserire la vostra passworda già criptata);
    · $home_page è l'indirizzo dell'home page del vostro sito, l'importante è specificare
    http://www.xxxx.xxx;
    · $url_cancellati è l'indirizzo di dove si trova il file cancellati.php (che vedremo più avanti)
    anche qui si DEVE specificare l?url completo
    http://www.xxx.xxx/newsletter/cancellati.php;
    · $db_utenti è il nome del file dove vengono memorizzate le e-mail (di default è
    utenti.php);
    Nuove funzioni implementate in questa versione dello script rispetto la vecchia 1.0:
    [php]
    $HTML_text_transform=1; //Nel testo dell'e-mail, se settato, trasforma automaticamente gli "a capo" con <br />. Di default è settato.
    $email_notify="[email protected]"; //Indirizzo e-mail dove verranno inviati i backup degli utenti registrati alla newsletter
    $notify_deleted=1; //Abilita la notifica tramite mail quando un utente si cancella dalla newsletter, inoltre fa un backup di tutti gli utenti presenti e lo invia tramite e-mail all'indirizzo della riga precedente.
    $notify_subscribed=1; //Abilita la notifica tramite mail quando un utente si iscrive alla newsletter, inoltre fa un backup di tutti gli utenti presenti e lo invia tramite e-mail all'indirizzo specificato due righe sopra.
    [/php]
    I commenti specificano tutto come sempre nel dettaglio, si potranno scegliere comunque tre
    opzioni, la prima è se trasformare il testo in HTML ($HTML_text_transform) e serve per il testo
    della newsletter da inviare (per far leggere correttamente i caratteri speciali). La seconda e la
    terza sono le notifiche di iscrizione cancellazione dal servizio, ogni qual volta un utente si
    iscriva o cancelli dalla newsletter verrà inviata una e-mail all?amministratore all?indirizzo
    $email_notify. Tutte e tre le funzioni possono essere disalbilitate, di default però sono attive.
    Per disabilitare una funzione assegnare valore 0 anziché 1.
    IMPORTANTE: Se volete rinominare il file config.php dovete stare attenti a cambiare in tutte le
    pagine il vecchio config.php con il nuovo_nome.php!
    Accesso all?amministrazione tramite il file login.php:
    [php]
    <?PHP
    /***************

    • login.php *
    • SCWD     *
      

    ***************/
    require ('config.php');

    if(isset($_POST['login'])) //Se il login è stato effettuato controlla...
    {
    if((!isset ($_POST['nick']))||(!isset ($_POST['passw']))) // Controlla se i valori passati dal form siano nulli.
    {
    //VALORI NULLI\
    echo "Errore: i campi nickname e password non possono contenere un valore nullo.
    <!-- EFFETTUO UN REDIRECT A QUESTA PAGINA -->
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "login.php";
    }
    window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script>
    <br />Se entro 4 secondi non vieni reindirizzato al form <a href="login.php">clicca qui</a>.<br />
    ";
    exit();
    }
    else{ //I valori passati tramite il form non sono nulli
    $nick=$_POST['nick'];
    $passw=$_POST['passw'];
    $passw=md5($passw);
    //Controllo che i dati inseriti siano corretti
    if(($nick==$admin_nick)&&($passw==$admin_passw)) //Se i dati coincidono
    {
    //LOGIN EFFETTUATO CORRETTAMENTE\

            //Creo la sessione
            $_SESSION['nickname']=$nick;
            $_SESSION['password']=$passw;
            
            
            echo "Login effettuato correttamente.
            <!-- EFFETTUO UN REDIRECT ALLA PAGINA DI GESTIONE -->
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"gestione.php\";
            }
            window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            <br />Se entro 4 secondi non vieni reindirizzato alla gestione newsletter <a href=\"gestione.php\">clicca qui</a>.<br />
            ";
            exit();
        }
        else
        {
            echo "Login errato.
            <!-- EFFETTUO UN REDIRECT A QUESTA PAGINA -->
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"login.php\";
            }
            window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            <br />Se entro 4 secondi non vieni reindirizzato al form <a href=\"login.php\">clicca qui</a>.<br />
            ";
            exit();
        }
        
    }
    

    }
    else
    {
    echo " <form name="login" action="" method="post">
    <table align="center">

            <tr>
                <td>
                    $inserire_nick :
                </td>
                <td>
                    <input type=\"text\" size=\"30\" name=\"nick\">
                </td>
            </tr>
            
            <tr>
                <td>
                    $inserire_passw :
                </td>
                <td>
                    <input type=\"password\" size=\"30\" name=\"passw\">
                </td>
            </tr>
    
            <tr>
                <td colspan=\"2\">
                    <input type=\"submit\" value=\"Invia\" name=\"login\">
                </td>
            </tr>
    
            </table>
            </form>";
    

    }
    ?>
    [/php]
    Questo è un semplice login con le sessioni.
    Le pagine che ora vedremo verranno commentate ora eppoi postate.
    Non sto qui a dilungarmi if per if ma bensì a spiegare in maniera molto breve cosa succede,
    una volta loggati verremo rimandati alla pagina gestione.php la quale controllerà se siamo
    effettivamente loggati o meno. Se il controllo va a buon fine verrà visualizzato un piccolo menu
    in alto dove si può scegliere di:
    · inviare una nuova newsletter;
    · aggiungere un indirizzo e-mail;
    · cancellare un indirizzo e-mail;
    · visualizzare tutti gli indirizzi e-mail;
    · effettuare il logout.
    L?invio di una nuova newsletter avviene tramite il file invia_newsletter.php che controllerà i
    campi inseriti ed invierà la newsletter (consiglio di mettere anche il vostro indirizzo e-mail tra
    gli utenti che riceveranno l?e-mail).
    L?eliminazione e l?aggiunta di un indirizzo è il cuore di questo script per il fatto che bisogna
    andare a modificare un file ?.php? aggiungendo e cancellando una stringa (esempio della
    stringa da trovare nel file e cancellare):
    $cancellare_mail="$"."users[]="$users[$posizione_array]";"; //Stringa mail da cancellare.
    La visualizzazione degli indirizzi e-mail non è altro che un semplice for che scorre l?array
    users[].
    Il logout distrugge la sessione creata dal login.
    I file.
    gestione.php:
    [php]
    <?PHP
    /***************

    • gestione.php *
    • SCWD     *
      

    ***************/
    require('config.php');
    include("$db_utenti");

    if((!isset ($_SESSION['nickname']))&&(!isset ($_SESSION['password'])))// Se non si è loggati rimanda alla pagina di login
    {
        echo "Login non effettuato.
            <!-- EFFETTUO UN REDIRECT ALLA PAGINA DI LOGIN -->
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"login.php\";
            }
            window.setTimeout(\"doRedirect()\", 3000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            <br />Se entro 3 secondi non vieni reindirizzato al form <a href=\"login.php\">clicca qui</a>.<br />
            ";
        exit();
    }
    
    else //Se si è loggati...
    {            
        //Qui sotto un piccolo menù
        echo "<center>
        |<a href=gestione.php?operazione=1>Invia newsletter</a>| 
        |<a href=gestione.php?operazione=2>Aggiungi un'e-mail</a>| 
        |<a href=gestione.php?operazione=3>Elimina un'e-mail</a>| 
        |<a href=gestione.php?operazione=5>Visualizza e-mail registrate</a>| 
        |<a href=gestione.php?operazione=4>Logout</a>| 
        </center><br /><br />";
        //switch per controllare cosa far visualizzare
        switch($_GET['operazione'])
        {
            case 1: 
                    //INVIARE NEWSLETTER
                    include("invio_newsletter.php");
            break;
            
            case 2:
                    //AGGIUNGERE E-MAIL
                    echo "
                    <form name=\"aggiungi_email\" action=\"newsletter.php?ctrl=1&amministratore=1\" method=\"post\">
                    <table align=\"center\">
                    <tr>
                     <td>
                      *e-mail
                     </td>
                     <td>
                      <input type=\"text\" size=\"30\" name=\"mail\">
                     </td>
                    </tr>
     
                    <tr>
                     <td colspan=\"2\">
                      <input type=\"submit\" value=\"Invia\" name=\"submit\">
                     </td>
                    </tr>
     
                    </table>
                    </form>
                    ";
            break;
            
            case 3:
                    //ELIMINARE E-MAIL
                    echo "<form name=\"cancellati\" action=\"cancella.php?del=1&amministratore=1\" method=\"post\">
                            <table align=\"center\">
     
                            <tr>
                             <td>
                              *e-mail
                             </td>
                             <td>
                              <input type=\"text\" size=\"30\" name=\"del_mail\">
                             </td>
                            </tr>
     
                            <tr>
                             <td colspan=\"2\">
                              <input type=\"submit\" value=\"Invia\" name=\"submit\">
                             </td>
                            </tr>
     
                        </table>
                        </form>";
            break;
            
            case 4:
                   //LOGOUT
                           session_destroy();
                        echo "Ti sei disconnesso correttamente<br />
                            Se entro 4 secondi non vieni rimandato all'home page
                            <a href=\"$home_page\">clicca qui</a><br />
                                <script type=\"text/javascript\">
                                <!--
                                function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
                                location.href = \"$home_page\";
                                }
                                window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
                                //-->
                                </script>";
            break;
            
            case 5:
                    //VISUALIZZARE E-MAIL REGISTRATE
                    echo "
                    <table align=\"center\">
     
                        <tr>
                            <td>
                                <b>Indirizzo e-mail</b>
                            </td>
                        </tr>";
                    $numero_utenti=count($users);
                    for($i=0;$i<$numero_utenti;$i++)
                    {
                        echo "
                        <tr>
                            <td>
                                $users* - <a href=cancella.php?del=1&amministratore=1&del_mail=$users*>Elimina</a>
                            </td>
                        </tr>
                        ";
                    }
            echo"</table>";
            break;
        }
    
    }
    

    ?>
    [/php]


  • User Attivo

    newsletter.php:
    [php]
    <?PHP
    /*****************

    • newsletter.php *
    •  SCWD      *
      

    *****************/

    require('config.php');

    //Passaggio variabili
    if(isset ($_POST['mail']))
    {$mail=$_POST['mail'];}
    if(isset ($_GET['ctrl']))
    {$ctrl=$_GET['ctrl'];}
    if(isset ($_GET['amministratore']))
    {$amministratore=$_GET['amministratore'];}

    if($ctrl==1)
    {
    //Verifica forma e-mail
    $verifica_mail = ereg("^[^@ ]+@[^@ ]+.[^@ .]+$", $mail);
    if(!$verifica_mail)
    {echo "$err_mail";
    if($amministratore==1)
    {
    echo " <br />
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "gestione.php?operazione=3";
    }
    window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script>
    Se entro 4 sencondi non vieni reindirizzato <a href="gestione.php?operazione=3">clicca qui</a>.<br />";
    }
    else
    { echo " <br />
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "newsletter.php?ctrl=0";
    }
    window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script>
    Se entro 4 secondi non vieni reindirizzato <a href="newsletter.php?ctrl=0">clicca qui</a>.";
    }
    exit();
    }

    //Verifica se esiste l'e-mail inserita dall'utente
    include("$db_utenti"); //Includo utenti.php (o il nuovo nome del file di dati) perchè essendo una pagina contenente un array con tutte le e-mail scorro lo stesso per controllare se l'e-mail inserita non esiste.
    $lunghezza_array=count($users); //Conto il numero delle e-mail presenti nell'array
    $esiste=0;
    $mail_utente_iscritto=$mail;
    
    for($i=0; $i<$lunghezza_array; $i++) 
    {
        $controllo=strcmp($mail,$users*);
        if($controllo==0)
        {
            $esiste=1; //Se esiste assegno 1 alla variabile $esiste
        }
    }
    
    if($esiste==1) //E-mail già esistente
    {
        echo "$err_mail_esistente";
        if($amministratore==1)
        {
            echo "    <br />
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"gestione.php?operazione=3\";
            }
            window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            Se entro 4 sencondi non vieni reindirizzato <a href=\"gestione.php?operazione=3\">clicca qui</a>.<br />";
        }
        else 
        {    echo "    <br />
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"newsletter.php?ctrl=0\";
            }
            window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            Se entro 4 secondi non vieni reindirizzato <a href=\"newsletter.php?ctrl=0\">clicca qui</a>.";
        }
    }
    else //E-mail non esistente nel file, procediamo alla registrazione dell'e-mail
    {
        //L'e-mail è salvata nella variabile $mail
        $fp = fopen($db_utenti,"r+");
        fseek($fp, -3,SEEK_END);
        $stampa_completa="
    $"."users[]=\"$mail\";
    

    ?>";
    fputs($fp, $stampa_completa);
    fclose($fp);

        echo"$registrato_ok<br />";
        
        if(isset ($notify_subscribed)) //Se la notifica è abilitata invia una mail con gli utenti registrati e l'ultimo utente registrato al servizio
        {
            //Invio notifica all'amministratore della newsletter con gli utenti attualmente registrati al servizio
            $numero_utenti=count($users);
            $oggetto="Utente iscritto dal servizio";
            $header = "From: UPDATE: Newsletter $nome_sito <$home_page>\n";
            // costruiamo le intestazioni specifiche per il formato HTML
            $header .= "MIME-Version: 1.0\n";
            $header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
            $header .= "Content-Transfer-Encoding: 7bit\n\n";
            $messaggio="";
            for($i=0; $i<$numero_utenti; $i++) //Inserisco dentro al testo del messaggio la lista degli utenti
            {
                        $messaggio=$messaggio."<br />- $users*";
            }
            $messaggio=$messaggio."<br />- $mail_utente_iscritto";
            $messaggio=$messaggio."<br /><br />Utente iscritto dal servizio: $mail_utente_iscritto"; //Scrivo l'ultimo utente che si è cancellato dal servizio
            @mail($email_notify,$oggetto,$messaggio,$header); //Invio il messaggio all'amministratore
        }
    

    if($amministratore==1) //Se è l'amministratore che cancella l'e-mail deve essere rimandato alla sua pagina di amministrazione
    {
    echo "<br />
    Se entro 4 secondi non vieni rimandato alla gestione newsletter
    <a href="gestione.php">clicca qui</a><br />
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "gestione.php";
    }
    window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script>";
    }
    else //Se è l'utente che si cancella ritorna all'home page
    {
    echo " <br />
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "$home_page";
    }
    window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script>
    Se entro 4 secondi non vieni reindirizzato alla home page <a href="$home_page">clicca qui</a>.<br />";
    }

    }
    }
    else if((!$ctrl)||($ctrl==0)) //Form di iscrizione
    {
    echo " <form name="new_email" action="newsletter.php?ctrl=1" method="post">
    <table align="center">

     <tr>
      <td>
        *e-mail
      </td>
      <td>
        <input type=\"text\" size=\"30\" name=\"mail\">
      </td>
     </tr>
     
     <tr>
      <td colspan=\"2\">
        <input type=\"submit\" value=\"Invia\" name=\"submit\">
      </td>
     </tr>
     
    </table>
    </form>";
    

    }
    ?>
    [/php]cancella.php:
    [php]
    <?PHP
    /***************

    • cancella.php *
    • SCWD     *
      

    ***************/
    require('config.php');
    include("$db_utenti");

    //Passaggio variabili
    if(isset ($_GET['del']))
    {$del=$_GET['del'];}
    if(isset ($_GET['amministratore']))
    {$amministratore=$_GET['amministratore'];}
    //A seconda di chi cancella c'è un metodo di trasmissione dell'e-mail.
    if(isset ($_POST['del_mail']))
    {$del_mail=$_POST['del_mail'];}
    else if(isset ($_GET['del_mail']))
    {$del_mail=$_GET['del_mail'];}

    if($del==1)
    {
    $lunghezza_array=count($users); //Conto il numero delle e-mail presenti nell'array
    $esiste=0;
    for($i=0; $i<$lunghezza_array; $i++)
    {
    $controllo=strcmp($del_mail,$users*);

        if($controllo==0)
        {
            $esiste=1;
            $posizione_array=$i; //La posizione dell'array da cancellare
        }
    }
    if($esiste==0) //Se non esiste l'e-mail nel nostro file
    {
        echo"<br />$err_mail_inesistente<br />";
    
        if($amministratore==1)
        {
            echo "
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"gestione.php?operazione=3\";
            }
            window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            Se non vieni reindirizzato alla gestione entro 4 secondi <a href=\"gestione.php?operazione=3\">clicca qui</a>.<br />";
        }
        else
        {    echo "
            <script type=\"text/javascript\">
            <!--
            function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
            location.href = \"cancella.php\";
            }
            window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
            //-->
            </script>
            Se non vieni reindirizzato al form di cancellazione entro 4 secondi <a href=\"cancella.php\">clicca qui.</a>.<br />";
        }
    }
    else //Se esiste cancella le due righe dell'e-mail dell'utente
    

    {
    $cancellare_mail="$"."users[]="$users[$posizione_array]";"; //Stringa mail da cancellare
    $mail_utente_cancellato="$users[$posizione_array]";
    $str="";
    //Copio tutto il file dentro una variabile stringa
    $fp=fopen($db_utenti, "r");

    while (false !== ($c = fgetc($fp))) {
    $str=$str."$c"; //Se si stampa $str non stampa nulla perchè il browser non legge i tag php
    }
    fclose($fp); //Chiudo il file
    
    $str_aggiornato=str_replace("$cancellare_mail", "", $str); //Tolgo dalla stringa (che contiene l'intero file) l'e-mail da cancellare
    
    $fp=fopen($db_utenti,"w"); //Riapro il file con gli utenti
        fputs($fp, $str_aggiornato); //Riscrivo il nuovo file senza l'utente cancellato
    fclose($fp); //Chiudo nuovamente il file
    
    echo"<br />$delete_mail_confermato<br />";
    
    if(isset ($notify_deleted)) //Se la notifica è abilitata invia una mail con gli utenti registrati e l'ultimo utente cancellato al servizio
    {
        //Invio notifica all'amministratore della newsletter con gli utenti attualmente registrati al servizio
        $numero_utenti=count($users);
        $oggetto="Utente cancellato dal servizio";
        $header = "From: UPDATE: Newsletter $nome_sito <$home_page>\n";
        // costruiamo le intestazioni specifiche per il formato HTML
        $header .= "MIME-Version: 1.0\n";
        $header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
        $header .= "Content-Transfer-Encoding: 7bit\n\n";
        $messaggio="";
        for($i=0; $i<$numero_utenti; $i++) //Inserisco dentro al testo del messaggio la lista degli utenti
        {
                if((strcmp($users*,$mail_utente_cancellato))!=0) // Se sono diverse ritorna un numero diverso da zero quindi copia tutti gli utenti tranne l'ultimo cancellato
                {
                    $messaggio=$messaggio."<br />- $users*";
                }
        }
        $messaggio=$messaggio."<br /><br />Ultimo utente cancellato dal servizio: $mail_utente_cancellato"; //Scrivo l'ultimo utente che si è cancellato dal servizio
        @mail($email_notify,$oggetto,$messaggio,$header); //Invio il messaggio all'amministratore
    }
    
    if($amministratore==1) //Se è l'amministratore che cancella l'e-mail deve essere rimandato alla pagina di amministrazione
    {
            echo "<br />
                Se entro 4 secondi non vieni rimandato alla gestione newsletter
                <a href=\"gestione.php\">clicca qui</a><br />
                <script type=\"text/javascript\">
                <!--
                function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
                location.href = \"gestione.php\";
                }
                window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
                //-->
                </script>";
    }
    else //Se è l'utente che si cancella ritorna alla home page
    {
        echo "    <br />Se entro 4 secondi non vieni rimandato all'home page
                <a href=\"$home_page\">clicca qui</a><br />
                <script type=\"text/javascript\">
                <!--
                function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
                location.href = \"$home_page\";
                }
                window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
                //-->
                </script>";
    }
    

    }

    }
    else
    {
    echo"<br /><p align=center>$delete_mail<br /></p>";
    echo "<form name="cancellati" action="cancella.php?del=1" method="post">
    <table align="center">

     <tr>
      <td>
        *e-mail
      </td>
      <td>
        <input type=\"text\" size=\"30\" name=\"del_mail\">
      </td>
     </tr>
     
     <tr>
      <td colspan=\"2\">
        <input type=\"submit\" value=\"Invia\" name=\"submit\">
      </td>
     </tr>
     
    </table>
    </form>";
    

    }

    ?>
    [/php]invio_newsletter.php:
    [php]
    <?PHP
    /***********************

    • invio_newsletter.php *
    •     SCWD         *
      

    ************************/

    require('config.php');
    include("$db_utenti");

    if((!isset ($_SESSION['nickname']))&&(!isset ($_SESSION['password'])))// Se non si è loggati rimanda alla pagina di login
    {
    echo "Login non effettuato.
    <!-- EFFETTUO UN REDIRECT ALLA PAGINA DI LOGIN -->
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "login.php";
    }
    window.setTimeout("doRedirect()", 3000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script>
    <br />Se entro 3 secondi non vieni reindirizzato al form di login <a href="login.php">clicca qui</a>.<br />
    ";
    exit();
    }

    //Passaggio variabili
    if(isset ($_GET['step']))
    {$step=$_GET['step'];}

    if(isset ($_POST['testo']))
    {
    $testo=$_POST['testo'];
    $_SESSION['testo']=$testo;
    }
    if(isset ($_POST['oggetto']))
    {
    $oggetto=$_POST['oggetto'];
    $_SESSION['oggetto']=$oggetto;
    }
    if(isset ($_SESSION['testo']))
    {$testo=$_SESSION['testo'];}
    if(isset ($_SESSION['oggetto']))
    {$oggetto=$_SESSION['oggetto'];}

    if(($step==1)||(!$step))
    {
    echo "<br /><form name="invia_newsletter" action="invio_newsletter.php?step=2" method="post">
    <table align="center">

     <tr>
      <td>
        *Oggetto newsletter
      </td>
      <td>
        <input type=\"text\" size=\"30\" name=\"oggetto\">
      </td>
     </tr>
     
     <tr>
      <td>
        *Testo della newsletter<br />(Puoi utilizzare anche tag HTML)<br /><p align=justify><font size=2>Attenzione una volta premuto
        INVIA<br /> ci vorrà del tempo per inviare tutte le e-mail.</font></p>
      </td>
      <td>
        <textarea name=\"testo\" style=\"width: 400px; height: 200px\"></textarea>
      </td>
     </tr>
     
     <tr>
      <td colspan=\"2\">
        <input type=\"submit\" value=\"Invia\" name=\"submit\">
      </td>
     </tr>
     
    </table>
    </form><br />";
    

    }
    //Verifica dei dati inseriti
    else if($step==2)
    {
    if(($oggetto=="")||($testo==""))
    {
    echo"Si sono verificati i seguenti errori:<br />";

        if($oggetto=="")
        {
            echo"<br />- Oggetto newsletter non inserito;";
        }
        
        if($testo=="")
        {
            echo"<br />- Testo newsletter non inserito;";
        }
        
        echo "    <br />
        <script type=\"text/javascript\">
        <!--
        function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
        location.href = \"gestione.php\";
        }
        window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
        //-->
        </script>
        Se entro 4 secondi non vieni rimandato alla gestione <a href=\"gestione.php\">clicca qui</a>.<br />
        ";
    }
    else //Tutto ok
    {
        $numero_utenti=count($users); //Numero di utenti registrati alla newsletter
        
        //Modifico il testo:
        
        if(isset ($HTML_text_transform)) //Se settato sostuisce alcuni tra i più importanti caratteri speciali
        {    
            $a_capo="\n";
            $testo=str_replace($a_capo,'<br/>',$testo); /*Sostituisce gli "a capo" dati dall'invio della tastiera con <br /> nella stringa del testo;
                                                    per eseguire tale funzione bisogna settare $HTML_text_transform nel file di configurazione.
                                                    La funzione esiste ma non essendo sicuri che sostituisca anzichè con <br />, <br> meglio
                                                    auto-implementarla.*/
            $testo=str_replace("\'",'&#39;',$testo); //Se trova un'apice la sostituisce con codice html
            $testo=str_replace('\"','&#34;',$testo); //Se trova le virgolette le sostituisce con codice html
            $testo=str_replace('\\\\','&#92;',$testo); //Se trova un backslash lo sostituisce con codice html
        }
        
                    
        $header = "From: Newsletter $nome_sito <$email_notify>\n";
        // costruiamo le intestazioni specifiche per il formato HTML
        $header .= "MIME-Version: 1.0\n";
        $header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
        $header .= "Content-Transfer-Encoding: 7bit\n\n";
        $corpo="<br />
            $testa_news
            <br />
            $testo<br />
            <br />
            <br />
            $coda_news";
        
        if(isset ($_GET['i_attuale']))
        {
            $i_attuale=$_GET['i_attuale'];
            if($i_attuale>0)
            {    
                if(!isset ($_GET['attesa']))
                {
                        echo "    <br />
                        <script type=\"text/javascript\">
                        <!--
                        function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
                        location.href = \"invio_newsletter.php?i_attuale=$i_attuale&step=2&attesa=1\";
                        }
                        window.setTimeout(\"doRedirect()\", 10000); //Fa partire il redirect dopo tot. secondi
                        //-->
                        </script>
                        Per evitare di mandare in blocco il sistema lo script è stato interrotto e riprenderà
                        tra 10 secondi. NON chiudere/aggiornare la pagina.<br /> Se non vieni reindirizzato entro 10 secondi
                        <a href=\"invio_newsletter.php?i_attuale=$i_attuale&step=2&attesa=1\">clicca qui</a>.<br />
                        ";
                    exit();
                }
            }    
            else
            {$i_attuale=0;}
        }
        else
            {$i_attuale=0;}
            
        $controllo_contatore=0;
        for($i=$i_attuale; $i<$numero_utenti; $i++)
        {
             if( @mail($users*,$oggetto,$corpo,$header))
                {
                    echo "<br /><font face=verdana size=2 color=blue><center>INVIATA - $users*.</center></font>";
                }
            else
                {
                    echo "<br /><font face=verdana size=3 color=red><center>NON INVIATA -  $users*</center></font>";
                }
            $controllo_contatore++;
            if($controllo_contatore>49)
            {
                $i_attuale=$i+1;
                echo "    <br />
                    <script type=\"text/javascript\">
                    <!--
                    function doRedirect() { //funzione con il  link alla pagina che si desidera raggiungere
                    location.href = \"invio_newsletter.php?i_attuale=$i_attuale&step=2\";
                    }
                    window.setTimeout(\"doRedirect()\", 2000); //Fa partire il redirect dopo tot. secondi
                    //-->
                    </script>
                    Per evitare di mandare in blocco il sistema lo script verrà interrotto e riprenderà
                    tra qualche secondo. NON chiudere/aggiornare la pagina. Se non vieni reindirizzato entro 2 secondi alla pagina di attesa 
                    <a href=\"invio_newsletter.php?i_attuale=$i_attuale&step=2\">clicca qui</a>.<br />
                    ";
                exit();
            }
        }
        echo"<br /><br /><a href=\"gestione.php\">Torna alla gestione</a><br /><br />";
        $_SESSION['testo']="";
        $_SESSION['oggetto']="";
    }
    

    }

    ?>
    [/php]
    Lo script è impostato per trasmettere le mail a gruppi di 50 per volta attendendo tra un gruppo di invio ed un altro 10 secondi, questo per evitare che il server che lo ospita possa bloccare l'esecuzione dello script.
    Ovviamente è importante non chiudere la pagina fino ad esecuzione terminata.

    Spendo due parole sul perché dell?utilizzo di un redirect in Javascript anziché un header in php:
    semplicemente perché alcuni host non supportano la funzione header, per essere sicuri lo
    faccio in Javascript.
    Ovviamente il tutto non è graficamente composto, quindi può essere adattato nel modo in cui
    pensate sia meglio farlo.
    SCWD

    Quì trovate il pacchetto zippato contenente i file. 🙂

    E quì troverete una demo online per testare lo script.
    Buon divertimento. 😉


  • User Newbie

    Non so se si può rispondere qui..visto che nessuno ha risposto...

    Comunque io ho provato ad installare il tuo newsletter, ma mi da alcuni errori.

    Uno è quello che ti appare anche a te nel demo messo a disposizione, e cioè una cosa tipo:

    Warning: include() [function.include]: URL file-access is disabled in the server configuration in D:\Inetpub\webs\lilithstasopracom\public\newsletters\gestione.php on line 7

    Warning: include(utenti.php) [function.include]: failed to open stream: no suitable wrapper could be found in D:\Inetpub\webs\lilithstasopracom\public\newsletters\gestione.php on line 7

    Warning: include() [function.include]: Failed opening 'utenti.php' for inclusion (include_path='.;c:\php\includes') in D:\Inetpub\webs\lilithstasopracom\public\newsletters\gestione.php on line 7

    Nella linea 7 ho: include("$db_utenti");

    nel login anche, se aggiungo una mail nell'opzione aggiungi email, quando clicco su invia mi da un errore:

    Warning: include(utenti.php) [function.include]: failed to open stream: no suitable wrapper could be found in D:\Inetpub\webs\lilithstasopracom\public\newsletters\newsletter.php on line 53

    in cui ho: include("$db_utenti");

    Insomma da sempre errore riguardo a db_utenti, forse non mi fa scrivere.
    I permessi non sono visto che addirittura ho messo il tutto nella cartella public, e poi ho controllato e sono su 666.


    Altro problema nel form del sito in cui la gente immette la mail per iscriversi, al momento di cliccare su invia, mi dice pagina non trovata..
    Dove posso andare a guardare per farlo funzionare?

    Premetto che ho seguito le tue istruzioni, quale modificare il file config.php.

    Spero in una risposta e grazie.


  • ModSenior

    I permessi non dovrebbero essere a 666, ma a 777.


  • User Newbie

    Lo so, ma non me li fa mettere, nonostante sia pure in public.

    Uso aruba con hosting windows.


  • ModSenior

    Su aruba hosting dal pannello admin, puoi avviare la procedura di ripristino dei permessi. Se devi farci girare script php è comunque preferibile che passi ad un hosting linux.


  • User Newbie

    Si ho gia fatto il ripristina, ma me li mette sempre a 666, che razza di senso ha.

    Lo so che sarebbe meglio linux ma chi lo sapeva che dava tutti sti problemi..e tutti gli altri come fanno?
    E poi ora devo aspettare che finisce l'anno del contratto per cambiare, non c'è un modo per aggirare la cosa? Non riesco proprio a far funzionare tante cose, sempre per via dei permessi.

    Provo a scrivere ad aruba magari.


  • ModSenior

    Il ripristino dei permessi che io sappia finoa poco tempo fa diceva che poteva impiegare alcune ore.
    Gli altri usano linux, chi compra un hosting windows solitamente usa asp invece di php.

    Hai comunque verificato di aver messo nel config.php il percorso corretto del file?


  • User Newbie

    Il ripristino me l'ha fatto in 2 secondi e non ore...non so perchè...

    Il percorso comunque è giusto...figurati sono due sere che sto impazzendoci dietro. 🙂


  • ModSenior

    Guardando bene l'errore, a me non sembra un problema di permessi ma piuttosto di un percorso non valido.
    A sto punto ti chiedo, cosa hai messo come valore di $db_utenti?


  • User Newbie

    Non mi fa mettere l'url... comunque è giusto anzi provo a metterlo senza il http e www

    $db_utenti=".lilithstasopra.com/public/newsletters/utenti.php";

    Ok l'ha messo..


  • ModSenior

    Infatti è sbagliato. 😄

    In che cartella hai messo lo script?


  • User Newbie

    Intendi lo script di config.php?

    Sempre nella stessa cartella in public/newsletters

    Si..dimmi che ho sbagliato ti prego. 🙂


  • User Newbie

    Ok ho scritto solo il nome del file ed ha funzionato...eppure li c'era scritto di mettere anche l'indirizzo completo..

    Ora ho un altro problema per cancellare una mail..
    Li ho messo sempre l'indirizzo completo cioè http:www ecc ecc fino alla cartella cancella.php e mi da il solito errore a questa riga:

    $fp=fopen($db_utenti,"w"); //Riapro il file con gli utenti
    fputs($fp, $str_aggiornato); //Riscrivo il nuovo file senza l'utente cancellato
    fclose($fp); //Chiudo nuovamente il file

    Dice argomento non valido stream...qualcosa del genere.

    E lo fa anche quando invio una mail nuova...li mi sa che sono sempre i maledetti permessi...

    Su che aspetti dimmi che ho sbagliato ancora? 😉


  • ModSenior

    Dovresti incollare l'errore altrimenti non posso aiutarti.


  • User Newbie

    Warning: fopen(utenti.php) [function.fopen]: failed to open stream: Permission denied in D:\Inetpub\webs\lilithstasopracom\public\newsletters\cancella.php on line 80

    Warning: fputs(): supplied argument is not a valid stream resource in D:\Inetpub\webs\lilithstasopracom\public\newsletters\cancella.php on line 81

    Warning: fclose(): supplied argument is not a valid stream resource in D:\Inetpub\webs\lilithstasopracom\public\newsletters\cancella.php on line 82


  • User Attivo

    Scusate l'assenza, controllo la procedura domani vedo se per caso è errata e faccio aggiornare 😉
    Grazie Thedarkita 🙂


  • User

    Fantastico!

    Questo scritp è semplicemnte fantastico!

    Grazie a tutti voi :yuppi:


  • User Attivo

    Prego,
    facci sapere come và, e se ci sono cose che secondo te vanno migliorate.
    Grazie a te.
    🙂


  • User

    Ciao,

    tutto è migliorabile, anche questo script fantastico! 🙂

    Allora per prima cosa farei una semplice modifica; la frase "[email protected] correttamente cancellata." la colorerei di rosso e magari gli darei un carattere grassetto. Come formattazione non c'è niente (colori, testi, etc etc) e va bene così, ma questa frase la colorerei di "default".

    edit: "Se entro 4 secondi non vieni rimandato alla gestione newsletter clicca qui" Toglierei il redirect dopo 4 secondi quando elimino una e-mail! Se sbaglio a cancellare, ho pochi secondi per capire che e-mail è! (anche se arriva l'indirizzo cancellato sulla mail dell'amministratore 🙂 )

    Sempre per quanto riguarda la formattazione forse inserirei delle classi nei vari elementi in modo da poter formattare con i css senza dover mettere le mani al codice. Di default potresti lasciare tutto bianco e nero come adesso 😉

    Sarebbe interessante avere una copia di ogni newsletter inviata (con scritta la data di invio...)

    Domanda: Il codice html lo posso copiare e incollare da un altro editor?

    Potrebbe essere utile l'integrazione di un editor come TinyMCE.

    Questi sono un po' di suggerimenti in ordine sparso che mi sono venuti in mente, spero che vi possano essere utili.

    :ciauz:

    A presto!