appel d'une fonction dans une boucle ne se réalise qu'une fois

appel d'une fonction dans une boucle ne se réalise qu'une fois - PHP - Programmation

Marsh Posté le 12-11-2009 à 17:19:00    

Bonjour,
 
Je crée en ce moment un formulaire d'envoi à plusieurs destinataires avec pièce jointe. J'ai utilisé la fonction ici:
http://www.phpcs.com/telecharger.aspx?ID=50607
Donc l'utilisateur se connecte sur www.monsite.com. Il remplit le formulaire d'envoi et les gens du groupe A comme destinataires.
Mon script récupère les mails dans la base de données dans la table groupe A et les stock dans un array; Puis il envoie les mails :  
 
 
foreach($deja as $mesmails){//envoyer un mail à chaque email présent dans le tableau
        if(strlen($mesmails)<1){
        //NE RIEN FAIRE
        }
        else{
    echo $mesmails;
         /*************************************************************************/
  include('fonctionMail.php');//c'est là que se trouve les fonctions que j'utilise
  $dest=$mesmails;
  $reponse=StripSlashes("Votre Message a &eacute;t&eacute; envoy&eacute; avec succ&egrave;" );
 
  $subject="{$_POST['subject']}";
 
  $msg="{$_POST['msg']}";
 
  $email="{$_POST['email']}";
 
  $NomFichier="{$_FILES["NomFichier"]}";
 
  $NomFichier_name="{$_FILES["NomFichier"]["name"]}";
 
  $email1="";
 
  $priority="1";
 
 
 
  $subject=StripSlashes($subject);
 
  $msg=StripSlashes($msg);
 
  $msg="Message :
 
  $msg";
 
  $m= new Mail; // create the mail
 
         $m->From( $email );
 
         $m->To( $dest);      
 
         $m->Subject( $subject );
 
         $m->Body( $msg);        // set the body
 
  if ($email1!="" ) {
 
          $m->Cc( $email1);
 
  }
 
          $m->Priority($priority) ;    
 
  if ($NomFichier_name!="" ) {
 
  //copy($NomFichier,"../upload/".$NomFichier_name);
 
  //chargement du fichier
 
  $uploaddir = '../upload/';
 
       $uploadfile = $uploaddir . basename($NomFichier_name);
 
  //copy($NomFichier,"../upload/".$NomFichier_name);
 
  //
 
  if (move_uploaded_file($_FILES['NomFichier']['tmp_name'], $uploadfile)) {
 
       echo "Le fichier est valide, et a &eacute;t&eacute; t&eacute;l&eacute;charg&eacute;
 
             avec succ&egrave;s. Voici plus d'informations :\n";
 
  } else {
 
       echo "Attaque potentielle par t&eacute;l&eacute;chargement de fichiers.
 
           Voici plus d'informations :\n";
 
  }
 
 
 
 
 
  //
 
  $m->Attach( "../upload/".$NomFichier_name, "application/octet-stream" );
 
  }
 
         $m->Send();  
 
      if ($NomFichier_name!="" ) {
 
  Unlink("../upload/".$NomFichier_name);   }  
 
  echo "$reponse";
 
   
 
  /**************************************************************************/    
 }
}
 
Le problème c'est que le mail est envoyé au premier mail trouvé puis cela s'arrête.
 
Auriez vous une idée? Merci pour votre aide.


Message édité par begin le 12-11-2009 à 17:19:59
Reply

Marsh Posté le 12-11-2009 à 17:19:00   

Reply

Marsh Posté le 12-11-2009 à 17:32:45    

Code :
  1. //mon code


Message édité par stealth35 le 12-11-2009 à 17:32:54
Reply

Marsh Posté le 12-11-2009 à 17:39:47    

oups dsl, voici mon code
 

