echo = souci

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 21:09

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 :wink:

Mammouth du PHP | 19672 Messages

26 oct. 2006, 21:28

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().
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 21:31

attention, tu parles à un débutant de la mort qui tue là ...
j'ai pas bien tout compris.

Mammouth du PHP | 19672 Messages

26 oct. 2006, 21:43

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 21:53

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?

Mammouth du PHP | 19672 Messages

26 oct. 2006, 21:57

Je suppose que tu n'as pas essayé ce que j'ai suggéré ? :roll:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 21:58

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.

Mammouth du PHP | 19672 Messages

26 oct. 2006, 22:01

Ç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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 22:03

oui et y'à donc 16 champs diférents dont "min1"

Mammouth du PHP | 19672 Messages

26 oct. 2006, 22:05

un truc m'échappe : tu veux toutes les lignes de la colonne "min1" ou toutes les colonnes ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 22:21

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

Mammouth du PHP | 19672 Messages

26 oct. 2006, 22:26

alors ton code ne peut pas fonctionner puisque dans ta boucle while, tu ne récupères QUE la colonne mid1.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 22:29

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.

Eléphanteau du PHP | 40 Messages

26 oct. 2006, 22:31


Mammouth du PHP | 19672 Messages

27 oct. 2006, 05:20

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">&nbsp;</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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: