Probleme pour stopper script php [Résolu]

Signaler
Messages postés
7
Date d'inscription
jeudi 25 septembre 2014
Statut
Membre
Dernière intervention
31 octobre 2014
-
Messages postés
7
Date d'inscription
jeudi 25 septembre 2014
Statut
Membre
Dernière intervention
31 octobre 2014
-
Bonjour !!

Je suis entrain de faire un site de campagne d'emailing.

J'ai mis en place un bouton play/pause pour l'envoie et l'arrêt de l'envoie des mails.

Quand j'appuie sur play, l'id de la campagne choisie est envoyé à mon script php (envoie.php)

mon script envoie.php récupère l'id et tout les mails correspondant à cet id et envoie les mails via un boucle while.

Jusque la tout va très bien ! Le problème et le bouton stop !

en effet, je voudrais interrompre l'envoie des mails puis reprendre lorsque j'appuie sur play

ma question est donc comment puis je interrompre le script envoie.php ?? car une fois lancer il ne s'arrette qu'une fois tout les mails envoyer.



Voici ma conf :

la fonction qui est exécuté lorsque je clique sur le bouton play :

function lancerCampagne(idCampagne,idr,idx){

compteur[idr] = setInterval("rafraichir("+idr+")", 1000);

var url = 'consulter_campagne_lancer.php?id_camp='+idCampagne;
xhr_object.open("GET",url, true);
xhr_object.send(null);
//filtre();

}


la fonction exécuter lorsque je clique sur le bouton pause :



function arreterCampagne(idCampagne,idr){

clearInterval(compteur[idr]);
var url = 'consulter_campagne_arreter.php?id_camp='+idCampagne;
xhr_object.open("GET",url, true);
xhr_object.send(null);

}



donc à ce niveau tout se stop grâce au setinterval mais le script php continue en arrière plan.

mon script envoie.php :



<?php

if(isset($_GET['id_camp'])){

$connect = mysqli_connect('localhost', 'root', '', 'test') or die(mysql_error());

$id = $_GET['id_camp'];
$sql = "select * from newcampagne where id = ".$id." ";
$req = mysqli_query($connect,$sql) or die ("ERROR SQL 2" .mysql_error());
$aff = mysqli_fetch_assoc($req);

$nbr66 = $aff['id'];
$nbr6 = 'copy'.$nbr66;
//echo $nbr6.'<br/>';

$sql4 = "select * from ".$nbr6." ";
$req4 = mysqli_query($connect,$sql4)or die ("ERROR SQL 4".mysql_error());

while ($resultat = mysqli_fetch_assoc($req4)) {

//sleep(10);
//$toto = $resultat['email'];
//echo $toto.'<br/>';



/*$nom = $resultat['nom'];
$segment = $resultat['segment'];
$message = $resultat['message'];


$sql2 = "select nom from segment where id = '".$nom."' ";
$req2 = mysqli_query($db,$sql2) or die ("ERROR SQL 2" .mysql_error());
$aff2 = mysqli_fetch_assoc($req2)

$nom_segment = $aff2;




$sql3 = "SELECT editeurtxt FROM newmess2 where objet = 'chat' "; //ORDER BY newmess2.id DESC";
$req3 = mysqli_query($connect,$sql3) or die("SQL Error 3: " . mysql_error());
$aff3 = mysqli_fetch_assoc($req3);

$pub = $aff3;
*/








$mail = "".$resultat['email'].""; // Déclaration de l'adresse de destination.
//echo $mail.'<br/>';
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
$message_html = "qsdqqqdqdqdqdqdqdqdpub";
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
//==========

//=====Définition du sujet.
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail.
$header = "From: \"toto\"<toto@gmail.com>".$passage_ligne;
$header.= "Reply-to: \"toto\" <toto@gmail.com>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========

//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========

//=====Envoi de l'e-mail.
//mail($mail,$sujet,$message,$header);

//==========

//sleep(1);
$sql5 = "delete from ".$nbr6." where email = '".$mail."'";
$req5 = mysqli_query($connect,$sql5) or die ("ERROR SQL 5".mysql_error());




}
//$sql5 = "delete from ".$nbr6." where email = '".$mail."'";
//$req5 = mysqli_query($connect,$sql5) or die ("ERROR SQL 5".mysql_error());
}

?>



Merci d'avance

3 réponses

Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
Bonjour,

Là comme ça;. je vois plusieurs possibilités...

1 possibilité :

Tu ajoutes un FLAG dans ta BDD que tu mets à stop ou Play
Lorsque ton script PHP effectue l'envoie (dans la boucle) tu check avant chaque envoie sur le FLAG est sur "play".
Si oui.. tu continue...
Sinon .. si c'est STOP .. tu arrêtes et tu stockes qq part dans ta BDD le dernier ID du mail envoyé...
Ainsi.. lorsque tu recliques sur PLAY tu reparts à partir de cet ID...


seconde possibilité :
Tu gère ta boucle non pas dans ton script PHP mais dans ton Javascript...
=> Donc tu fais un premier AJAX qui récupère la liste des mails à envoyer
=> Puis à partir de cette liste (dans ta fonction JS) tu lances des requêtes AJAX vers l'envoie des mails..
=> En lieu et place de FLAG (stop/play) tu peux utiliser un élement Hidden dans ton code HTML (et tu gères pareil que dans la première possibilité)



Messages postés
7
Date d'inscription
jeudi 25 septembre 2014
Statut
Membre
Dernière intervention
31 octobre 2014

Merci pour réponse ! je suis entrain détester la solution 1..

Le probleme est que dans ma boucle il ne verifie pas la valeur avant d'entamer une nouvelle boucle . tu aurais une idée ?

voici mon nouveau code :


while ($resultat = mysqli_fetch_assoc($req4) ) {

$pos = $aff['position'];
echo '1er pos : '.$pos.'<br/>';

if ($pos == 'stop') {
echo '2 eme pos : '.$pos.'<br/>';
echo 'stop ok';
exit();
} else {


echo 'pos : '.$pos.'<br/>';
echo 'play ok';




avec le
  $pos = $aff['position']; 


qui récupère la position de mon flag.

Je lance donc mon script et je vais changer la valeur du flag dans phpmyadmin puis je verifie si l'envoie de mail est bien stopper...
le resultat est : il n'est pas stopper.... grrrrrr
Messages postés
7
Date d'inscription
jeudi 25 septembre 2014
Statut
Membre
Dernière intervention
31 octobre 2014

Probleme résoluuuuuuu !!!!!!


Donc je pars du principe requete => Réponse !

Alors voici mon nouveau code :

while ($resultat = mysqli_fetch_assoc($req4) ) {

$sql99 = "select * from newcampagne where id = ".$id." ";
$req99 = mysqli_query($connect,$sql99) or die ("ERROR SQL 2" .mysql_error());
$aff99 = mysqli_fetch_assoc($req99);
$pos = $aff99['position'];
echo '1er pos : '.$pos.'<br/>';

if ($pos == 'stop') {
echo '2 eme pos : '.$pos.'<br/>';
echo 'stop ok';
exit();
} else {


a chaque tour on execute la commande sql99 pour recuperer la valeur !! et sa marche parfaitement !

Je sais pas si c top comme technique mais la g pas le choix en tout cas merciiiiiiiiiiiii