[PHP] problema script invio e-mail

  • Creatore Discussione Creatore Discussione Punix
  • Data di inizio Data di inizio

Punix

Nuovo Utente
20 Feb 2017
13
1
3
34
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:
1vK3dWo.png


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.
 
Tutto normale, ci sono errori che di seguito vado a spiegarti.
N.1
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.
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

?>
 
  • Like
Reactions: Punix
Grande antonio hai risolto il mio problema, si può anche chiudere grazie ancora!! ;)
 

Discussioni simili