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 -
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
-
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.
-
Luego hay que tratar $mailAdresse como un arreglo con un foreach.