Lister les résultats d'une requête sql dans une variable

Math06
Invité n'ayant pas de compte PHPfrance

25 sept. 2010, 17:13

Bonjour,

Je possède un site en PHP et parmi mes pages l'une d'entre-elle permet au visiteur de remplir un formulaire de contact. Je souhaiterais qu'à l'envoi de ce formulaire, une liste d'adresses mails déjà présentes dans ma base de données serve de destinataire. J'ai donc essayé de concaténer mes adresses dans une variable $to en vain ... J'ai tenté plusieurs manips à travers des requetes sql + mysql_fetch ... sans succès.

Au mieux, j'arrive à obtenir la première adresse email en faisant ça :

Code : Tout sélectionner

$requete = mysql_query("SELECT mail from basemails"); $data=mysql_fetch_array($requete); echo"$data[0]";

Est-ce qu'une âme charitable pourrait m'apporter ses lumières ?

Merci d'avance !
Mathieu

Math06
Invité n'ayant pas de compte PHPfrance

25 sept. 2010, 17:14

Petite précision : l'idée étant que ma variable soit $to, il faudrait que les adresses soient séparées par des ";" .

Merci
Mathieu

ViPHP
ViPHP | 5462 Messages

25 sept. 2010, 17:21

faut faire une boucle pour les récupérer toutes
$requete = mysql_query("SELECT mail from basemails");
while($data=mysql_fetch_array($requete))
{
    echo"$data[0]";
}

Math06
Invité n'ayant pas de compte PHPfrance

25 sept. 2010, 19:49

Oui je suis ok avec cette idée, mais là ça ne fait que m'afficher côte à côte mes différentes adresses email, je ne vois pas comment après les mettre toutes ensemble dans un $to ...

Mathieu

ViPHP
xTG
ViPHP | 7331 Messages

25 sept. 2010, 20:08

C'est une question de concaténation de variables.
$to = "";
$requete = mysql_query("SELECT mail from basemails");
while($data=mysql_fetch_array($requete))
{
    if( !empty($to) )
        $to .= ";";
    $to .= "$data[0]";
}
echo $to;

Eléphant du PHP | 74 Messages

26 sept. 2010, 07:36

une version sans if
$sep = $to = "";
$requete = mysql_query("SELECT mail from basemails");
while($data=mysql_fetch_array($requete)){
    $to .= $sep.$data[0];
    $sep = ";";
}
echo $to;

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13238 Messages

26 sept. 2010, 09:09

Et hop, encore un niveau de lisibilité :
// Initialisation du tableau de destinataire
$to = array();
$requete = mysql_query("SELECT mail from basemails");
while($data=mysql_fetch_array($requete)){
    $to[] = $data[0];
}
// Joints les différents éléments du tableau en utilisant ';' comme glue.
echo implode(';', $to);
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Math06
Invité n'ayant pas de compte PHPfrance

29 sept. 2010, 21:57

Parfait merci beaucoup pour votre aide !

Mathieu

ViPHP
AB
ViPHP | 5818 Messages

29 sept. 2010, 22:32

J'aurais fait comme zeus parce qu'à chaque fois qu'on peut faire des tableaux, étant donné qu'il y a des milliards (enfin des milliards par rapport à javascript) de fonctions prévues pour les tableaux en php, c'est ensuite très facile à manipuler.

Par exemple, il se pourrait qu'une ligne ne retourne pas de mail auquel cas tu auras deux ;; successifs dans ta chaine. Pour supprimer des éléments vide d'un tableau il suffit d'employer array_filter donc il te suffit de rajouter cette fonction au code de zeus
// Initialisation du tableau de destinataire
$to = array();
$requete = mysql_query("SELECT mail from basemails");
while($data=mysql_fetch_array($requete)){
    $to[] = $data[0];
}
//Enlève les éléments vides
$to = array_filter($to);

// Joints les différents éléments du tableau en utilisant ';' comme glue.
echo implode(';', $to);
Mais tu pourrais choisir aussi de trier les mails par ordre alphabétique auquel cas tu pourrais utiliser natsort :
//Enlève les éléments vides
$to = array_filter($to);
//Tri par ordre alphabétique naturel
natsort($to);
// Joints les différents éléments du tableau en utilisant ';' comme glue.
echo implode(';', $to);
Enfin bon c'est pour l'exemple car d'un autre côté tu pourrais faire ces tris également dans ta requête.