Page 1 sur 1
echo = souci
Posté : 26 oct. 2006, 21:09
par Jeyz
Bonjour.
J'ai un probleme, le premier echo s'affiche, mais pas lesecond (en milieu de page)
http://www.lephpfacile.com/wall/wall.php?id=3335
Si quelqu'un sait d'ou vient le probleme?
Merci

Posté : 26 oct. 2006, 21:28
par Cyrano
tu utilises deux fois la même boucle, mais sans faire un reset sur le tableau avant de lancer la seconde tournée, donc tu n'obtiens rien.
Méthode : faire une seule boucle sur le retour de MySQL et stocker ça dans un tableau indexé. Ensuite, utiliser ce tableau à chaque fois que tu veux t'en servir dans des boucles for().
re
Posté : 26 oct. 2006, 21:31
par Jeyz
attention, tu parles à un débutant de la mort qui tue là ...
j'ai pas bien tout compris.
Posté : 26 oct. 2006, 21:43
par Cyrano
Ok, alors on va reprendre : tu utilises une boucle while() pour afficher tes données. Le problème, c'est que tu utilises deux fois la même ressource dans deux boucles successives. La seconde n'affiche rien parce que le pointeur a été amené à la fin lors de la première boucle, mais pas ramené au début pour la seconde. Donc on simplifie un peu. (Je ne crois pas qu'un reset fonctionne sur une ressource, à tester quand j'aurai 5mn)
-1- on crée une vvariable en tableau pour stocker le résultat de MySQL :
<?php
//...
$donnees = array();
while($data = mysql_fetch_assoc($req))
{
$donnees[] = $data['min1'];
}
//...
?>
-2- à ce stade, tu peux fermer la connexion, tes données sont stockées dans $données qui est alors un tableau indexé.
Pour afficher, tu fais alors une boucle for, mais avant ça, tu compte le nombre d'éléments :
<?php
//...
/* On compte */
$nb = count($donnees);
/* On affiche */
for($i = 0; $i < $nb; $i++)
{
echo($donnees[$i]);
}
//...
?>
Et tu peux refaire la même boucle autant de fois que tu voudras par la suite, ça s'affichera normalement.
Posté : 26 oct. 2006, 21:53
par Jeyz
d'accord d'accord mais j'ai 16 données différentes à afficher, en l'occurence si j'veux afficher min1 et plus loin max1 ça donne quoi?
Posté : 26 oct. 2006, 21:57
par Cyrano
Je suppose que tu n'as pas essayé ce que j'ai suggéré ?

re
Posté : 26 oct. 2006, 21:58
par Jeyz
si si
quandje mets ça
Code : Tout sélectionner
<?php
//...
/* On compte */
$nb = count($donnees);
/* On affiche */
for($i = 0; $i < $nb; $i++)
{
echo($donnees[$i]);
}
//...
?>
ça affiche min 1 à chaque fois..
dsl je suis vraiment un débutant.
Posté : 26 oct. 2006, 22:01
par Cyrano
Ça, je peux pas deviner : ta requête :
$sql = 'SELECT * FROM tbl_tarifs WHERE hotel="portjacquet"';
Je ne peux pas savoir le nom des champs de ta table : as-tu bien un champ "min1" dans cette table ?
Posté : 26 oct. 2006, 22:03
par Jeyz
oui et y'à donc 16 champs diférents dont "min1"
Posté : 26 oct. 2006, 22:05
par Cyrano
un truc m'échappe : tu veux toutes les lignes de la colonne "min1" ou toutes les colonnes ?
Posté : 26 oct. 2006, 22:21
par Jeyz
j'veux juste que y'ait une accès à la base dans ma page php (parsemée de html)
puis que, au sein de ce htm, je puisse inclure des données php (qui viennent de la base de données) ici et là.
ça donnerait ça si tu veux :
htm
accès basse de données
htm
htm etc
php>affichage d'une donnée provenant de la db
htm
htm htm
php>affichage d'une donnée provenant de la db
fermeture de la db
en fait j'ai 16 champs différents à afficher
(j'espere etre clair sinon laisse couler c'est pas grave
Posté : 26 oct. 2006, 22:26
par Cyrano
alors ton code ne peut pas fonctionner puisque dans ta boucle while, tu ne récupères QUE la colonne mid1.
Posté : 26 oct. 2006, 22:29
par Jeyz
j'ai trouvé une solution à mon probleme, je doute que ça soit tres catholique mais bon..ça marche.
j'te paste le code tu vas voir d'ou je voulais en venir.
Posté : 26 oct. 2006, 22:31
par Jeyz
Posté : 27 oct. 2006, 05:20
par Cyrano
Effectivement, pour ce qui est d'être "pas catholique", c'est une curiosité. On va simplifier un peu ça, je te mets juste ton tableau revu et corrigé :
<!-- ... -->
<table width="350" height="60" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="50" height="20" bgcolor="#197FB2"> </td>
<td width="50" height="20" align="center" bgcolor="#006699" class="texteblanc">1 pers </td>
<td width="50" height="20" align="center" bgcolor="#3399CC" class="texteblanc">2 pers </td>
<td width="50" height="20" align="center" bgcolor="#006699" class="texteblanc">3 pers </td>
<td width="50" height="20" align="center" bgcolor="#3399CC" class="texteblanc">4 pers </td>
<td width="50" height="20" align="center" bgcolor="#006699" class="texteblanc">1/2 p. </td>
<td width="50" height="20" align="center" bgcolor="#3399CC" class="texteblanc">Pension</td>
</tr>
<?php
// on se connecte à MySQL
$base = mysql_connect ('*****', '******', '********');
// on sélectionne la base
mysql_select_db ('*******', $base);
// on crée la requête SQL
$sql = 'SELECT * FROM tbl_******* WHERE hotel="portjacquet"';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
?>
<tr>
<td width="50" height="20" align="center" bgcolor="#3399CC" class="texteblanc">min</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['min1']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['min2']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['min3']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['min4']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['mindp']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['minpension']; ?></span>
</td>
</tr>
<tr>
<td width="50" height="20" align="center" bgcolor="#3399CC" class="texteblanc">max</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['max1']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['max2'];?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['max3']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['max4']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['maxdp']; ?></span>
</td>
<td width="50" height="20" align="center" background="../images/tar-cel.gif" class="textenoir">
<span class="Style56"><?php echo $data['maxpension']; ?></span>
</td>
</tr>
<?php
}
?>
</table>
Une seule exécution de la requête et une seule boucle.