Ma variable disparaît lors de l'appel de ma fonction via setinte [Résolu]

feno59 7 Messages postés jeudi 25 septembre 2014Date d'inscription 31 octobre 2014 Dernière intervention - 25 sept. 2014 à 14:01 - Dernière réponse : feno59 7 Messages postés jeudi 25 septembre 2014Date d'inscription 31 octobre 2014 Dernière intervention
- 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)
Afficher la suite 

Votre réponse

4 réponses

jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 25 sept. 2014 à 14:10
0
Merci
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
Commenter la réponse de jordane45
jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - Modifié par jordane45 le 25/09/2014 à 14:39
0
Merci
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
Commenter la réponse de jordane45
feno59 7 Messages postés jeudi 25 septembre 2014Date d'inscription 31 octobre 2014 Dernière intervention - 25 sept. 2014 à 14:54
0
Merci
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']); ?>">
Commenter la réponse de feno59
feno59 7 Messages postés jeudi 25 septembre 2014Date d'inscription 31 octobre 2014 Dernière intervention - 25 sept. 2014 à 14:58
0
Merci
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 ?
Commenter la réponse de feno59

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.