Page 1 sur 1

XMLHttpRequest newsletter

Posté : 22 janv. 2009, 18:04
par Invité
bonjour,

je créé une newsletter en php et pour éviter le timeout j'utilise la fonction XMLHttpRequest, en fait ce systeme devrais me permettre d'envoier un mail à chaque adresse enregistré dans la base en fonction de l'id

per exemple on commence par id1 et on redirige vers id2

mais il ne se passe rien aucun mail envoyé. Si quelq'un pouvais m'aider

voici le code:
<script>
var useridlist;
useridlist=0;

function sendMail(number){
	if (number == useridlist.length){
		return;
	}
	var url = 'sender.php?id='+useridlist[number];
	if (window.XMLHttpRequest) request = new XMLHttpRequest();
	else request = new ActiveXObject("Microsoft.XMLHTTP");
	if (request) {
		request.onreadystatechange = function(){
			if (request && request.readyState == 4) {
	    	   		if (request.status == 200) {
	       				var answer =  request.responseText;
	       				// ici du code de présentation
      	   			        sendMail(++number);		        	    
	   	    		} else {        	    
	    	   		    alert('Response status: ' + request.status);
	       			}
			}
		};	
		request.open("GET", url, true);
	    if (window.XMLHttpRequest) request.send(null);
	    else request.send();
	} else alert('Can\'t initialized XML Http Object.');
}
</script>

<?php
include "sender.php";
?>
voici la page sender.php
<?php

include "".$_SERVER['DOCUMENT_ROOT']."/include/mysql_connect.php";	

$sql1 = mysql_query("SELECT email_list FROM safe_users WHERE id='".$_GET['id']."'") or die (mysql_error());
list($adress) = mysql_fetch_row($sql1);


$headers ='From: "Mega Services"<[email protected]>'."\n"; 
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
$headers .='Content-Transfer-Encoding: 8bit'; 
mail(''.$adress.'', 'juste un test', 'ça doit fonctionner sans probleme', $headers); 



?>

Posté : 22 janv. 2009, 18:24
par yaug
heu déjà... quel est l'interet du timer en javascript? :shock:

Ensuite, tu n'as pas de message de retour quand tu essayes d'envoyer un mail?
Tu as essayé d'envoyé un mail sans passer par ton script, en faisant juste un script qui envoi un mail tout naze pour tester?

Posté : 22 janv. 2009, 18:39
par Invité
en fait si j'accede directement à la page sender.php oui le mail est bien envoyé:

par contre si je passe par la page sendto.php soit la page ou sur trouve mon code javascript ça ne donne rien.

En fait ce systeme me permettrais d'envoyer le mail à une seul personne à chaque execution jusqu'a ce que tout ai été traité et sans recharger la page complete.

Ensuite ça me permettrais également d'afficher un pourcentage de l'envoie du mail.

de quel timer me parle tu?

le code javascript ne viens pas de moi et je m'y connais presque pas en javascript.

Posté : 22 janv. 2009, 18:46
par yaug
Hum.
Ca m'a l'air bien bizzare tout cela.
A première vue je dirais que ton problème vient de la partie javascript.
Tu as essayé de débogué un peu le javascript voir ou tu passais ? Ou alors tu n'as pas non plus le niveau pour faire un alert et dans ce cas je te conseil l'achat d'un bon bouquin pour apprendre le javascript ou le suivit de quelques tutoriels en ligne.


Ce qui semble déjà poser problème dans le javascript :
- ta variable useridlist n'est pas remplie.
- ta fonction sendMail n'est pas appelée donc la requête ajax n'est pas non plus appelée.

Posté : 22 janv. 2009, 19:03
par Invité
ok c'est bon:

var useridlist = 1;

mais pour appeller la fonction je voie pas trop.

si tu pouvais m'aider un peu?

Posté : 22 janv. 2009, 19:11
par yaug
tu n'as jamais fait de javaascript ou d'autre langage?

On commence par déclarer une fonction :

function abc(){
// Traitemetn de la fonction
}

Puis on l'utilise :
abc();

Il faut comprendre que quand tu déclares ta fonction, rien ne se passe, c'est lors de l'appel de la fonction que le traitement est effectué.

Avant de vouloir faire un envoi de mail avec barre de progression, autant commencer par les bases je pense.

Ici tu déclares bien ta fonction, mais jamais tu ne l'appelles.
Donc fait un appel, histoire de lancer le processus d'envoi de mail.

Ensuite, tu viens d'initialiser ta variable useridlist avec un entier alors qu'ensuite tu cherches à t'en servir comme d'un tableau d'éléments.
Initialise la comme un tableau :)

Posté : 02 févr. 2009, 19:06
par Invité
bonjour,

je reviens sur le sujet qui n'est toujours par résolu : :roll:

voici ma page principal:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>

<script>
var useridlist;
useridlist = [1];//ici l'initialisation de la variable useridlist 

function sendMail(number){
	if (number == useridlist.length){
		return;
	}
	var url = 'test2.php?id='+useridlist[number];
	if (window.XMLHttpRequest) request = new XMLHttpRequest();
	else request = new ActiveXObject("Microsoft.XMLHTTP");
	if (request) {
		request.onreadystatechange = function(){
			if (request && request.readyState == 4) {
	    	   		if (request.status == 200) {
	       				var answer =  request.responseText;
	       				// ici du code de présentation
      	   			        sendMail(++number);		        	    
	   	    		} else {        	    
	    	   		    alert('Response status: ' + request.status);
	       			}
			}
		};	
		request.open("GET", url, true);
	    if (window.XMLHttpRequest) request.send(null);
	    else request.send();
	} else alert('Can\'t initialized XML Http Object.');
}

sendMail(100);
</script>
</head>

<body>
</body>
</html>
donc si j'ai bien compris, on commence par appeller la page test2.php?id=1

c'est bien ça non?

le contenue de ma page test2.php
<?php
$headers ='From: "Mega Services"<[email protected]>'."\n"; 
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
$headers .='Content-Transfer-Encoding: 8bit'; 
mail("[email protected]", "juste test", "test", $headers); 
?>
Donc vu mes scripts et si j'ai bien compris, je devrais donc envoyer 100 mails àpartir de l'id 1

mais rien ne se passe à part une alerte qui me dit:

stack overflow at line: 0

quelq'un aurais il une idée de l'origine du probleme?

dsl pas de grande competence en javascript et la je tourne en rond

sinon je teste juste la fonction pour l'utiliser dans une newsletter et contourner le timeout