Page 1 sur 1

Problème envoie mail

Posté : 16 févr. 2007, 15:49
par analfabete
Bonjour à tous je suis en train de faire une partie ou un membre peut envoyer un email a plusieur membre.
Voilà le schema de mon script:
1)envoie du formualire et verification
2)récupération des email des membre qui vont recevoir le mail
3)inscription du message dans la base de donnée et les idmemrbe recupérer precedemment
4) envoie des mails a l'aide d'un boucle while

Voilà mon script:
//Selectionne 4 ami au hasard
$req=mysql_query('SELECT email,idmembre FROM membre WHERE mesmembre=\''.$idmembre.'\' ORDER BY RAND()  LIMIT 4')

//Inscription des infos dans la BDD
$res=mysql_fetch_assoc($req);
mysql_query('INSERT INTO msg VALUES(les info du message)');

//Type du mail a envoyer
$sujet=blabla
$headers=blabla
$message=blabla

//Envoi du mail
while($res=mysql_fetch_assoc($req))
{
mail($res['email'],$sujet,$message,$headers);
}
Mon problème c'est qu'ancun mail s'envoie:(
Merci d'avance !

Posté : 16 févr. 2007, 16:19
par Ryle
Première remarque, c'est que le $res=mysql_fetch_assoc() que tu fais juste après le select va lire et retirer le premier enregistrement ramené par le select. Il ne recevra donc pas de mail... S'il n'y a qu'un ami de trouvé dans ta base, cela expliquerait pourquoi aucun mail n'est envoyé.

Si tu lis le premier enregistrement (la moindre des choses serait déjà de vérifier s'il y en a bien un avec un if()) alors il faut en tenir compte dans ta boucle et au lieu de faire un while/do, la transformer en do/while pour qu'il rentre au moins une fois dedans avec l'enregistrement que tu as lu :)

Remarque n°2, lorsque tu utilises des nombres en SQL (genre un id), ne mets pas d'apostrophes autour. Elles sont réservées aux chaines (varchar, dates, text...). Tu obliges mysql a faire une conversion supplémentaire pour rectifier ton erreur (à noter que les autres bases de données ne le feront pas) :
'SELECT email,idmembre FROM membre WHERE mesmembre='.$idmembre.' ORDER BY RAND()  LIMIT 4'
(pis ça allège l'ecriture et la lecture du code, autant en profiter :))

Récupère et affiche ou test la valeur retourné par la fonction mail() peut être y a t il une erreur à cet endroit là. Affiche également le mail du destinataire pour t'assurer que tu rentres bien dans le while et voir avec quelle valeur ... :)

Posté : 16 févr. 2007, 18:10
par analfabete
Première remarque, c'est que le $res=mysql_fetch_assoc() que tu fais juste après le select va lire et retirer le premier enregistrement ramené par le select.
En faite mon problème est ici et je ne sais pas du tout comment le résoudre...
Car je doit utiliser les résultat de la première requête SELECT pour la requete INSERT INTO et me servir envoyer les mails...
Pourrait-tu m'aider a trouver une solution à cela
Merci !

Posté : 16 févr. 2007, 18:25
par Ryle
On va essayer :)

Première chose à faire selon moi, tester si tu as des résultats renvoyer par ton select :
//Selectionne 4 ami au hasard 
$req=mysql_query('SELECT email,idmembre FROM membre WHERE mesmembre='.$idmembre.' ORDER BY RAND()  LIMIT 4');

if ($res=mysql_fetch_assoc($req)) { // s'il y a des résultats
  ...
}
A partir des données récupérées, donc dans le if(), faire ton insertion, préparer ton mail et modifier ta boucle while/do pour la transformer en do/while.

Dans la premiere tu ne rentre que si la condition est vrai (et donc l'exécuter de 0 à 4 fois). Dans la seconde tu rentres nécessairement et tu ne sortira qu'une fois la condition fausse (et donc l'exécuter de 1 à 4 fois)
...

//Envoi du mail 
do { 
  $envoiMail = mail($res['email'],$sujet,$message,$headers); 
  // echo 'Pour le mail "'.$res['email'].'" la fonction mail() a retourné : '.$envoiMail .'<br />';
} while($res=mysql_fetch_assoc($req))