[PHP] problema script invio e-mail

Discussione in 'PHP' iniziata da Punix, 30 Agosto 2017.

  1. Punix

    Punix Nuovo Utente

    Registrato:
    20 Febbraio 2017
    Messaggi:
    13
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    Sesso:
    Maschio
    Salve ho un piccolo problema con uno script che dovrebbe selezionare da un tabella degli utenti in base alla data di nascita e poi spedire un e-mail di auguri...

    codice script:
    PHP:
    <?php
    // HERE add your data for connecting to MySQ database
    $host 'XXXX';           // MySQL server address
    $user 'XXXX';                // User name
    $pass 'XXXX';            // User`s password
    $dbname 'XXXX';          // Database name

    // connect to the MySQL server
    $conn = new mysqli($host$user$pass$dbname);

    // check connection
    if (mysqli_connect_errno()) exit('Connect failed: 'mysqli_connect_error());

    $oggi=date('Y-m-d');;//leggi la data atuale, attento = a come è scritta in tabella

    //interroghi il db
    $query="SELECT username,email FROM users WHERE date_format(compleanno,'%d %m') = date_format(curdate(),'%d %m')";
    $ris=mysqli_query($conn$query);

    while(
    $row=mysqli_fetch_assoc($ris)){
        
    $utente=$row['username'];
        
    $email=$row['email'];
    }


    if(
    $ris != 0)
    {   
    //Invio un Email di auguri.

    $to $email;
    $toname $utente;
    $subject "Serpinter sito - Tanti Auguri!!";

    $boundary "==MP_Bound_xyccr948x==";
    $headers "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
    $headers .= "From: prova@hotmail.com \r\n";
    $html_msg "<center>";
    $html_msg .= "<table width=\"500\" border=0 cellpadding=\"4\">";
    $html_msg .= "<tr><td align=\"center\">&nbsp;";
    $html_msg .= "</td></tr>";
    $html_msg .= "<tr><td>Messaggio di auguri da parte di <font color=\"red\">Serpinter</font>";
    $html_msg .= "</td></tr><tr><td align=\"center\">&nbsp;";
    $html_msg .= "</td></tr></table></center>";
    $confirmmessage "Ciao <font color=\"red\">" $toname "</font> oggi compi gli anni.\n\n";
    $confirmmessage .= "<br>Questo e' un messaggio automatico che Serpinter ha voluto inviare a tutti gli utenti\n registrati al sito guida, che oggi compiono gli anni.\n\n\n<center>Tanti Auguri di Buon Compleanno!!\n <img src=\"http://i43.tinypic.com/8x33bk.gif\"></center>";
    $confirmmessage .= $html_msg "\n\n";
    $confirmmessage .= '<a href="http://prova.it/login.php?message=14">Serpinter - Sito Guida.</a>';
    $message "This is a Multipart Message in MIME format\n";
    $message .= "--$boundary\n";
    $message .= "Content-type: text/html; charset=iso-8859-1\n";
    $message .= "Content-Transfer-Encoding: 7bit\n\n";
    $message .= $confirmmessage "\n";
    $message .= "--$boundary--";
    $mailsent mail($to$subject$message$headers);   

    echo 
    "E-mail di auguri spedita con successo!!";

    }else{
        echo 
    "Nessun utente oggi compie gli anni";   
    }
    //FINE CODICE PER E-MAIL DI AUGURI

    ?>

    lo script diciamo che funziona a metà...ovvero se viene prelevato dalla tabella users un solo utente , viene spedita l'email, insomma fa il suo lavoro, mentre se sono più di uno l ' email non viene spedita a tutti gli utenti...

    per intederci meglio:
    [​IMG]

    eseguendo la query qui vengono trovati 2 utenti che compiono gli anni...l'email viene spedita soltanto al secondo mentre al primo utente no.... questo problema non si verifica appunto quando viene trovato un solo utente.

    altro problema, eseguendo lo script , se non ci sono utenti trovati dalla query dovrebbe restituirmi l echo alla fine dove mi dice che nessun utente compie gli anni, non ottengo nulla invece.
     
  2. Antonio De Marco

    Antonio De Marco Utente Attivo

    Registrato:
    28 Luglio 2015
    Messaggi:
    60
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Home Page:
    Tutto normale, ci sono errori che di seguito vado a spiegarti.
    N.1
    Per verificare se ci sono utenti che compiono o meno gli anni non usare $ris!=0 perchè è un'interpretazione errata. A te serve sapere se ci sono utenti a seguito di una data query e non se la query è stata eseguita (come in questo caso). Dunque usa
    PHP:
    mysqli_num_rows
    http://php.net/manual/en/mysqli-result.num-rows.php
    N.2 Mancato invio agli altri utenti.
    Molto brevemente, metti il codice di invio all'interno del ciclo while perchè questa operazione (di invio email) deve essere eseguita ogni qualvolta si trova l'utente. Così facendo tu memorizzi solo l'ultimo utente ottenuto dalla query ed è per questo che ti da questo problema.

    Dovrebbe funzionare:

    PHP:
    <?php
    // HERE add your data for connecting to MySQ database
    $host 'XXXX';           // MySQL server address
    $user 'XXXX';                // User name
    $pass 'XXXX';            // User`s password
    $dbname 'XXXX';          // Database name

    // connect to the MySQL server
    $conn = new mysqli($host$user$pass$dbname);

    // check connection
    if (mysqli_connect_errno()) exit('Connect failed: 'mysqli_connect_error());

    $oggi=date('Y-m-d');;//leggi la data atuale, attento = a come è scritta in tabella

    //interroghi il db
    $query="SELECT username,email FROM users WHERE date_format(compleanno,'%d %m') = date_format(curdate(),'%d %m')";
    $ris=mysqli_query($conn$query);


    if(
    $ris->num_rows){
           
        while(
    $row=mysqli_fetch_assoc($ris)){
            
    $utente=$row['username'];
            
    $email=$row['email'];

            
    //Invio un Email di auguri.

            
    $to $email;
            
    $toname $utente;
            
    $subject "Serpinter sito - Tanti Auguri!!";

            
    $boundary "==MP_Bound_xyccr948x==";
            
    $headers "MIME-Version: 1.0\r\n";
            
    $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
            
    $headers .= "From: prova@hotmail.com \r\n";
            
    $html_msg "<center>";
            
    $html_msg .= "<table width=\"500\" border=0 cellpadding=\"4\">";
            
    $html_msg .= "<tr><td align=\"center\">&nbsp;";
            
    $html_msg .= "</td></tr>";
            
    $html_msg .= "<tr><td>Messaggio di auguri da parte di <font color=\"red\">Serpinter</font>";
            
    $html_msg .= "</td></tr><tr><td align=\"center\">&nbsp;";
            
    $html_msg .= "</td></tr></table></center>";
            
    $confirmmessage "Ciao <font color=\"red\">" $toname "</font> oggi compi gli anni.\n\n";
            
    $confirmmessage .= "<br>Questo e' un messaggio automatico che Serpinter ha voluto inviare a tutti gli utenti\n registrati al sito guida, che oggi compiono gli anni.\n\n\n<center>Tanti Auguri di Buon Compleanno!!\n <img src=\"http://i43.tinypic.com/8x33bk.gif\"></center>";
            
    $confirmmessage .= $html_msg "\n\n";
            
    $confirmmessage .= '<a href="http://prova.it/login.php?message=14">Serpinter - Sito Guida.</a>';
            
    $message "This is a Multipart Message in MIME format\n";
            
    $message .= "--$boundary\n";
            
    $message .= "Content-type: text/html; charset=iso-8859-1\n";
            
    $message .= "Content-Transfer-Encoding: 7bit\n\n";
            
    $message .= $confirmmessage "\n";
            
    $message .= "--$boundary--";
            
    $mailsent mail($to$subject$message$headers);  

            echo 
    "E-mail di auguri spedita con successo!!";
        }
       
    }else{
        echo 
    "Nessun utente oggi compie gli anni";  
    }
    //FINE CODICE PER E-MAIL DI AUGURI

    ?>
     
    A Punix piace questo elemento.
  3. Punix

    Punix Nuovo Utente

    Registrato:
    20 Febbraio 2017
    Messaggi:
    13
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    Sesso:
    Maschio
    Grande antonio hai risolto il mio problema, si può anche chiudere grazie ancora!! ;)
     
Sto caricando...

Condividi questa Pagina