PHP Résultat d'affichage

Résolu/Fermé
loutry06
Messages postés
11
Date d'inscription
samedi 10 août 2013
Statut
Membre
Dernière intervention
7 mars 2014
- 7 mars 2014 à 13:05
loutry06
Messages postés
11
Date d'inscription
samedi 10 août 2013
Statut
Membre
Dernière intervention
7 mars 2014
- 7 mars 2014 à 17:45
Bonjour à tous,
vous m'avez bien aidé a première fois et je reviens cette fois-ci avec un nouveau problème. Je vous explique.

j'ai lancé une page internet dédiée à des poupées (petites filles)
Celles-ci sont classées par collection, par nom, par vague, etc
(Ex : collect1, collect2, collect3 etc)
Donc on clique sur la collection voulue et toutes les poupées associées apparaissent
Une fois la page de la collection apparue, j'aimerais qu'elles soient ensuite classées par vague.
(ex : dans la collection 1, y a 2 vagues. Dans le bloc Vague 1, y a 4 poupées et le bloc vague 2, 2 poupées)

Mon problème ici.
j'arrive à avoir mon bloc 1 vague 1 avec mes poupées, mais pas l'affichage du 2 correctement.
C'est à dire par exemple que si la vague 2 n'existe pas, le titre Vague 2 reste et si je préenregistrement une Vague 3 vide dans ma base, pareil... bref... je perds mes longs cheveux.

Voici le code de mon bloc
<h3 align="center">Vague 1</h3>

