Ma variable disparaît lors de l'appel de ma fonction via setinte

Résolu
feno59 Messages postés 7 Date d'inscription jeudi 25 septembre 2014 Statut Membre Dernière intervention 31 octobre 2014 - Modifié par jordane45 le 25/09/2014 à 14:10
feno59 Messages postés 7 Date d'inscription jeudi 25 septembre 2014 Statut Membre Dernière intervention 31 octobre 2014 - 25 sept. 2014 à 14:58
Bonjour,

Je travaille sur un site de campagne emailing. chaque campagne dispose d'un bouton play pause. Quand je clique sur le bouton play un script php (campagne_lancer.php) est appelé.
je souhaite mettre un système de décompte d'envoi de mail ex : reste 10 mails / 10 , reste 9 mails sur 10, reste 8 mails sur 10.....
Pour rafraichir le résultat j'ai crée la fonction rafraichir que je vais appeler via la fonction setinterval !!

le problème est : lors de la première boucle du set interval ma variable idr est définie (ex idr: 6) mais lors de la deuxième boucle il devient indéfinie..

idr est definie lors du clic sur le bouton play donc comme je click plus sur le bouton idr devient indefinie et mon décompte ne s'affiche plus....

Auriez vous une idée pour que ma variable idr ne disparaisse plus ?

Je suis débutant dans le domaine et je sais pas si j'ai ete très clair mais je peux mettre une session teamviewer en place pour ce que ca intéresse .

Merci votre aide

Voici mon code javascript :
function lancer(idCam){
//
// console.log("lid de la campagne est : " + idCam);
setInterval("rafraichir()", 100);
var url = 'campagne_lancer.php?id_camp='+idCam;
xhr_object.open("GET",url, true);
xhr_object.send(null);
//filtre();
}




function rafraichir(idr){
if (window.XMLHttpRequest)
xhr_object = new XMLHttpRequest();
else if (window.ActiveXObject)
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");


console.log("lidr du rafraichir est : " + idr);

var url = 'reste.php?idr=' + idr;
xhr_object.open("GET", url, false);
xhr_object.send(null);

$("#reste_"+idr).html(xhr_object.responseText);
//document.getElementById('reste_' + idr).html(xhr_object.responseText);

}


