Page 1 sur 1

Newsletter

Posté : 11 mai 2009, 16:10
par Ariochs
Bonjour (ou re-bonjour puisque c'est la seconde fois que je crée un topic aujourd'hui xD).

Donc voila, en cherchant sur le forum un script de newsletter avec une limit pour eviter les problèmes avec le seveur je suis tombé sur ce topic qui m'a plutot plus : ici

Seul problème j'ai appliqué ce code et modifié légerement pour qu'il puisse fonctionner pour moi.

Voila le resultat :
<?php
    /********** CONSTANTES *********/
	// Connexion au serveur
	include 'connectbdd.php';
    /*
    * Nombre de mails par paquet
    */
    define('MAILS_PAQUET', 4);
    /*
    * Pause entre chaque paquet
    */
    define('PAUSE', 5);
    /********** FIN CONSTANTES *********/
    /*
    * Fonction d'envoi des mails
    * Reçoie en paramètre la requête, et la pause
    * Construit les mail et les envoi
    */
    function sendMail($qry, $pause){
        $res = mysql_query($qry) or die('ERR_SQL :<br />' . $qry . '<br />' . mysql_error());
        /*** Récupération des résultats ***/
        while($mail = mysql_fetch_array($res)){
            echo '<html>
					 <head>
				 
					 </head>
					 <body>
						<h1>TITRE</h1>
							<p>paragraphe 01</p>
							<p>paragraphe 02</p>
					 </body>
				</html>';

        }
        if($pause){
            sleep($pause);
		}
    }
    
    /*
    * Compter le nombre de mails à envoyer
    */
    $qryNombre = "SELECT COUNT(mail) FROM newsletter";
    $resultQryNbr = mysql_query($qryNombre) || die('ERR_SQL :<br />' . $qryNombre . '<br />' . mysql_error());
    $nbrMails = mysql_result($resultQryNbr, 0, 0);
    /*
    * Nombre de boucles à faire
    */
    $nbrBoucles = floor($nbrMails/MAILS_PAQUET);
    echo 'Mails = ' . $nbrMails . ' Nombre boucles = ' . $nbrBoucles . '<br />'; // pour debugg
    /*
    * Nombre de mails restant après les boucles
    */
    $mailsRestants = $nbrMails - $nbrBoucles * MAILS_PAQUET;
    echo 'Reste = ' . $mailsRestants . '<br />'; // pour debugg
    /*
    * Requête générale
    */
    $qryMails = "SELECT email FROM newsletter LIMIT ";
    
    /*
    * Boucle d'envoie par paquet
    */
    for($i = 0; $i < $nbrBoucles; $i++){
        // Construction de la requête en fonction du Nº de paquet
        $qryBoucle = $qryMails . ($i * MAILS_PAQUET) . ', ' . MAILS_PAQUET;
        echo '<h3>' . $qryBoucle . '</h3>'; // pour debugg
        sendMail($qryBoucle, PAUSE);
    }
    /*
     Construction de la requête pour les mails restant après le dernier paquet
    */
    // Envoi seulemnt si il reste de mails
    if($mailsRestants > 0){
        $qryMailsRestants = $qryMails . ($i * MAILS_PAQUET) . ', ' . $mailsRestants;
        echo '<h3>' . $qryMailsRestants . '</h3>'; // pour debugg
        sendMail($qryMailsRestants, false);
    } 
?> 
Et le probleme que j'ai :
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\site\admin\send_newsletter.php on line 45
Mails = Nombre boucles = 0
Reste = 0
Il semblerait que sur le topic la personne avait le même probleme. Quelqu'un aurait une solution ?

Posté : 11 mai 2009, 18:53
par Nagol
comme le dit ton message d'erreur ta requête sql est syntaxiquement incorrecte.

prends l'habitude d'avoir une solution pour afficher la requête finale dans ton code afin de pouvoir comprendre ce genre d'erreur, cad de coller un echo $qry avant le mysql_query($qry) comme ça tu sais exactement pourquoi (et pas la meme occasion nous aussi.