Boucles récalcitrantes

Fermé
Daniel - Modifié le 11 déc. 2020 à 16:18
jordane45 Messages postés 38217 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 juillet 2024 - 11 déc. 2020 à 17:39
Bonjour,

Je rencontre un soucis avec mon code suivant qui est destiné à envoyé par mail les identifiants à chaque destinataire.
Ma requête se déroule bien, je récupère les données souhaitées dans un tableau. C'est au niveau de la boucle que cela merdouille.
Si j'utilise la boucle foreach (celle actuellement dans le code en neutralisant la partie entre les commentaires), j'ai bien chaque groupe de données (Login, Mdp, Mail) pour l'ensemble des enregistrements qui s'affiche comme demandé mais seul le premier mail est envoyé au destinataire et en CCI.
Si j'utilise la boucle for avec la variable $i et $i++, j'ai bien la variable $i incrémentée mais c'est toujours avec l'affichage du même groupe (Login, mdp, mail) correspondant au dernier enregistrement. Et c'est seulement ce mail qui est envoyé ainsi qu'au CCI.

La procédure de debug php ne signale aucune erreur. Je suppose que c'est la structure du code qui n'est pas bonne mais mon ignardise ne me permet pas de savoir pourquoi et comment le corriger.

<?php

  //activation de l'affichage des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
//  echo "Test  <br>";

     
    //on inclut le fichier de connexion à la bdd
  require_once "../secure/cnxBdd.php";    


//Liste des Logins, mots de passe et mails
  $sql = 'SELECT Login, Mdp_Clair, Mail FROM Identifiants_CRULM where Mail != ""';
  try{
    $table = $bdd->prepare($sql);
    $table->execute();
    $table_bdd = $table->fetchAll();//On stocke le résultat de la requête dans un array
  }catch(Exception $e){
    echo "Erreur : " . $e->getMessage();
  }
 
        //Donne un tableau avec toutes les variables reçues
/*
        echo "<pre>";
        print_r($table_bdd);
        echo "</pre>";
*/
        
 //récupération PROPRE des variables AVANT de les utiliser 
 foreach ($table_bdd as $K=>$V){
      $MdpClair = $V['Mdp_Clair'];
      $Login = $V['Login'];
   $Mail=$V['Mail'];
//début neutralisation avec /* de la boucle foreach pour passer sur for $i
 }

// Compte le nombre de lignes reçues 
$nblignes = count($table_bdd);
// echo $nblignes;


// Boucle sur chaque lgne 
for ($i=1; $i<=$nblignes; $i++){

echo $i;
// fin de  neutralisation de la boucle foreach avec */
echo $Mail;
echo $Login;
echo $MdpClair;

//Envoi des mails pour donner les identifiants
    $to = $Mail; 

    $from = '***@***';

    $subject = 'Sujet blabla';
 
 $message = '
    <!doctype html>
    <html>
    <body>
                <br>
    Blabla  ...avec les identifiants suivants.
    <br>
    Login : '.$Login.'
    <br>
    Mot de passe : '.$MdpClair.'
    <br>
                 Blabla
       <br>
 </body>
 </html>
 ';
 $message = wordwrap($message, 70, "\r\n");

    $headers[] = 'From:' . $from;
    $headers[] = 'MIME-Version: 1.0';
    $headers[] = 'Content-type: text/html; charset=iso-8859-1';
 $headers[] = 'Bcc: ***@***';

    mail($to, $subject, $message, implode("\r\n", $headers));
 
    echo 'L\'email a été envoyé.<br>';
    
}

?>
</body>
</html>



Configuration: Windows / Firefox 83.0

3 réponses

jordane45 Messages postés 38217 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 juillet 2024 4 680
11 déc. 2020 à 16:51
Bonjour,

Tout simplement par ce que l'envoi du mail.. doit être mis DANS la boucle....
Que ce soit celle du foreach.. ou de l'autre...


0
Bonjour Jordane45,

L'envoi du mail c'est bien avec la ligne
 mail($to, $subject, $message, implode("\r\n", $headers));

elle est dans la boucle.
Du moins il me semble bien. La boucle for commence en ligne 45 et fini en 87. Non ?
0
jordane45 Messages postés 38217 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 juillet 2024 4 680
Modifié le 11 déc. 2020 à 17:39
<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//  echo "Test  <br>";
//on inclut le fichier de connexion à la bdd
require_once "../secure/cnxBdd.php";


//Liste des Logins, mots de passe et mails
$sql = 'SELECT Login, Mdp_Clair, Mail FROM Identifiants_CRULM where Mail != ""';
try {
  $table = $bdd->prepare($sql);
  $table->execute();
  $table_bdd = $table->fetchAll(); //On stocke le résultat de la requête dans un array
} catch (Exception $e) {
  echo "Erreur : " . $e->getMessage();
}


$from = '***@***';
$headers[] = 'From:' . $from;
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
$headers[] = 'Bcc: ***@***';

foreach ($table_bdd as $K => $V) {
  $MdpClair = $V['Mdp_Clair'];
  $Login = $V['Login'];
  $Mail = $V['Mail'];

  echo "<br><pre>";
  echo $Mail;
  echo $Login;
  echo $MdpClair;
  echo "</pre>";

//Envoi des mails pour donner les identifiants
  $subject = 'Sujet blabla';

  $message = '
      <!doctype html>
      <html>
        <body>
          <br>
          Blabla  ...avec les identifiants suivants.
          <br>
          Login : ' . $Login . '
          <br>
          Mot de passe : ' . $MdpClair . '
          <br>
           Blabla
          <br>
     </body>
   </html>
   ';
  $message = wordwrap($message, 70, "\r\n");

  if(!mail($Mail, $subject, $message, implode("\r\n", $headers))){
    echo "<br>Erreur lors de l'envoi du mail à ".$to;
  }else{
    echo "<br>L'email a été envoyé.";
  }
}
?>



0