Code :
  1. foreach($deja as $mesmails){//envoyer un mail à chaque email présent dans le tableau
  2.         if(strlen($mesmails)<1){
  3.         //NE RIEN FAIRE
  4.         }
  5.         else{
  6.     echo $mesmails;
  7.          /*************************************************************************/
  8.   include('fonctionMail.php');//c'est là que se trouve les fonctions que j'utilise
  9.   $dest=$mesmails;
  10.   $reponse=StripSlashes("Votre Message a &eacute;t&eacute; envoy&eacute; avec succ&egrave;" );
  11.   $subject="{$_POST['subject']}";
  12.   $msg="{$_POST['msg']}";
  13.   $email="{$_POST['email']}";
  14.   $NomFichier="{$_FILES["NomFichier"]}";
  15.   $NomFichier_name="{$_FILES["NomFichier"]["name"]}";
  16.   $email1="";
  17.   $priority="1";
  18.   $subject=StripSlashes($subject);
  19.   $msg=StripSlashes($msg);
  20.   $msg="Message :
  21.   $msg";
  22.   $m= new Mail; // create the mail
  23.          $m->From( $email );
  24.          $m->To( $dest);     
  25.          $m->Subject( $subject );
  26.          $m->Body( $msg);        // set the body
  27.   if ($email1!="" ) {
  28.           $m->Cc( $email1);
  29.   }
  30.           $m->Priority($priority) ;   
  31.   if ($NomFichier_name!="" ) {
  32.   //copy($NomFichier,"../upload/".$NomFichier_name);
  33.   //chargement du fichier
  34.   $uploaddir = '../upload/';
  35.        $uploadfile = $uploaddir . basename($NomFichier_name);
  36.   //copy($NomFichier,"../upload/".$NomFichier_name);
  37.   //
  38.   if (move_uploaded_file($_FILES['NomFichier']['tmp_name'], $uploadfile)) {
  39.        echo "Le fichier est valide, et a &eacute;t&eacute; t&eacute;l&eacute;charg&eacute;
  40.              avec succ&egrave;s. Voici plus d'informations :\n";
  41.   } else {
  42.        echo "Attaque potentielle par t&eacute;l&eacute;chargement de fichiers.
  43.            Voici plus d'informations :\n";
  44.   }
  45.   //
  46.   $m->Attach( "../upload/".$NomFichier_name, "application/octet-stream" );
  47.   }
  48.          $m->Send(); 
  49.       if ($NomFichier_name!="" ) {
  50.   Unlink("../upload/".$NomFichier_name);   } 
  51.   echo "$reponse";
  52.  
  53.   /**************************************************************************/   
  54. }
  55. }

Reply

Marsh Posté le 12-11-2009 à 17:52:47    

ca dépend aussi comment est ta variable $deja au début
en plus dans ta boucle tu recharge le fichier a chaque fois,
 
tu devrai creer ton object Mail, avec tout dedan et dans ta boucle faire
 

Code :
  1. foreach($emails as $email)
  2. {
  3.    $mail->To($email);
  4.    $mail->Send();
  5. }

Reply

Marsh Posté le 12-11-2009 à 21:42:44    

Merci pour ton aide!
 
Pourrais-tu me dire à quel moment il y a une recharge de la page dans la boucle?
Je crois que c'est ça qui change tout. en effet, j'ai fait un echo des variables et j'ai vu qu'à la deuxième itération tous les $_POST sont vides.

Reply

Marsh Posté le 12-11-2009 à 23:29:06    

au moment ou tu fais move_uploaded_file, en plus cette fonction marche qu'un seul fois, puisque qu'elle surpime le fichier

Reply

Marsh Posté le 13-11-2009 à 09:25:56    

tu pourrais pas refaire l'indentation, parce que là, c'est pas facile à lire ton code.
Le premier truc que je vois, c'est que tu fais à chaque tour de boucle un include('fonctionMail.php'); ce qui sert à rien et pourrait être la cause de ton pb.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-11-2009 à 15:44:58    

Bjr,
 
Voici la seule solution que j'ai trouvé pour l'instant c'est mettre le unlink après la boucle foreach.
Vous pensez que ça a un incident?
 
Merci


Message édité par begin le 13-11-2009 à 15:45:13
Reply

Marsh Posté le 13-11-2009 à 16:04:51    

non, la bonne solution c'est de faire ce que t'as dit stealth35 : tu prépare le mail et son contenu en dehors de la boucle et après tu fais un boucle sur les adresses mails pour l'envoi


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed