- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema script
-
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!!Grazie a tutti
-
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());
-
**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?**
-
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());
-
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
-
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...
-
Sei sicuro che la funzione di phpmailer non è all'interno di un ciclo?
-
Risolto, il secondo ciclo andava chiuso prima del blocco di invio
Grazie molte mi hai dato un grande aiuto!!