2010-11-12 8 views
1

J'essaie de comprendre comment placer un résultat de requête mysql dans un tableau accessible en dehors de la boucle while. Est-ce possible?PHP - comment mettre les résultats de la requête dans un tableau?

Mon code de test avec lequel je joue est ci-dessous. Je souhaite envoyer un e-mail aux adresses électroniques du tableau sans créer le code de courrier électronique dans la boucle while. De cette façon, je peux injecter le résultat du tableau dans le champ BCC et tout sort en même temps en utilisant la fonction mail() plutôt que d'ouvrir une nouvelle connexion smtp pour chaque email - ou du moins je pense.

<?php 
if(isset($_POST['btnSendToSelected']) && isset($_POST['checked'])) 
{ 
    $checked = array_map('intval',$_POST['checked']); 
    $email_list = implode(", ", $checked); 

    $get_emails = mysqli_query($conn, "SELECT UserName, Email FROM users WHERE UserId IN ($email_list)") 
    or die($dataaccess_error); 

    while($row = mysqli_fetch_array($get_emails)) 
    { 
     $emails = array($row['Email']); 
     $emails_array = implode(", ", $emails); 
    } 
     // send the email here outside the while loop... 
} 
elseif(isset($_POST['btnSendToSelected']) && !isset($_POST['checked'])) 
{ 
    $msg = $msg_error; 
} 
?> 

Répondre

2
$emails_array = array(); 

while($row = mysqli_fetch_array($get_emails)) { 
    $emails_array[] = explode(", ", $row['Email']); 
} 

foreach($emails_array as $value) { 
    mail_function($value); 
} 

Ou

while($row = mysqli_fetch_array($get_emails)) { 
    foreach(explode(", ", $row['Email']) as $value) { 
    mail_function($value); 
    } 
} 
+1

Cette solution répond à la question posée. Je ne suis toujours pas sûr que ce soit la bonne solution pour l'objectif final ... – Schenz

+0

Ajout d'une version imbriquée pour l'exhaustivité. – arby

1

Le courrier électronique est toujours stocké dans la variable $ row. Et $ email ... Vous pouvez aussi le faire:

while($row = mysqli_fetch_array($get_emails)) 
{ 
    mail($row['Email'],$subject,$message,$headers); 
} 

Si vous souhaitez stocker les e-mails dans un tableau:

$emails = array(); 
while($row = mysqli_fetch_array($get_emails)) 
{ 
    $emails[] = $row['Email']; 
} 
+0

mais quand je fais l'écho sur le tableau, il montre uniquement une adresse e-mail unique. si je fais écho à l'intérieur de la boucle, je les reçois tous. –

+0

Vérifiez cette modification ... cela remplit un tableau avec les emails. Vous pouvez y accéder en faisant une boucle dans le tableau ou en les appelant par leur clé de tableau numérique. – KeatsKelleher

+0

ouais, aucun d'entre eux ne semble fonctionner pour moi. désolé je ne suis pas sûr si je le fais bien. –

4
$emails_array = implode(", ", $emails); 

Vous pouvez explode cette ligne où vous voulez obtenir votre tableau.

// EDIT

On dirait que toute la boucle while peut être manipulé un peu mieux. Je suggère

$emails = array(); 
while($row = mysqli_fetch_array($get_emails)) 
    { 
     $emails[] = $row['Email']."|||".$row['Username']; 
    } 

Ensuite, vous avez toutes les informations dans le tableau $emails en une seule fois.

Le ||| est juste un délimiteur aléatoire que j'ai choisi, vous pouvez utiliser une virgule ou quelque chose. Sinon, vous pouvez faire cette entrée un tableau 2-d, quelque chose comme

$emails[][0] = $row['Email']; 
$emails[][1] = $row['Username']; 

... bien que le code spécifique ne fonctionnera probablement pas, l'idée sera. Ensuite, accéder simplement comme ceci:

echo "Username 99 is ".$emails[99][1]; 
+0

Était sur le point de poster la même chose avec un addendum - après la boucle, vous pouvez créer la liste des adresses e-mail pour le champ BCC en utilisant $ emailList = implode (',', $ emails); ' – Phil

+0

Merci d'avoir pris la grande route et ne pas dupliquer mon message. Cela s'est passé (pour moi) beaucoup ces derniers temps, donc j'apprécie vraiment la chance d'être + 1. :) – Ben

Questions connexes