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

PHP & Base de données Discussion :

Naviguer entre différents articles de la même catégorie


Sujet :

PHP & Base de données

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Naviguer entre différents articles de la même catégorie
    Bonjour tout le monde,

    Pour mon plaisir, je suis entrain de créer un site web marchand qui vendrais des motos.

    Sur mon site, les utilisateurs ont la possibilité de choisir une catégorie de moto et ensuite choisir de visualiser le détail d'un des articles de la catégorie choisit auparavant.
    Ce que je souhaite effectuer, c'est que dans la page détail de l'article, il puisse grâce à des boutons "suivant" et "précédent" naviguer entre les différents articles de la même catégorie.

    Explication de ce que j'ai essayé de faire :
    1) Mettre les différents ID des articles de la même catégorie dans un tableau.
    2) Afficher l'id précédent et/ou suivant en les récupérant dans le tableau.

    Voici le code PHP de la page Détail.php :
    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
    <?php
    	$art = $_GET["art"];
    	$detail_article = R_moto_neuve::detail_article($art);
    	while($ligne=mysql_fetch_array($detail_article)){ 
    		$coloris = explode(",", $ligne["ArtNeuf_coloris"]);
    		$categ = $ligne["Cat_code"];
    		$MonArt[] = array($ligne["ArtNeuf_marque"], $ligne["ArtNeuf_modele"], $ligne["ArtNeuf_cylindre"], $ligne["ArtNeuf_TypeMoteur"], $ligne["Cat_design"], $ligne["ArtNeuf_Technologie"], $ligne["ArtNeuf_Puissance"], $ligne["ArtNeuf_Couple"], $ligne["ArtNeuf_Transmission"], $ligne["ArtNeuf_VitesseMaxi"], $ligne["ArtNeuf_FreinAvant"], $ligne["ArtNeuf_FreinArriere"], $ligne["ArtNeuf_Reservoir"], $ligne["ArtNeuf_Poids"], $ligne["ArtNeuf_HauteurSelle"], $ligne["ArtNeuf_Empattement"], $ligne["ArtNeuf_prixHT"], $ligne["Ph_lien"], $ligne["ArtNeuf_id"], $ligne["Cat_code"], $ligne["ArtNeuf_EnStock"]);
    	}
    	
    	$photos_article = R_moto_neuve::Recuperer_3_photo($art);
    	$MesPhotos[] = array();
    	while($row=mysql_fetch_array($photos_article)){ 
    		$MesPhotos[] = array($row["Ph_lien"]);
    	}
    	
    	$photos_article = R_moto_neuve::Coloris_article($art);
    	$coloris = explode(",", $photos_article);
    	for($i=0;$i<Count($coloris);$i++){
    		$coloris_article = R_moto_neuve::Coloris($coloris[$i]);
    		if($coloris[$i]=="0")
    			$MesColoris = "Non";
    		else
    			$MesColoris[] = array($coloris_article);
    	}
    	
    	// Partie du code permettant de récupérer les id des différents articles de la catégorie.
    	$articles = R_moto_neuve::Recuperer_infos_articles($categ);
    	while($result=mysql_fetch_array($articles)){ 
    		$ListeArticle[] = array($result["ArtNeuf_id"]);
    	}
    
    	$nb_com = R_commentaire::Nombres_commentaire($art);
    	
    	include ("contenu/Vue/V_DetailMoto.php");
    ?>
    Voici le code de la visualisation des détails :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    <script type="text/javascript" src="contenu/js/detail_moto.js"></script>
    <link href="contenu/css/detail_moto.css" rel="stylesheet" type="text/css" media="screen" />
    <a href="Index.php?action=categorie&choix=<?php foreach ($MonArt as $art) echo $art[4]; ?>">
    	<img src="images_gabarit/icon_from_jimmac_musichall_cz_125.png" style="float:left; width:30px;" title="Retour"></img>
    </a>
    
    // Code permettant l'affichage de naviguer vers l'article précédent
    <a href="Index.php?action=detail_moto&art=<?php foreach ($ListeArticle as $key => $value) { echo $value[$key]; } ?>">
    	Précédent
    </a>
    // Code permettant l'affichage de naviguer vers l'article suivant
    <a href="#">
    	Suivant
    </a>
    
    
    
    <br />
    <div id="titre">Détail de la 
    <?php 
    	foreach ($MonArt as $art)
    	{
    		echo $art[0]." ".$art[1];
    ?>
    </div>
    
    <br>
    <table>
    	<input type="hidden" name="categ" value="<?php echo $art[19]; ?>"></input>
    	<input type="hidden" name="id_art" value="<?php echo $art[18]; ?>"></input>
    	<input type="hidden" name="acteur" value="<?php echo $_COOKIE["moto_28"]; ?>"></input>
    	<input type="hidden" name="nb_com" value="<?php echo $nb_com; ?>"></input>
    	<tr>
    		<td id="caracteristique_technique">
    			<span class="titre_detail">Catégorie</span> : 
    				<?php
    					echo $art[4];
    				?>
    			<br/>
    			<span class="titre_detail">Cylindre</span> : 
    				<?php
    						echo $art[2]." cm3";
    				?>
    			<br/>
    			<span class="titre_detail">Type moteur</span> :
    				<?php
    					echo $art[3];
    				?>
    			<br/>
    			<span class="titre_detail">Technologie</span> :
    				<?php
    					echo $art[5];
    				?>
    			<br/>
    			<span class="titre_detail">Puissance</span> :
    				<?php
    					echo $art[6];
    				?>
    			<br/>
    			<span class="titre_detail">Couple</span> :
    				<?php
    					echo $art[7];
    				?>
    			<br/>
    			<span class="titre_detail">Transmission</span> :
    				<?php
    					echo $art[8];
    				?>
    			<br/>
    			<span class="titre_detail">Vitesse Maxi.</span> :
    				<?php
    					echo $art[9];
    				?>
    			<br/>
    			<span class="titre_detail">Frein avant</span> :
    				<?php
    					echo $art[10];
    				?>
    			<br/>
    			<span class="titre_detail">Frein arrière</span> :
    				<?php
    					echo $art[11];
    				?>
    			<br/>
    			<span class="titre_detail">Réservoir</span> :
    				<?php
    					echo $art[12];
    				?>
    			<br/>
    			<span class="titre_detail">Poids</span> :
    				<?php
    					echo $art[13];
    				?>
    			<br/>
    			<span class="titre_detail">Hauteur de selle</span> :
    				<?php
    					echo $art[14];
    				?>
    			<br/>
    			<span class="titre_detail">Empattement</span> :
    				<?php
    					echo $art[15];
    					}
    				?>
    			<br/>
    			<span class="titre_detail">Coloris</span> :
    				<?php
    					if($MesColoris=="Non")
    						echo "Non renseignée";
    					else {
    						foreach ($MesColoris as $coloris)
    						{
    				?>
    							<img src="<?php echo $coloris[0]; ?>"></img>
    				<?php
    						}
    					}
    				?>
    					
    		</td>	
    		<td id="image">
    			<img src="<?php echo $art[17]; ?>" id="1" class="img_1"></img>
    	
    		<?php
    			$i = 2;
    			foreach ($MesPhotos as $photos)
    			{
    		?>
    				
    				<img src="<?php echo $photos[0]; ?>" id="<?php echo $i++ ?>" class="img"></img>
    				
    		<?php
    			}
    		?>
    			<center>
    				<span class="titre_detail">Prix HT</span> : <?php echo $art[16]; ?> Euros<br /><br />
    				<a href="Index.php?action=ajout_panier&choix=<?php echo $art[19]; ?>/<?php echo $art[18]; ?>">
    					<img src="images_gabarit/ajout_panier2.gif" style="float:left;"></img>
    				</a>
    				<span class="titre_detail">Restant en stock</span> : <?php echo $art[20]; ?>
    			</center>
    		</td>
    	</tr>
    	<tr>
    		<td></td>
    		<td>
    			<a href="#" id="voir_com">Voir les commentaires (<i><?php echo $nb_com ?></i>)</a>
    			<a href="#" id="lien_poster_com">Poster un commentaire </a>
    		</td>
    	</tr>
    	<tr>
    		<td colspan="2">
    			<div id="ajout_com"></div>
    			<div id="les_coms"></div>
    		</td>
    	</tr>
    </table>
    Mon problème :
    En faite, pour le moment j'ai 3 articles pour la catégorie Cross, lorsque je vais sur le détail du deuxième où le troisième article et que je click sur le lien "précédent", cela m’emmène automatiquement sur le premier article de la liste.
    Ce que je souhaiterais faire c'est que
    1) si je suis sur le deuxième articles et que je clique sur le lien "précédent", bien cela m'emmène sur le premier article.
    2) si je suis sur le troisième articles et que je clique sur le lien "précédent", cela m'emmène sur le deuxième article.
    3) si je suis sur le deuxième article et que je clique sur le lien "Suivant", cela m’emmène sur le troisième articles.
    4) .....

    Quelqu'un à t-il une idée de quel manière je doit procéder car je suis un peu dans le flou ?

    Merci d'avance!!

  2. #2
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    En fait, dans ce cas particulier, je crois que d'avoir un tableau séquentiel plutôt qu'associatif serait plus pratique pour la construction des liens. Je m'explique: Si on suppose que ceci:

    contient l'ID de l'article courant, on peut procéder comme suit pour le lien "précédent":

    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
     
     
    //l'article courant est le premier article alors il n'y a pas de précédent
    $stop = false;
    for($i = 0; $i < sizeof($ListeArticle) && !$stop; $i++)
    {
       $article1 = $ListeArticle[$i];
       $article2 = $ListeArticle[$i + 1];
       if($art == $article1)
       {
            //La seule fois où ça peut se produire c'est si on se trouve
            //Sur le tout premier article de la liste, donc il n'y a pas de précédent
             echo "Précédent"; 
       }
       else if ($art == $article2)
      {
          echo "<a href=\"Index.php?action=detail_moto&art=" . $article2 . "\">Précédent</a>";
          $stop = true;
      }
    }
    Après, tu peux transposer pour le lien "suivant" relativement facilement. En espérant que ceci éclaire adéquatement ta lanterne . Bonne chance

    Osu

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    osuwariboy,

    Tout d'abord merci pour ta réponse.

    En effet cela contient l'ID de l'article courant.

    Je suis d'accord avec toi sur le fait d'utiliser un tableau séquentiel plutôt qu'un tableau associatif mais lorsque je fais ceci :
    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
    <?php
    	$art = $_GET["art"];
    	$detail_article = R_moto_neuve::detail_article($art);
    	while($ligne=mysql_fetch_array($detail_article)){ 
    		$coloris = explode(",", $ligne["ArtNeuf_coloris"]);
    		$categ = $ligne["Cat_code"];
    		$MonArt[] = array($ligne["ArtNeuf_marque"], $ligne["ArtNeuf_modele"], $ligne["ArtNeuf_cylindre"], $ligne["ArtNeuf_TypeMoteur"], $ligne["Cat_design"], $ligne["ArtNeuf_Technologie"], $ligne["ArtNeuf_Puissance"], $ligne["ArtNeuf_Couple"], $ligne["ArtNeuf_Transmission"], $ligne["ArtNeuf_VitesseMaxi"], $ligne["ArtNeuf_FreinAvant"], $ligne["ArtNeuf_FreinArriere"], $ligne["ArtNeuf_Reservoir"], $ligne["ArtNeuf_Poids"], $ligne["ArtNeuf_HauteurSelle"], $ligne["ArtNeuf_Empattement"], $ligne["ArtNeuf_prixHT"], $ligne["Ph_lien"], $ligne["ArtNeuf_id"], $ligne["Cat_code"], $ligne["ArtNeuf_EnStock"]);
    	}
     
    	$photos_article = R_moto_neuve::Recuperer_3_photo($art);
    	$MesPhotos[] = array();
    	while($row=mysql_fetch_array($photos_article)){ 
    		$MesPhotos[] = array($row["Ph_lien"]);
    	}
     
    	$photos_article = R_moto_neuve::Coloris_article($art);
    	$coloris = explode(",", $photos_article);
    	for($i=0;$i<Count($coloris);$i++){
    		$coloris_article = R_moto_neuve::Coloris($coloris[$i]);
    		if($coloris[$i]=="0")
    			$MesColoris = "Non";
    		else
    			$MesColoris[] = array($coloris_article);
    	}
     
     
    	$articles = R_moto_neuve::Recuperer_infos_articles($categ);
    	while($result=mysql_fetch_array($articles)){ 
    		$ListeArticle[] = array($result["ArtNeuf_id"]);
    	}
     
    	//l'article courant est le premier article alors il n'y a pas de précédent
    	$stop = false;
    	for($i = 0; $i < sizeof($ListeArticle) && !$stop; $i++)
    	{
    	   $article1 = $ListeArticle[$i];
               echo "Article 1 : ".$article1."<br>";
    	   $article2 = $ListeArticle[$i + 1];
               echo "Article 2 : ".$article2."<br>";
    	   if($art == $article1)
    	   {
    	        //La seule fois où ça peut se produire c'est si on se trouve
    	        //Sur le tout premier article de la liste, donc il n'y a pas de précédent
    	         echo "Précédent"; 
    	   }
    	   else if ($art == $article2)
    	  {
    	      echo "<a href=\"Index.php?action=detail_moto&art=" . $article2 . "\">Précédent</a>";
    	      $stop = true;
    	  }
    	}
     
    	//var_dump($ListeArticle);
     
    	$nb_com = R_commentaire::Nombres_commentaire($art);
     
    	include ("contenu/Vue/V_DetailMoto.php");
    ?>
    Voici le résultat que j'obtiens de mes echo :
    Article 1 : Array
    Article 2 : Array
    Article 1 : Array
    Article 2 : Array
    Article 1 : Array
    Article 2 :
    Puis j'ai donné l'exemple sur 3 articles mais faut que je prévois la possibilité d'avoir plus de 3 articles par catégorie.

    Je vois pas trop comment faire là!!

    Merci d'avance!!

  4. #4
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Ah, j'avais pas vu que chaque case de $ListeArticle était un tableau en soi. Dans ce cas, au lieu de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Article 1 : ".$article1."<br>";
    Il faudrait faire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Article 1 : ".$article1[QuelqueChose]."<br>";
    Je ne connais pas exactement la structure du tableau que tu places dans chaque case de $ListeArticles, mais il te suffit simplement d'aller chercher la case qui contient l'information que tu veux afficher. Dans ce cas, $article1 (et conséquemment, $article2) peuvent être associatifs ou séquentiels, ça ne fait pas vraiment de différence.

    Bonne chance

    Osu

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Merci pour ta réponse.

    Juste pour ton information, voici ce que contient $ListeArticle :
    array(3)
    {
    [0]=> array(1)
    {
    [0]=> string(8) "CRKAKX01"
    }
    [1]=> array(1)
    {
    [0]=> string(8) "CRKAKX03"
    }
    [2]=> array(1)
    {
    [0]=> string(8) "CRSURM02"
    }
    }
    Voici ce que j'ai essayé mais qui marche pas totalement comme souhaité :
    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
    $articles = R_moto_neuve::Recuperer_infos_articles($categ);
    	while($result=mysql_fetch_array($articles)){ 
    		$ListeArticle[] = array($result["ArtNeuf_id"]);
    	}
    	//l'article courant est le premier article alors il n'y a pas de précédent
    	$stop = false;
    	for($i = 0; $i < sizeof($ListeArticle) && !$stop; $i++)
    	{
    	   $article1 = $ListeArticle[$i];
    	   $article2 = $ListeArticle[$i + 1];
    	   if($art == $article1[$i])
    	   {
    	        //La seule fois où ça peut se produire c'est si on se trouve
    	        //Sur le tout premier article de la liste, donc il n'y a pas de précédent
    	         echo "Précédent"; 
    	   }
    	   else if ($art == $article2[$i])
    	  {
    	      echo "<a href=\"Index.php?action=detail_moto&art=" . $article2[$i] . "\">Précédent</a>";
    	      $stop = true;
    	  }
    	}
    Lorsque je suis sur le dernier article (CRSURM02) -> J'obtiens rien du tout ce qui n'est pas normal vu qu'avant on à l'article "CRKAKX03".
    Lorsque je suis sur le deuxième article (CRKAKX03) -> J'obtiens bien le lien précédent mais l'article dans le lien c'est le deuxième (CRKAKX03) donc le même ce qui est anormal vu qu'il devrait plutôt y avoir "CRKAKX01".
    Lorsque je suis sur le premier article (CRKAKX01) -> j'obtiens "Précédent" écrit en normal ce qui est tout à fais normal.
    Je voit pas pourquoi ça marche pas correctement pour le troisième et le deuxième article, quelqu'un aurait-il une idée ?

    Ensuite, J'ai trouvé un site http://www.pixtiz.com/fr/blog/web/ph...-entree-id.php qui donne une solution pour faire ce que je souhaite, je souhaiterais savoir ce que vous en pensez ? Quel méthode est la plus judicieuse pour mon projet ?

    Merci d'avance!!

Discussions similaires

  1. Erreurs entre différents utilisateurs d'un même classeur
    Par alpilon dans le forum Conception
    Réponses: 2
    Dernier message: 14/01/2010, 11h12
  2. Erreur : Conflits entre différentes versions du même assembly
    Par Steven62 dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 28/04/2008, 18h37
  3. Naviguer rapidement entre différentes feuilles de clacul
    Par solipas dans le forum Contribuez
    Réponses: 0
    Dernier message: 27/07/2007, 12h15
  4. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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