Pb de lien dynamique et pagination en php

Fermé
wallash Messages postés 25 Date d'inscription lundi 16 octobre 2006 Statut Membre Dernière intervention 1 décembre 2009 - 1 juin 2007 à 11:09
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 - 15 juin 2007 à 11:14
slt à tous svp j'ai besoin d'aide en php&mysql,
en fait je suis entrain de faire un site web et je suis newbie en programmation php,le principe est le suivant:
j'ai trois pages(catégorie.html,rubrique.php,article.php).
- la page catégorie.html
elle comporte les différentes catégories de ma bd et je voudrais que lorsqu'on clique sur une catégorie, la page rubrique.php doit nous renvoyer les différentes rubriques de la catégorie cliquée dans un tableau.
- la page rubrique.php
elle comporte les différentes rubriques d'une catégorie dans un tableau et lorsqu'on survole le nom d'une rubrique on voit dans la barre de tâches du navigateur un url de la forme http://../article.php?id_rubrique=n ou http://../article.php?id_categorie=n.Et je voudrais aussi qu'en cliquant sur le nom d'une rubrique,on arrive sur la page article.php où on affiche dans un tableau de deux colonnes l'image d'un article à droite et un lien permettant de télécharger son catalogue à gauche.
- la page article.php
elle comporte les images des articles et les liens de téléchargement du catalogue de l'article dans un tableau.Et dans sa barre d'adresse on voit l'url de la forme http://../article.php?id_rubrique=n ou http://../article.php?id_categorie=n

j'aimerais aussi prévoir une pagination pour la page rubrique.php qui affiche le nom des rubriques d'une categorie, pour plus de 16 rubriques.

Bon j'ai déjà tout dans ma bd et je sais même les afficher mais je ne sais pas faire des liens dynamiques et c'est là mon gros pb.

NB: si quelqu'un a des tutoriels pouvant m'aider dans ce sens, je vous en prie de bien vouloir me les faire part mais un cas pratique sera plus favorable pour moi.

merci d'avance à tous les volontaires
A voir également:

8 réponses

Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
15 juin 2007 à 11:14
Même si ca ne change pas grand chose, j'avai mal lut ton message d'erreur qui conçerne ta page article. Je suppose que ca ne change rien car je pense que dans la page article la variable $_GET['id_rubrique'] se qui signifie que ta page rubrique ne l'envoie pas.

En général, quand on récupère des variable d'un page vers l'autre on la test
exemple :

if(isset($_GET['id_rubrique'])){
     $id_rubrique=$_GET['id_rubrique'];
}


Avec si on veut un else pour afficher un message relatant l'erreur.

Test avec ce test. Mets un echo 'test'; avant le if (pour être certain qu'on arrive jusque là) puis dans le if (s'il ne s'affiche pas alors $_GET['id_rubrique'] n'est pas défini. Si c'est le cas alors le problème vient de la page rubrique.

Essai de trouver toi même où dans ton code quelque chose ne se déroule pas comme tu le désir. Pour sa, affiche tes variables (un peu comme je t'es expliquer avec echo $tavariable).
Affiche id_rubrique avant le lien, aprés son affectation ( $id_rubrique=$tablo[$i]['id_rubrique']; ). Tu pourra remonter jusqu'a l'erreur. Surement dans le while.

Mais ton code peut, je pense être simplifier:

execution de la requête

début du tableau <table...>
while($data = mysql_fetch_array($result)){
    echo '<tr>'; 
    echo '<td align="center">
                       <a href = "article.php?id_rubrique='.$data['id_rubrique'].'">'.$data['nom_rubrique'].'</a><br/></td>'; 

echo '</tr>'; 
}
fin du tableau </table>

Car ton $data est un tableau comportant tout les champ d'un enregistrement de ta requête. Et a chaque tour de boucle on passe à l'enregistrement suivant.

Voila, j'éspère que tu t'en sortira. 

Bon courage ;o)
1
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
1 juin 2007 à 12:52
Bon, premièrement faut s'acrocher pour lire ton text. Un gros pavé comme sa, ça donne pas envie... ;op

Faire des lien dynamique sa pas trés dure. PHP génère de l'HTML il te suffit de récuppérer les info dans ta BDD et de les utiliser pour creer ton lien.

<a href="article.php?id_catégorie='.$id_categorie_recup_dans_BDD.'"> '.$Nom_categorie_recup_dans_BDD.'</a>


Bien sur, ca sous entend que tu stock l'id et le Nom de tes catégorie dans ta BDD.
0
slt Mr white et merci de votre message, c'est vrai j'ai essayer d'utiliser vos explications mais je ne parviens pas à avoir le résultat, et je crois que le pb est que mon script ne parviens pas à extraire le contenu de ma variable qui se trouve dans la bdd et ceci parce qu'au survol des liens "des rubrique"dans la page rubrique,j'obtient rubrique.php?id_article=0 quelque soit la rubrique que je survol (ce qui n'est pas bon signe).de même lorque j'accède à la page article.php, au niveau de la barre d'adresse j'obtient la même chose tout en sachant que le valeur par défaut de id_article est bien 0
0
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
7 juin 2007 à 17:49
Si tu a des doute sur ta requête, soumet la toi même au SGBD. Tu saura ainsi sur quoi porter ton attention.

