• User

    Problema script

    Salve a tutti

    avrei un piccolo problemino

    In pratica vorrei inviare via email tutti i dati per ogni utente ma quando invio il tutto mi invia soltanto l'ultimo e non capisco il perchè

    Vi posto il codice:

    $sql = 'SELECT user_id,email,name FROM user WHERE user_id = 2';
    $query = mysql_query($sql, $db) or die(mysql_error());
    // ciclo tutte le righe
    while($assoc = mysql_fetch_assoc($query))
    {

                            $name = $assoc['name'];
                            $mmail = $assoc['email'];
                            $email = "la mia email";
                            //Messaggio
                            $oggetto = Oggetto";
                            $userid = $assoc['user_id'];
                            $res = mysql_query("SELECT * FROM products where user = '$userid' ") or die(mysql_error());
    
                            while ($assocs = mysql_fetch_assoc($res) ) {
                            $link = $assocs['link'];
                            $title = $assocs['title'];
                            $image = $assocs['image'];
                            $messaggio = "
                            <div style='background:#eee;'>
                            <table>
                            <tr>
                            <td><img style='width:25px;height:25px;' src='$image' /></td>
                            <td>$title</td>
                            <td><a title='>>> $title' href='$link'/><img src='link immagine'/></a></td>
                            </tr>
                            </table>
                            </div>
                            ";
                            }
                            
    
                            //Inclusione della libreria
                            require_once("class.phpmailer.php");
                           //Creiamo un oggetto PHPMailer e ne settiamo le variabili
                           $mail = new PHPMailer();
                           $mail->From = "$email";
                           $mail->FromName = "name";
                           $mail->AddAddress($mmail);
                           $mail->IsHTML(true); 
                           $mail->Subject = $oggetto;
                           $mail->Body = $messaggio; 
    
                           //Inviamo l'email
                           if($mail->Send())
    {
        // e-mail inviata correttamente
        echo "E-mail inviata correttamente a <b>{$assoc['email']}</b> <br />";
    }
    else
    {
        // impossibile inviare l'e-mail
        echo "Impossibile inviare l'e-mail a <b>{$assoc['email']}</b>: <b>{$mail->ErrorInfo}</b> <br />";
    }
    
    // libero la memoria allocata
    unset($mail);
    

    }

    // chiudo la connessione
    mysql_close($db) or die(mysql_error());

    funziona lo script in quanto la mail la invia ma non capisco perchè ho il ciclo while eppure invia solo l'ultimo record mentre vorrei che estrapolasse tutti i record con lo stesso user
    Aiuto!!:crying:

    Grazie a tutti


  • Moderatore

    Perchè la variabile messaggio ad ogni ciclo, viene sovrascritta.
    Imposta la variabile in questo modo:
    $messaggio = '';
    Poi nel ciclo while fai questo:

    if( empty( $messaggio ) || $messaggio == '' ) {
    $messaggio = // inserisci il codice ;
    } else {
    $messaggio .= //inserisci il codice;
    }

    Fai molta attenzione che ho messo il punto '.' prima dell'uguale per fare congiunzione con il resto 😉
    Ora funziona sicuro.
    Ti posto il codice corretto.

    
    <?php
    $sql = 'SELECT user_id,email,name FROM user WHERE user_id = 2';
    $query = mysql_query($sql, $db) or die(mysql_error());
    // ciclo tutte le righe
    while($assoc = mysql_fetch_assoc($query))
    {
    
    
    $name = $assoc['name'];
    $mmail = $assoc['email'];
    $email = "la mia email";
    //Messaggio
    $oggetto = "Oggetto";
    $userid = $assoc['user_id'];
    $res = mysql_query("SELECT * FROM products where user = '$userid' ") or die(mysql_error());
    $messaggio = '';
    while ($assocs = mysql_fetch_assoc($res) ) {
    $link = $assocs['link'];
    $title = $assocs['title'];
    $image = $assocs['image'];
    if( empty( $messaggio ) || $messaggio == '' ) {
    	$messaggio = "
    	<div style='background:#eee;'>
    	<table>
    	<tr>
    	<td><img style='width:25px;height:25px;' src='$image' /></td>
    	<td>$title</td>
    	<td><a title='>>> $title' href='$link'/><img src='link immagine'/></a></td>
    	</tr>
    	</table>
    	</div>
    	";
    } else {
    	$messaggio .= "
    	<div style='background:#eee;'>
    	<table>
    	<tr>
    	<td><img style='width:25px;height:25px;' src='$image' /></td>
    	<td>$title</td>
    	<td><a title='>>> $title' href='$link'/><img src='link immagine'/></a></td>
    	</tr>
    	</table>
    	</div>
    	";
    }
    
    
    }
    
    
    
    
    //Inclusione della libreria
    require_once("class.phpmailer.php");
    //Creiamo un oggetto PHPMailer e ne settiamo le variabili
    $mail = new PHPMailer();
    $mail->From = "$email";
    $mail->FromName = "name";
    $mail->AddAddress($mmail);
    $mail->IsHTML(true); 
    $mail->Subject = $oggetto;
    $mail->Body = $messaggio; 
    
    
    //Inviamo l'email
    if($mail->Send())
    {
    // e-mail inviata correttamente
    echo "E-mail inviata correttamente a <b>{$assoc['email']}</b> <br />";
    }
    else
    {
    // impossibile inviare l'e-mail
    echo "Impossibile inviare l'e-mail a <b>{$assoc['email']}</b>: <b>{$mail->ErrorInfo}</b> <br />";
    }
    
    
    // libero la memoria allocata
    unset($mail);
    }
    
    
    // chiudo la connessione
    mysql_close($db) or die(mysql_error());
    
    

  • User

    **Grazie ho fatto come mi hai descritto ma mi dà questo:

    **Impossibile inviare l'e-mail a (email)**: You must provide at least one recipient email address.

    Cosa può significare?**


  • Moderatore

    Domanda, perchè cicli con while anche se sai di estrarre un solo risultato?
    Comunque significa che stai inserendo più email, quando invece ne occorre una.
    Ti posto quello corretto

    
    <?php
    $sql = 'SELECT user_id,email,name FROM user WHERE user_id = 2';
    $query = mysql_query($sql, $db) or die(mysql_error());
    $assoc = mysql_fetch_assoc($query);
    $name = $assoc['name'];
    $mmail = $assoc['email'];
    $email = "la mia email";
    //Messaggio
    $oggetto = "Oggetto";
    $userid = $assoc['user_id'];
    $res = mysql_query("SELECT * FROM products where user = '$userid' ") or die(mysql_error());
    $messaggio = '';
    while ($assocs = mysql_fetch_assoc($res) ) {
    	$link = $assocs['link'];
    	$title = $assocs['title'];
    	$image = $assocs['image'];
    	if( empty( $messaggio ) || $messaggio == '' ) {
    		$messaggio = "
    		<div style='background:#eee;'>
    		<table>
    		<tr>
    		<td><img style='width:25px;height:25px;' src='$image' /></td>
    		<td>$title</td>
    		<td><a title='>>> $title' href='$link'/><img src='link immagine'/></a></td>
    		</tr>
    		</table>
    		</div>
    		";
    	} else {
    		$messaggio .= "
    		<div style='background:#eee;'>
    		<table>
    		<tr>
    		<td><img style='width:25px;height:25px;' src='$image' /></td>
    		<td>$title</td>
    		<td><a title='>>> $title' href='$link'/><img src='link immagine'/></a></td>
    		</tr>
    		</table>
    		</div>
    		";
    }
    
    
    
    
    
    
    
    
    //Inclusione della libreria
    require_once("class.phpmailer.php");
    //Creiamo un oggetto PHPMailer e ne settiamo le variabili
    $mail = new PHPMailer();
    $mail->From = "$email";
    $mail->FromName = "name";
    $mail->AddAddress($mmail);
    $mail->IsHTML(true); 
    $mail->Subject = $oggetto;
    $mail->Body = $messaggio; 
    
    
    
    
    //Inviamo l'email
    if($mail->Send())
    {
    // e-mail inviata correttamente
    echo "E-mail inviata correttamente a <b>{$assoc['email']}</b> <br />";
    }
    else
    {
    // impossibile inviare l'e-mail
    echo "Impossibile inviare l'e-mail a <b>{$assoc['email']}</b>: <b>{$mail->ErrorInfo}</b> <br />";
    }
    
    
    
    
    // libero la memoria allocata
    unset($mail);
    }
    
    
    
    
    // chiudo la connessione
    mysql_close($db) or die(mysql_error());
    
    

  • User

    Come puoi vedere dallo script ho 2 tabelle
    La prima contiene l'elenco degli user mentre la seconda le informazioni associate.

    Quindi cosa dovrebbe fare lo script, inviare a tutte le email presenti nella prima tabella.Per ogni email della prima tabella estrapolare i dati associati.
    Nelle due tabelle il campo user_id e user sono uguali.

    Invece mi invia la mail a tutti normalmente con il primo ciclo while mentre al secondo ciclo invece di associare tutti i dati invia solo l'ultimo

    Non sò se ho reso l'idea, lo sò ho la mente contorta :(.

    Ora provo questo che mi hai postato e ti faccio sapere
    Intanto grazie mille per il tuo aiuto


  • User

    Bene ho provato il tuo script e funziona, c'è solo un problemino se ci sono 10 record per un utente mi invia 10 email invece dovrebbe inviare 1 email con all'interno tutti e 10 i record...


  • Moderatore

    Sei sicuro che la funzione di phpmailer non è all'interno di un ciclo?


  • User

    Risolto, il secondo ciclo andava chiuso prima del blocco di invio

    Grazie molte mi hai dato un grande aiuto!! 🙂