<?php
$sqlpoupeeliste = "SELECT * FROM t_poupee, t_link_collection WHERE t_poupee.id_poupee = t_link_collection.id_poupee and t_link_collection.id_collection = $id AND t_poupee.actif_poupee = 'oui' AND t_poupee.id_vague = '1' ORDER BY t_link_collection.id_collection ASC";
$resultpoupeeliste = mysql_query( $sqlpoupeeliste, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
?>



<ul class="poupee">
<?php
while ($requetepoupeeliste = mysql_fetch_array($resultpoupeeliste))
{
echo "<li>";
echo "<a href='poupee-".OptimiseUrl($requetepoupeeliste['nom_poupee']).'-'.$requetepoupeeliste['id_poupee'].".html' title='".$requetepoupeeliste['nom_poupee']."'>;
echo "</li>";
}

?>
<div id="clear"></div>

</ul>

J'ai une table de jointure car les poupées peuvent faire partir de 2 collections.

Ca facile...

j'ai mis une condition avec le bloc 1
<?php 
$sqllinkvague = "SELECT * FROM t_link_vague, t_collection WHERE t_link_vague.id_collection = t_collection.id_collection AND t_collection.id_collection = $id";
$requetelinkvague = mysql_query( $sqllinkvague, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
$resultlinkvague = mysql_fetch_assoc( $requetelinkvague )
?>

<?php
if($resultlinkvague['id_vague'] == 1)
{

?>

avec une autre table de jointure, mais cette fois-ci entre ma collection et ma vague.
Je pense que ça pourrait apparaitre car l'idée me semble correcte, mais le If pose souci car si 1 existe, le 2 n'a pas besoin d'apparaitre. Du coup, c'est pour ça que mon bloc vague n'apparait pas...

<?php 
if($resultlinkvague['id_vague'] == 1)
{

?>

<h3 align="center">Vague 1</h3>

<?php
$sqlpoupeeliste = "SELECT * FROM t_poupee, t_link_collection WHERE t_poupee.id_poupee = t_link_collection.id_poupee and t_link_collection.id_collection = $id AND t_poupee.actif_poupee = 'oui' AND t_poupee.id_vague = '1' ORDER BY t_link_collection.id_collection ASC";
$resultpoupeeliste = mysql_query( $sqlpoupeeliste, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
?>



<ul class="poupee">
(... coupe coupé)

</ul>

<?php

}

else if($resultlinkvague['id_vague'] == 2)

{
?>

<p align="center">Vague 2</p>

<?php
$sqlpoupeeliste = "SELECT * FROM t_poupee, t_link_collection WHERE t_poupee.id_poupee = t_link_collection.id_poupee and t_link_collection.id_collection = $id AND t_poupee.actif_poupee = 'oui' AND t_poupee.id_vague = '2' ORDER BY t_link_collection.id_collection ASC";
$resultpoupeeliste = mysql_query( $sqlpoupeeliste, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
?>



<ul class="poupee">
<?php
while ($requetepoupeeliste = mysql_fetch_array($resultpoupeeliste))
{...


Pouvez-vous m'aider svp à trouver une solution efficace pour contourner ce souci d'affichage. Merci d'avance de votre prochaine aide.

4 réponses

Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 005
7 mars 2014 à 13:48
Bonjour,

Si je comprends bien, tu veux afficher systématiquement toutes les vagues ?
Dans ce cas, pourquoi ne pas simplement faire une seule requête, triée par vague, et lors de l'affichage, rajouter <p>Vague N</p> à chaque fois que tu changes de vague ?

Xavier
0
loutry06
Messages postés
11
Date d'inscription
samedi 10 août 2013
Statut
Membre
Dernière intervention
7 mars 2014

7 mars 2014 à 15:02
Coucou xavier,
oui je voudrais afficher toutes mes vagues.
Mais pour les faire s'afficher comment faire ? Car je veux un titre à mon bloc genre : vague 1, vague 2, etc.

Y a 3 paramètres à prendre en compte.
La collection
Le nombre de vagues associé à CETTE collection
Les poupées associées à CETTE vague qui sont issues de CETTE collection.

Je m'y perds avec le code car je ne vois pas :'(
Merci d'avance
0
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 005
Modifié par Reivax962 le 7/03/2014 à 15:26
OK, alors je te propose un truc de ce genre :
<?php
$sqlpoupeeliste = "SELECT * FROM t_poupee, t_link_collection WHERE t_poupee.id_poupee = t_link_collection.id_poupee and t_link_collection.id_collection = $id AND t_poupee.actif_poupee = 'oui' ORDER BY t_poupee.id_vague ASC";
$resultpoupeeliste = mysql_query( $sqlpoupeeliste, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );

$vague_courante = false;
$premiere_vague = true;
while ($requetepoupeeliste = mysql_fetch_array($resultpoupeeliste))
{
 $id_vague = $requetepoupeeliste['id_vague'];

 if ($id_vague !== $vague_courante)
  // On change de vague :
  // 1 - Si on n'est plus sur la première vague, on ferme la vague précédente
  // 2 - On ouvre la nouvelle vague
  // 3 - On indique que la nouvelle vague devient la vague courante.
 {
  if (!$premiere_vague)
  {
   echo '</ul>';
   echo '<div id="clear"></div>';
  }
  echo "<h3 align='center'>Vague $id_vague</h3><ul class='poupee'>";
  $vague_courante = $id_vague;
 }
 $premiere_vague = false;

 echo "<li>";
 echo "<a href='poupee-".OptimiseUrl($requetepoupeeliste['nom_poupee']).'-'.$requetepoupeeliste['id_poupee'].".html' title='".$requetepoupeeliste['nom_poupee']."'>";
 echo "</li>";
}
if (!$premiere_vague)
 echo "</ul>"; // Et pour finir on ferme la dernière vague

?>


Le principe : on récupère toutes les poupées, quelle que soit leur vague, en une seule requête. On les trie quand même par vague (sinon ça ne marchera pas !)
Ensuite, on les affiche une à une comme tu le faisais, en vérifiant à chaque fois si on a changé de vague. Le cas échéant, on ouvre la nouvelle vague.

Xavier
0
loutry06
Messages postés
11
Date d'inscription
samedi 10 août 2013
Statut
Membre
Dernière intervention
7 mars 2014

7 mars 2014 à 17:45
Xavier que dire de plus que merci de ta grande aide :)
c'est génial :)
c'est pile poil ce que je voulais :)
Je vais pouvoir continuer ma page grâce à toi.
Merci encore et encore.
0