IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Noob: problème région répétée dans une autre


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Noob: problème région répétée dans une autre
    Bonjour, je suis point du tout compétent en php mais il se trouve que je suis contraint de créer un site (ce qui n'est pas plus mon métier) ou j'en ai besoin.
    Et en bon noob, j'utilise dreamweaver...


    Bref, j'ai une question sur un problème très précis.

    Je suis en train de réaliser un catalogue sous forme de liste

    j'ai deux tables

    une table artiste avec id et nom
    une table albums avec id, nom et id_artist

    J'ai un <ul> artistes (avec un <li>nom</li> inside)
    puis un <ul> albums correspondant à chaque artiste (et pareil qu'au dessus pour le li, donc)
    (et au final j'aurais un <ul> chansons correspondant à chaque album)

    Je récupère mes données dans la base de données, et à priori, les tests de chacune des requêtes me donne exactement ce que je veux.
    Quel souci alors?

    L'e <li> artiste est dans une région répétée
    Puis l'ul albums aussi, donc pour que chaque artiste renvoie à sa liste d'albums

    le système fonctionne.

    Sauf qu'il ne m'affiche que la première ligne correspondant à l'id artiste
    dans mon <li>nom albums</li>
    et que je ne sais pas comment lui dire de répétéer cette région jusqu'à ce qu'il n'a plus d'entrées

    Dreamweaver me fait savoir gentiment que ce n'est pas possible de répétéer une région dans une autre région enfin bref....


    Mon souci, c'est donc de pouvoir lui faire afficher tous les albums correspondant à un artiste...


    J'ai essayé de faire assez propre pour le code, pour que les gens voient bien le système avec un exemple pas généré par la base de données mais écrit (the beatles et leur liste d'albums correspondants)

    donc ça donne ça pour mon body (y a une toolbar dont on se fout au début aussi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <body>
     
        <div class="toolbar">
            <h1 id="pageTitle"></h1>
            <a id="backButton" class="button" href="#"></a>
            <a class="button" href="#searchForm">Search</a>
        </div>
     
     
        <ul id="artists" title="Artists" selected="true">
     
            <li><a href="#TheBeatles">The Beatles</a></li>
     
     
     
            <?php do { ?>
            <li><a href="#<?php echo $row_Recordset2['id_artist']; ?>"><?php echo $row_Recordset2['artist_name']; ?></a></li>
              <?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); ?>
     
     
     
     
     
    </ul>
        <ul id="TheBeatles" title="The Beatles">
            <li><a href="#songs">Abbey Road</a></li>
            <li><a href="#songs">Help!</a></li>
     
        </ul>
     
     
     
     
     
         <?php do { ?>
         <ul id="<?php echo $row_Recordset3['id_artist']; ?>" title="<?php echo $row_Recordset3['artist_name']; ?>"> 
     
     
           <li>
           <a href="#<?php echo $row_Recordset3['id_album']; ?>">
    		 <?php echo $row_Recordset3['album_name']; ?></a>
           </li>       
     
      </ul>
           <?php } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3)); ?>
     
           </body>
    J'ai viré tout ce qui ne correspondait pas à mon souci...
    Bref c'est mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <li>
           <a href="#<?php echo $row_Recordset3['id_album']; ?>">
    		 <?php echo $row_Recordset3['album_name']; ?></a>
           </li>
    que je souhaiterais répéter.

    Pour le moment j'ai fait une base de donnée de test

    pour recordset2 en test, j'ai ça:
    ligne 1: record=1 ; id_artist=1; artist_name=pim
    ligne 2: record=2 ; id_artist=2; artist_name=boum

    et en recordset3 en test, j'ai ça:
    ligne 1: record=1 ; id_artist=1; artist_name=pim; album_name=albumpim id_album=1
    ligne 2: record=2 ; id_artist=2; artist_name=boum; album name=albumboum1 id_album=2
    ligne 2: record=3 ; id_artist=2; artist_name=boum; album name=albumboum2 id_album=3

    mais donc dans mon <ul> album quand je sélectionne l'artiste boum, il ne m'affiche que la première ligne, donc l'albumboum1, mais s'arrête là...

    Je pense que c'est pas un souci de bdd même si je suis probablement pas assez compétent pour le savoir mais du coup je ne sais pas quoi faire et je ne trouve rien sur ce thème nulle part (ou alors rédigé d'une telle façon que je ne suis pas capable de retrouver l'article via google- ou ya que des réponses me renvoyant à expert-exchanges donc que je peux pas consulter)

    Au cas où, je poste mon code en début de page néanmoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
     
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
     
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
     
    mysql_select_db($database_mysql, $mysql);
    $query_Recordset1 = "SELECT ch_id, ch_name FROM sons";
    $Recordset1 = mysql_query($query_Recordset1, $mysql) or die(mysql_error());
    $row_Recordset1 = mysql_fetch_assoc($Recordset1);
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);
     
    mysql_select_db($database_mysql, $mysql);
    $query_Recordset2 = "SELECT * FROM artists";
    $Recordset2 = mysql_query($query_Recordset2, $mysql) or die(mysql_error());
    $row_Recordset2 = mysql_fetch_assoc($Recordset2);
    $totalRows_Recordset2 = mysql_num_rows($Recordset2);
     
    $maxRows_Recordset3 = 10;
    $pageNum_Recordset3 = 0;
    if (isset($_GET['pageNum_Recordset3'])) {
      $pageNum_Recordset3 = $_GET['pageNum_Recordset3'];
    }
    $startRow_Recordset3 = $pageNum_Recordset3 * $maxRows_Recordset3;
     
    mysql_select_db($database_mysql, $mysql);
    $query_Recordset3 = "SELECT artists.id_artist, artists.artist_name, albums.album_name, albums.id_album FROM albums, artists WHERE artists.id_artist = albums.id_artist ORDER BY albums.id_artist, albums.album_name  ";
    $query_limit_Recordset3 = sprintf("%s LIMIT %d, %d", $query_Recordset3, $startRow_Recordset3, $maxRows_Recordset3);
    $Recordset3 = mysql_query($query_limit_Recordset3, $mysql) or die(mysql_error());
    $row_Recordset3 = mysql_fetch_assoc($Recordset3);
     
    if (isset($_GET['totalRows_Recordset3'])) {
      $totalRows_Recordset3 = $_GET['totalRows_Recordset3'];
    } else {
      $all_Recordset3 = mysql_query($query_Recordset3);
      $totalRows_Recordset3 = mysql_num_rows($all_Recordset3);
    }
    $totalPages_Recordset3 = ceil($totalRows_Recordset3/$maxRows_Recordset3)-1;
    ?>
    Si quelqu'un pourrait m'aider, ça serait super cool.

    Merci d'avance.

    edit: (le tout est géré via un js et un css pour la navigation de ul en ul avec un magnifique slider qu'il est beau mais il marche très bien donc laissons le tranquille lui)

    edit2: si c'est une impasse, je suis néanmoins ouvert à tout système de navigation me permettant de faire une navigation à peu près lisible pour avoir accès au catalogue (genre pas 50 pages générées par bdd ou un tree de 5000 m), dans l'idéal via des colonnes liées ou un miller columns... Que ce soit géré en javascript ou via sql, c'est pas le souci, je veux juste un truc qui fonctionne et qui m'oblige pas à tout écrire en html... Et même chose, aucun exemple présent sur le web sinon qui me posent exactement le même souci au même endroit ou des merdouilles ou tout est écrit en html (vu que j'ai près de 4000 morceaux à uploader, j'y tiens pas trop non plus)

    edit 3: et au kazoo, j'ai les droits des 4000 morceaux que j'uploade, donc pas de remarques de ce genre, merci (vu que j'ai pas posté que par ici et qu'autre part, la seule personne qui m'a répondu l'a fait sur ce thème en grand pourfendeur des droits d'auteur )

  2. #2
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Ton code génére deux lignes avec le même ID, avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php do { ?>
         <ul id="<?php echo $row_Recordset3['id_artist']; ?>" title="<?php echo $row_Recordset3['artist_name']; ?>"> 
     
     
           <li>
           <a href="#<?php echo $row_Recordset3['id_album']; ?>">
             <?php echo $row_Recordset3['album_name']; ?></a>
           </li>       
     
      </ul>
           <?php } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3)); ?>
    Ton ul est dans ta boucle, donc tu auras ceci au final à l'affichage :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <ul id="TheBeatles" title="The Beatles">
        <li><a href="#songs">Abbey Road</a></li>
    </ul>
    <ul id="TheBeatles" title="The Beatles">
        <li><a href="#songs">Help!</a></li>
    </ul>
    Sauf que tu n'en vois qu'un seul puisque le JS t'affiche le premier uniquement
    Essaies ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    $currentArtist = '';
    $firstLine = TRUE;
    do
    {
        if ($row_Recordset3['id_artist'] != $currentArtist) {
            if (!$firstLine)
            {
    ?>
                </ul>
    <?php
            }
    ?>
            <ul id="<?php echo $row_Recordset3['id_artist']; ?>" title="<?php echo $row_Recordset3['artist_name']; ?>"> 
    <?php
            $firstLine = FALSE;
            $row_Recordset3['id_artist'] = $currentArtist;
        }
    ?>
        <li><a href="#<?php echo $row_Recordset3['id_album']; ?>"><?php echo $row_Recordset3['album_name']; ?></a></li>       
    <?php
    }
    while ($row_Recordset3 = mysql_fetch_assoc($Recordset3));
    ?>
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

Discussions similaires

  1. Petit Problème d'une balise ancrée dans une autre
    Par stansoad0108 dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2008, 10h23
  2. Problème thread dans une autre classe
    Par Shypster dans le forum C#
    Réponses: 19
    Dernier message: 06/03/2008, 09h23
  3. Réponses: 2
    Dernier message: 14/06/2007, 17h52
  4. Réponses: 4
    Dernier message: 09/05/2007, 17h03
  5. Problème d'insertion d'une table dans une autre
    Par capitaine dans le forum Access
    Réponses: 5
    Dernier message: 26/09/2006, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo