variable en sortit de boucle

Eléphant du PHP | 108 Messages

21 juin 2006, 14:15

bonjour,

j'ai une requete qui recupere les emails dans ma base, et j'amerais les utiliser pour envoyer un mail donc j'aimerais formater les emails comme ca :
mais je n'arrive pas a creer une variable avec tous ces emails
$sel_mail = query('SELECT email FROM guestbook'); //or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
$nbre = num_rows($sel_mail);
echo $nbre;
for ($i=0;$i<$nbre;$i++)
while($data = mysql_fetch_array($sel_mail))
    {
    // on affiche les informations de l'enregistrement en cours
    $emails = $data['email'].', ';
    echo $emails;  // ICI OK tout s'affiche bien
    }
echo $emails; //MAIS ICI NON donc je ne peut pas recuperer cette variable en sorti de boucle
Merci a tous ceux qui pourront m'aider!

Mammouth du PHP | 1353 Messages

21 juin 2006, 14:19

Le probleme ne vient pas de la sortie de la boucle.

Par contre je ne comprend pas ce que fait ta boucle for et surtout il lui manque des accolades....

Ca devrait marcher comme ca :

$sel_mail = query('SELECT email FROM guestbook'); //or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement 
$nbre = num_rows($sel_mail); 
echo $nbre; 

while($data = mysql_fetch_array($sel_mail)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    $emails .= $data['email'].', '; 
    echo $emails;  // ICI OK tout s'affiche bien 
    } 
echo $emails; 
EDIT : probleme de concaténation aussi que je n avais pas vu :s
Modifié en dernier par guilt92 le 21 juin 2006, 14:22, modifié 2 fois.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 14:20

Le problème vient du fait que tu écrases à chaque fois le contenu de ta variable au lieu de le compléter :)
Quand tu affiches, il apparaissent bien les uns à la suite des autres, mais à la fin de ton while il ne te reste plus que le dernier dans ta variable :)
$emails = $emails . $data['email'].', ';
// ou
$emails.= $data['email'].', ';
Attention toutefois, à la fin de ta chaines tu auras une virgule en trop

Eléphant du PHP | 108 Messages

21 juin 2006, 14:24

Réponse S rapide precise, c'est comme ca que j'aime phpfrance :D .

et tout ca pour un malheureux point :?

pour guilt92, le for est un reste d'un autre essai de boucle :wink:

Merci a vous deux

Eléphant du PHP | 50 Messages

21 juin 2006, 15:12

J'ajouterais également qu'il faudrait déclarer $emails en dehors de la boucle while, sinon la variable n'existe que dans le-dit while.

Eléphant du PHP | 108 Messages

21 juin 2006, 15:14

Merci de t'inquieter pour moi Orni, mais je l'avais rajoute :)

POST RESOLU

Eléphant du PHP | 50 Messages

21 juin 2006, 15:17

Ca peut servir à d'autres Image

Mammouth du PHP | 1353 Messages

21 juin 2006, 15:41

J'ajouterais également qu'il faudrait déclarer $emails en dehors de la boucle while, sinon la variable n'existe que dans le-dit while.
Loin de moi l idée de susciter la polémique mais ca n'est pas vrai en php...

Le code par exemple :
<?php
$i=0;
while($i<10)
	{
	if(!isset($test)) $test="";
	$test.= "".$i;
    $i++;
	}
echo $test;
?>
fonctionne très bien...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 16:05

Polémiquons !!! :)

Juste une petite rectification : "ca n'est pas nécessaire en php"

Je vous l'accorde, la différence est faible, mais tant qu'à prendre des habitudes autant en prendre de bonnes dès le début et déclarer ses variables avant de les utiliser :)

Eléphant du PHP | 50 Messages

21 juin 2006, 16:57

Je vous l'accorde, la différence est faible, mais tant qu'à prendre des habitudes autant en prendre de bonnes dès le début et déclarer ses variables avant de les utiliser :)
+1 :lol:

lux
Eléphant du PHP | 372 Messages

05 nov. 2006, 14:31

Attention toutefois, à la fin de ta chaines tu auras une virgule en trop
Bonjour

Je cherche le moyen de me débarrasser de la dernière virgule ? Une idée comment je dois m'y prendre ?

Mammouth du PHP | 19672 Messages

05 nov. 2006, 14:43

à partir du résultat de strlen() tu peux définir une sortie sans le dernier caractère, exemple :
<?php
$chaine = "Une chaine quelconque se terminant par une virgule,";
/* On détermine le nombre de caractères de la chaine */
$long = strlen($chaine);
/* On recrée une chaine à partir de l'original moins le dernier caractère */
$sortie = substr($chaine, 0, ($long - 1));
/* On affiche le résultat */
echo("<p>". $sortie ."</p>");
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

05 nov. 2006, 14:50

ou alors une autre solution, c'est de ne pas la mettre du tout cette variable...
$sel_mail = query('SELECT email FROM guestbook'); //or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement 
$nbre = num_rows($sel_mail); 
echo $nbre; 
$i=0;
while($data = mysql_fetch_array($sel_mail)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    $emails .= ($i>0 ? ',' : '').$data['email']; 
    echo $emails;  // ICI OK tout s'affiche bien 
    $i++;
    } 
echo $emails;
bon c'est vrai que on rajoute une variable, une incrémentation, donc je sais pas ce qui est le plus optimisé, mais ça doit se tenir, après utilise la solution que tu comprend le mieu :wink:

lux
Eléphant du PHP | 372 Messages

05 nov. 2006, 15:25

J'aime bien la solution de Cyrano, l'autre marche aussi.

J'ai fait
($long - 2)
car j'ai ajouté un espace derrière la virgule, c'est sympa on peut donc moduler le truc facilement 8)


Merci beaucoup :wink:

Eléphant du PHP | 377 Messages

05 nov. 2006, 15:25

sinon, il y a aussi la solution de tout mettre dans un tableau et de faire un implode() sur le tout:
$sel_mail = query('SELECT email FROM guestbook'); //or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement  
$nbre = num_rows($sel_mail);  
echo $nbre;  

while($data = mysql_fetch_array($sel_mail))  
    {  
    // on affiche les informations de l'enregistrement en cours  
    $emails[]= $data['email'].', ';  
    }  
$sortie=implode(",",$emails);
echo $sortie;
ici, plus de probleme de virgule en trop ;)
Petit scarabée deviendra grand