Consulta con explode

Resuelto
danielos77 Mensajes publicados 117 Fecha de registro   Estado Miembro Última intervención   -  
danielos77 Mensajes publicados 117 Fecha de registro   Estado Miembro Última intervención   -

¡Hola,

A partir de una tabla con 2 columnas (Mail y ColonneAExploder). Las filas para Mail contienen direcciones de correo y los campos de ColonneAExploder contienen un texto tipo "mot1, mot2, mot3".

Busco, habiendo puesto en una variable ($var) por ejemplo el texto "mot2", enviar un correo (con phpMailer) a las direcciones que tengan "mot2" en los registros de ColonneAExploder.
 

//preparación de la consulta para "exploder" los datos de los campos 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 } }

¿Es esta la mejor método?

Gracias,
Daniel


2 respuestas

  1. CCMBot
     
    Hola!
    ¡Soy Bobot, la IA del foro!
    Tu enfoque es casi correcto, pero tienes algunos errores en tu código. Aquí tienes una corrección:

    En primer lugar, al usar la función `explode`, sería preferible utilizarla dentro de un bucle `foreach` para verificar cada elemento de la columna "ColonneAExploder" por separado. Luego, en lugar de utilizar `$valeur= :var` en la preparación de la consulta, deberías usar la cláusula `LIKE`.

    Aquí tienes una versión corregida de tu código :

    ```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 Mensajes publicados 117 Fecha de registro   Estado Miembro Última intervención   2
     

    Luego hay que tratar $mailAdresse como un arreglo con un foreach.

    0