Requête avec explode

Résolu
danielos77 Messages postés 115 Date d'inscription   Statut Membre Dernière intervention   -  
danielos77 Messages postés 115 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

A partir d'une Table ayant 2 colonnes (Mail et ColonneAExploder). Les lignes pour Mail contiennent des adresses mail et les champs de ColonneAExploder du texte type "mot1, mot2, mot3".

Je cherche en ayant mis dans une variable ($var) par exemple le texte "mot2", envoyer un mail (avec phpMailer) aux adresses ayant "mot2" dans les enregistrements de ColonneAExploder.
 

//préparation de la requête pour "exploder" les données des champs ColonneAExploder
$req1=$bdd->prepare ("SELECT Mail, ColonneAExploder FROM Table") ;
$req1->execute();
$resultat = $req1->fetchall();
 if (!empty($resultat)){
   foreach ($resultat as $ChampsAExploder){
   $valeur=explode (", ", ChampsAExploder);
   Echo 'valeur : '.$valeur.'<br>';
   }

$req2=$bdd->prepare ("Select mail from Table where $valeur= :var
BindValue (':var', $var);
Execute ();
$result -> fetch;
   if (!empty($result)){
    foreach ($result as $MailAdresse){
    Send mail avec phpMailer en mettant $MailAdresse comme destinataire
    }
 }

Est-ce la bonne méthode ?

Merci,
Daniel


Windows / Firefox 153.0

2 réponses

  1. CCMBot
     
    Bonjour !
    C'est Bobot, l'IA du forum !
    Votre approche est presque correcte, mais vous avez quelques erreurs dans votre code. Voici une correction:

    Tout d'abord, lors de l'utilisation de la fonction `explode`, il serait préférable de l'utiliser dans une boucle `foreach` afin de vérifier chaque élément de la colonne "ColonneAExploder" séparément. Ensuite, au lieu d'utiliser `$valeur= :var` dans la préparation de la requête, vous devriez utiliser la clause `LIKE`.

    Voici une version corrigée de votre code :

    ```PHP
    $req1 = $bdd->prepare("SELECT Mail, ColonneAExploder FROM Table");
    $req1->execute();
    $resultat = $req1->fetchAll();

    if (!empty($resultat)){
    foreach ($resultat as $champs){
    $valeurs = explode(", ", $champs['ColonneAExploder']);
    if (in_array($var, $valeurs)){
    $req2 = $bdd->prepare("SELECT mail FROM Table WHERE ColonneAExploder LIKE :var");
    $req2->bindValue(':var', '%'.$var.'%');
    $req2->execute();
    $result = $req2->fetchAll();
    if (!empty($result)){
    foreach ($result as $mailAdresse){
    // Envoyez un email avec phpMailer en mettant $mailAdresse['mail'] comme destinataire
    }
    }
    }
    }
    }
    ```

    Dans ce code, j'utilise la fonction `in_array` pour vérifier si la variable `$var` se trouve dans le tableau `$valeurs`, qui est le résultat de l'opération `explode`. Si c'est le cas, j'effectue une autre requête pour obtenir les adresses e-mail associées à la valeur de `$var`. J'utilise ensuite ces adresses pour envoyer des e-mails avec phpMailer.

    0
  2. danielos77 Messages postés 115 Date d'inscription   Statut Membre Dernière intervention   2
     

    Il faut ensuite traiter $mailAdresse comme étant un tableau avec un foreach.
     

    0