Pour te permettre de comprendre un peu mieux ce que fait ton programme afin de le débuggé, n`hésite surtout pasa afficher tes variable sur ta page : echo $taVariable;

Test sa à différent endroit, avant un if, aprés un if, au tout début... bref savoir si le programme fait bien ce que tu veut, ou plutôt quand ne le fait-il pas !

PS : Espace ton text !!!! je finirai certainement par ne plus trouver le courage de lire un pavé bien compacte !
0
rastajeff Messages postés 72 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 25 août 2009 13
7 juin 2007 à 17:57
Je sais aps trop si t'a bien fait ta requete.

Une solution :

$requete = 'SELECT * FROM matable'; // Si j'ai bien compris tu veux tout afficher

ou alors

$requete = "SELECT * FROM matable WHERE categorie = '.$ma_categorie.'"; // Si c'est suivant une catégorie

ensuite $resultat = mysql_query($requete); // Pour executer

While($ligne = mysql_fetch_array($resultat)) // Cela met tt dans un tableau
{
<a href="article.php?id_cat='.$id_cat_de_laBDD.'"> '.$Nom_categorie_de_la_BDD.'</a>
}

En fait, tant qu'il y aura des catégorie dans ta BDD, elles seront affichées, le lien sera fait avec l'id.

Ca le fait ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
slt à tous, je m'excuse pour mon abscence depuis la semaine dernière car j'avais plus accès au net à cause de mon fournisseur d'accès,et merci rastajeff pour le temps que tu as accordé à mon message et mon pb d'affichage est désormais résolu sauf que maintenant c'est pagination qui m'embête.
0
commeje te disais tantôt rastajeff maintenant c'est le pb de pagination qui embête et voici les codes de mes pages.

page rubrique.php

****************************
<?php

$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'bdd';

//=========================================
// initialisation des variables
//=========================================
// on va afficher 5 résultats par page.
$nombre =12;
// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0;
// on cherche le nom de la page.
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];

//=========================================
// connection à la DB
//=========================================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

//=========================================
// requête SQL qui compte le nombre total
// d'enregistrements dans la table.
//=========================================
$select = 'SELECT count(id_rubrique) FROM rubrique';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);

$total = $row[0];

//=========================================
// vérifier la validité de notre variable
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite) {
$limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre
// d'enregistrement necessaire à l'affichage.
//=========================================

$id_categorie=$_GET['id_categorie'];
$select = 'select * FROM rubrique WHERE id_categorie='.$id_categorie.' ORDER BY id_rubrique ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

while($data = mysql_fetch_array($result))
{
$tablo[]=$data;
}
//détermine le nombre de colonnes
$nbcol=3;

echo '<table border="0" valign="top" width="450" cellspacing="0" cellpadding="0">';
$nb=count($tablo);
for($i=0;$i<$nb;$i++){

//les valeurs à afficher
$valeur1=$tablo[$i]['Nom_rubrique'];
$id_rubrique=$tablo[$i]['id_rubrique'];

if($i%$nbcol==0)
echo '<tr>';
echo '<td align="center"><a href = "article.php?id_rubrique='.$id_rubrique.'">'.$valeur1.'</a><br/></td>';

if($i%$nbcol==($nbcol-1))
echo '</tr>';

}
echo '</table>';


//=========================================
// si on a récupéré un resultat on l'affiche.
//=========================================
//echo'nombre de rubrique trouvées'.$num_result.'<br>';



//else echo 'Pas d\'enregistrements dans cette table...';

//=========================================
// si le nombre d'enregistrement à afficher
// est plus grand que $nombre
//=========================================

if($total > $nombre) {
// affichage des liens vers les pages
affichePages($nombre,$page,$total);
// affichage des boutons
// displayNextPreviousButtons($limite,$total,$nombre,$page);
}

?>
***************************************


et voici la page article.php

*******************************

<?php

$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'bdd';

//=========================================
// initialisation des variables
//=========================================
// on va afficher 5 résultats par page.

$nombre = 4;

// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0;
// on cherche le nom de la page.
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];

//=========================================
// connection à la DB
//=========================================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

//=========================================
// requête SQL qui compte le nombre total
// d'enregistrements dans la table.
//=========================================



$id_rubrique=$_GET['id_rubrique'];


$select = 'SELECT count(id_article) FROM article WHERE id_rubrique='.$id_rubrique;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row1 = mysql_fetch_row($result);
$total = $row1[0];

//=========================================
// vérifier la validité de notre variable
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite) {
$limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre
// d'enregistrement necessaire à l'affichage.
//=========================================

$select = 'select photo_article,description FROM article WHERE id_rubrique='.$id_rubrique.' ORDER BY id_article ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

//=========================================
// si on a récupéré un resultat on l'affiche.
//=========================================
if($total) {
// début du tableau
echo '<center><table border="0" cellspacing="0" cellpadding="0" align="center" width="300" height="500">';
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td><b><center>IMAGE</center></b></td>';
echo '<td><b>CATALOGUE</b></td>';
echo '</tr>';
// lecture et affichage des résultats sur 2 colonnes
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td>';
echo"<img src='IMAGES/img/$row[photo_article]'>";
echo '</td>';
echo '<td>'.$row['description'].'</td>';
echo '</tr>';
}
echo '</table></center>';
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);

//=========================================
// si le nombre d'enregistrement à afficher
// est plus grand que $nombre
//=========================================

if($total > $nombre) {
// affichage des liens vers les pages
affichePages($nombre,$page,$total);
// affichage des boutons
// displayNextPreviousButtons($limite,$total,$nombre,$page);
}


?>

**********************************

donc comme j'ai prévu 4 produits par page,il faut bien que si les produits de la rubrique sont plus de 4, on affiche les liens de pagination sous forme de numéro.quand je clique sur les différents numéros de page( numéros de ma pagination), un message apparait disant que " undefine variable id_rubrique in c://../article.php on line ... " ce qui fait que les articles suivants ne s'affichent pas et je ne parviens donc pas à bien définir la variable $id_rubrique à fin de mieux recevoir les valeurs passées par url depuis la page rubrique.php. merci à vous d'avance.
0
Mr.White Messages postés 251 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 17 juillet 2012 53
13 juin 2007 à 17:02
Apparemment ton problème se situe au niveau de ta variable $id_rubrique qui n'est pas défini, ce qui veut dire qu'il n'y à rien dedans.

Voici ton code : (pour afficher du code, utilise le bouton code juste au dessus de la zone de text quand tu édite)

$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

while($data = mysql_fetch_array($result))
{
$tablo[]=$data;
}
//détermine le nombre de colonnes
$nbcol=3;

echo '<table border="0" valign="top" width="450" cellspacing="0" cellpadding="0">';
$nb=count($tablo);
for($i=0;$i<$nb;$i++){

//les valeurs à afficher
$valeur1=$tablo[$i]['Nom_rubrique'];
$id_rubrique=$tablo[$i]['id_rubrique']; 


(C'est plus lisible un fois que ca s'affiche ;o))

Donc, il ne trouve rien dans ton $id_rubrique. On en déduit que cette instruction n'affect rien dans la variable :
$id_rubrique=$tablo[$i]['id_rubrique'];

C'est au niveau de l'utilisation du résulta du "mysql_query" que ca ne va pas (au niveau du while).

Personnellement je fait en général mon traitement directement dans le while donc je ne suis pas certain de ce que je vai te dire.

Je pense que tu devrai écrire un truc du genre :

$compteur=0;
while($data = mysql_fetch_array($result))
{
$tablo[$compteur]=$data;
$compteur++;
}


Car, si on imagine que ta requête te rnvoie un tableau alors $data = mysql_fetch_array($result) ne t'en renvoie qu'une ligne à la fois (chaque tour de boucle égale une ligne). A chaque tour de boucle tu doit mettre cette ligne dans un nouveau tableau. (je te précise au cas ou que $tablo[][] est un tableau de tableau.


PS: J'en suis navré mais si ton prochain post est encore une fois aussi difficile à lire, je craint abandonne ;o{
0
wallash Messages postés 25 Date d'inscription lundi 16 octobre 2006 Statut Membre Dernière intervention 1 décembre 2009 1
14 juin 2007 à 12:24
slt mr white et merci pour le temps que tu m'accorde
et j'ai essayer de definir une variable $compteur comme tu l'a dit mais il n'ya pas de changement , je sais pas si il ya des modifications autres à faire pour que ça marche, voici le code tel que j'ai modifier.


<?php 

$host = 'localhost'; 
$user = 'root'; 
$pass = ''; 
$db = 'bdd'; 

//========================================= 
// initialisation des variables 
//========================================= 
// on va afficher 4 résultats par page. 
$nombre =4; 
// si limite n'existe pas on l'initialise à zéro 
if (!$limite) $limite = 0; 
// on cherche le nom de la page. 
$path_parts = pathinfo($_SERVER['PHP_SELF']); 
$page = $path_parts["basename"]; 

//========================================= 
// connection à la DB 
//========================================= 
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); 
mysql_select_db($db) or die ('Erreur :'.mysql_error()); 

//========================================= 
// requête SQL qui compte le nombre total 
// d'enregistrements dans la table. 
//========================================= 
$select = 'SELECT count(id_rubrique) FROM rubrique'; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); 
$row = mysql_fetch_row($result); 

$total = $row[0]; 

//========================================= 
// vérifier la validité de notre variable 
// $limite; 
//========================================= 
$verifLimite= verifLimite($limite,$total,$nombre); 
// si la limite passée n'est pas valide on la remet à zéro 
if(!$verifLimite) { 
$limite = 0; 
} 
//========================================= 
// requête SQL qui ne prend que le nombre 
// d'enregistrement necessaire à l'affichage. 
//========================================= 

$id_categorie=$_GET['id_categorie']; 
$select = 'select * FROM rubrique WHERE id_categorie='.$id_categorie.' ORDER BY id_rubrique ASC limit '.$limite.','.$nombre; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); 

$compteur=0;
while($data = mysql_fetch_array($result))
{
$tablo[$compteur]=$data;
$compteur++;
}

//détermine le nombre de colonnes 
$nbcol=3; 

echo '<table border="0" valign="top" width="450" cellspacing="0" cellpadding="0">'; 
$nb=count($tablo); 
for($i=0;$i<$nb;$i++){ 

//les valeurs à afficher 
$valeur1=$tablo[$i]['Nom_rubrique']; 
$id_rubrique=$tablo[$i]['id_rubrique']; 

if($i%$nbcol==0) 
echo '<tr>'; 
echo '<td align="center"><a href = "article.php?id_rubrique='.$id_rubrique.'">'.$valeur1.'</a><br/></td>'; 

if($i%$nbcol==($nbcol-1)) 
echo '</tr>'; 

} 
echo '</table>'; 


//========================================= 
// si on a récupéré un resultat on l'affiche. 
//========================================= 
//echo'nombre de rubrique trouvées'.$num_result.'<br>'; 



//else echo 'Pas d\'enregistrements dans cette table...'; 

//========================================= 
// si le nombre d'enregistrement à afficher 
// est plus grand que $nombre 
//========================================= 

if($total > $nombre) { 
// affichage des liens vers les pages 
affichePages($nombre,$page,$total); 
// affichage des boutons 
// displayNextPreviousButtons($limite,$total,$nombre,$page); 
} 

?> 



0