Page 1 sur 2
variable en sortit de boucle
Posté : 21 juin 2006, 14:15
par sasg
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!
Posté : 21 juin 2006, 14:19
par guilt92
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
Posté : 21 juin 2006, 14:20
par Ryle
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
Posté : 21 juin 2006, 14:24
par sasg
Réponse S rapide precise, c'est comme ca que j'aime phpfrance

.
et tout ca pour un malheureux point
pour guilt92, le for est un reste d'un autre essai de boucle
Merci a vous deux
Posté : 21 juin 2006, 15:12
par Orni
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.
Posté : 21 juin 2006, 15:14
par sasg
Merci de t'inquieter pour moi Orni, mais je l'avais rajoute
POST RESOLU
Posté : 21 juin 2006, 15:17
par Orni
Ca peut servir à d'autres

Posté : 21 juin 2006, 15:41
par guilt92
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...
Posté : 21 juin 2006, 16:05
par Ryle
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

Posté : 21 juin 2006, 16:57
par Orni
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

Posté : 05 nov. 2006, 14:31
par lux
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 ?
Posté : 05 nov. 2006, 14:43
par Cyrano
à 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>");
?>
Posté : 05 nov. 2006, 14:50
par jojolapine
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

Posté : 05 nov. 2006, 15:25
par lux
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

Posté : 05 nov. 2006, 15:25
par Shrell
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