var isClicked ="false";
function change(x,id,id2,idr){

if(isClicked == "false"){


x.src="campagne_stopper.png";
document.getElementById('gif_' + id2).innerHTML = 'En cours d\'envoi <img src="barre.gif" height="5" width="30">';
isClicked = "true";
rafraichir(idr);
lancer(id);


<img src="campagne_lancer.png" onclick="change(this,<?php echo($resultat['id']); ?>,<?php echo($resultat['id']); ?>,<?php echo($resultat['id']); ?>)" style="cursor:pointer" width="55" ">

<span style="font-size:11px"><span id="reste_<?php echo($resultat['id']); ?>" class="reste_<?php echo($resultat['id']); ?>">Reste <?php echo $cnt8 ?> sur <?php echo($aff3['nb_emails']); ?></span></span></td>
<input type="enable" id="idri_<?php echo($resultat['id']); ?>" value="<?php echo($resultat['id']); ?>">

mon code reste.php :

<?php
if(isset($_GET['idr'])){
$db = mysqli_connect('localhost', 'root', '', 'test') or die(mysql_error());

$idr = $_GET['idr'];
$nbr6 = 'copy'.$idr;
//echo $nbr6;
$sql8 = " select * from ".$nbr6." ";
$req8 = mysqli_query($db,$sql8) or die ("ERROR SQL 8" .mysql_error());
$aff8 = mysqli_fetch_assoc($req8);
$cnt8 = mysqli_num_rows($req8);

echo "Reste ".$cnt8." sur 30 ";
//}
}
?>


EDIT : Ajout des balises de code
(jordane)

4 réponses

jordane45 Messages postés 38240 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 septembre 2024 345
25 sept. 2014 à 14:10
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
jordane45 Messages postés 38240 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 septembre 2024 345
Modifié par jordane45 le 25/09/2014 à 14:39
Bonjour,

Déjà... au niveau de ton code...
Je vois que utilises JQUERY..... dans l'idéal.. fais ton AJAX aussi avec JQUERY !

Son utilisation est plus simple je trouve...

   $.ajax({ 
 type: "POST",
  url:"reste.php",
  data: "idr="+idr,
  async: false,
  dataType: "json",
  success: function(reponse){
                      console.log(reponse);
   },
  error:function(){alert('error');}
    }); 



Pour ce qui est de ta page php (pour l'ajax) elle change peu:
<?php
$result="";
if(isset($_POST['idr'])){
 $db = mysqli_connect('localhost', 'root', '', 'test') or die(mysql_error());

 $idr = $_POST['idr'];
 $nbr6 = 'copy'.$idr;
 //echo $nbr6;
 $sql8 = " select * from ".$nbr6." ";
 $req8 = mysqli_query($db,$sql8);
 if($req8){
   $aff8 = mysqli_fetch_assoc($req8);
   $cnt8 = mysqli_num_rows($req8);
   $result .="Reste ".$cnt8." sur 30 ";
  }else{
   $result .= "ERROR SQL 8" .mysql_error();
   $result .= $sql8;
  }
}else{
 $result .="No IDR !";
}
// Envoie de la donnée au format json
 echo json_encode($result);
?>





Ensuite... pour ce qui est de ton souci..... tu as une variable dans les paramètres de ta fonction.. mais tu ne lui "passe pas" lorsque tu l'appelles dans ta boucle..
setInterval("rafraichir()", 100);


A la limite... ton IDR .. tu le stocke quelque part dans ta page (dans un input hidden) par exempe... et plutot que de le mettre en paramètres.. tu le LIS directement dans la page...


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
feno59 Messages postés 7 Date d'inscription jeudi 25 septembre 2014 Statut Membre Dernière intervention 31 octobre 2014
25 sept. 2014 à 14:54
Merci Jordane pour ta réponse !!! :)

Je viens de trouver la solution à mon problème (enfin michounours a trouvé)

Voici mon code javascript :
function lancer(idCam,idr){
//
// console.log("lid de la campagne est : " + idCam);
setInterval("rafraichir("+idr+")", 100);
var url = 'campagne_lancer.php?id_camp='+idCam;
xhr_object.open("GET",url, true);
xhr_object.send(null);
//filtre();
}




function rafraichir(idr){
if (window.XMLHttpRequest)
xhr_object = new XMLHttpRequest();
else if (window.ActiveXObject)
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");


console.log("lidr du rafraichir est : " + idr);

var url = 'reste.php?idr=' + idr;
xhr_object.open("GET", url, false);
xhr_object.send(null);

$("#reste_"+idr).html(xhr_object.responseText);
//document.getElementById('reste_' + idr).html(xhr_object.responseText);

}


var isClicked ="false";
function change(x,id,id2,idr){

if(isClicked == "false"){


x.src="campagne_stopper.png";
document.getElementById('gif_' + id2).innerHTML = 'En cours d\'envoi <img src="barre.gif" height="5" width="30">';
isClicked = "true";
lancer(id,idr);


<img src="campagne_lancer.png" onclick="change(this,<?php echo($resultat['id']); ?>,<?php echo($resultat['id']); ?>,<?php echo($resultat['id']); ?>)" style="cursor:pointer" width="55" ">

<span style="font-size:11px"><span id="reste_<?php echo($resultat['id']); ?>" class="reste_<?php echo($resultat['id']); ?>">Reste <?php echo $cnt8 ?> sur <?php echo($aff3['nb_emails']); ?></span></span></td>
<input type="enable" id="idri_<?php echo($resultat['id']); ?>" value="<?php echo($resultat['id']); ?>">
0
feno59 Messages postés 7 Date d'inscription jeudi 25 septembre 2014 Statut Membre Dernière intervention 31 octobre 2014
25 sept. 2014 à 14:58
serais tu comment je peux faire pour recuperer la valeur 0 ?
je m'explique : quand le decompte se fini : Reste 0 mails sur 10
comment puis faire pour arrete le setinterval precisement a 0 ?
0
Rejoignez-nous