Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2010, 19h22   #1
Débutant
 
Inscription : juin 2007
Messages : 1 550
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 550
Points : 299
Points : 299
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 :
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 :
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!!
loic20h28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 01h20   #2
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
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 :
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
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 22h37   #3
Débutant
 
Inscription : juin 2007
Messages : 1 550
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 550
Points : 299
Points : 299
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 :
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 :
Citation:
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!!
loic20h28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 13h24   #4
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Ah, j'avais pas vu que chaque case de $ListeArticle était un tableau en soi. Dans ce cas, au lieu de faire :


Code :
echo "Article 1 : ".$article1."<br>";
Il faudrait faire:


Code :
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
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 21h27   #5
Débutant
 
Inscription : juin 2007
Messages : 1 550
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 550
Points : 299
Points : 299
Merci pour ta réponse.

Juste pour ton information, voici ce que contient $ListeArticle :
Citation:
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 :
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!!
loic20h28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h53.


 
 
 
 
Partenaires

Hébergement Web