Rendre actif un onglet menu

Résolu/Fermé
Signaler
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
-
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
-
Bonjour,

Je cherche à rendre actif un onglet de menu dont le nom et le texte correspondant sont issus d'une base de donnée.

Affichage du menu :

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

echo '<div class="menu">';  

while($row = mysql_fetch_array($result))  
{ 
echo '<a href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="bouton">'.$row['nom'].'</a><p>';  
} 

echo '</div>'; 


Merci

16 réponses

Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
Salut.
Il suffit de vérifier si le lien qui provient de la bdd correspond à celui de la page actuelle. Si oui, alors tu ajoutes une classe CSS.
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
Ben oui ! J'y avait pensé ......
Mais je ne sais pas comment faire pour comparer $row[nom] avec $row[texte] pour savoir s'ils proviennent du même enregistrement !
Avec $row[id] peut-être ? Mais comment ?

Merci
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
$select = 'SELECT * FROM menu';
$result = mysql_query($select, $link) or die ('Erreur : ' . mysql_error() );

echo '<div class="menu">';

while($row = mysql_fetch_array($result)) {
    $classe = '';
    if(isset($_GET['nom']) && $_GET['nom'] == $row['nom']) {
        $classe = 'class="actif" ';
    }

    echo '<a '.$classe.'href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="bouton">'.$row['nom'].'</a><p>';  
} 

echo '</div>';
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
Je suis désolé, mais cela ne fonctionne pas mieux !!!! :o(
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
Il faut aussi créer la classe "actif" dans le CSS.
.actif {
    ...
}
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
Ben c'est ce que j'ai fait, mais le bouton ne garde pas la class actif !

J'ai modifié ainsi :

while($row = mysql_fetch_array($result)) {
    $classe = 'bouton';    
    if(isset($_GET['nom']) && $_GET['nom'] == $row['nom']) 
    {
        $classe = 'class="actif" ';
    }
echo '<a href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="'.$classe.'">'.$row['nom'].'</a><p>';  
}
echo '</div>';

echo '<div class="frame">'; 
echo $_GET['texte'];
echo '</div>'; 


mais ça fonctionne pas mieux ....
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
« $classe = ''; » sert à déclarer la variable ! Tu ne dois pas mettre ta classe à toi dedans ! C'est "actif" qu'il faut remplacer (quelques lignes plus loin)
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
OK ! J'ai remis le code comme tu me le proposes plus haut. Mais ça ne fonctionne pas mieux :

.bouton {
     display: block;
     width: 130px;
     height: 17px;
     background-color: #800000;
     text-align: center;
     font-family: verdana, arial, helvetica, sans-serif;
     font-size: 10px;
     font-weight: bold;	  
     color: yellow;
     text-decoration: none;
}
.bouton:hover {
............................
}
.actif {
........................
}

<?php
$select = 'SELECT * FROM menu';  
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );  
 
echo '<div class="menu">'; 

while($row = mysql_fetch_array($result)) 
{
    $classe = '';
    if(isset($_GET['nom']) && $_GET['nom'] == $row['nom']) 
    {
        $classe = 'class="actif" ';
    }
    echo '<a '.$classe.'href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="bouton">'.$row['nom'].'</a><p>';  
} 

echo '</div>';
echo '<div class="frame">'; 
echo $_GET['texte'];
echo '</div>'; 
?>


Les boutons ne prennent pas la classe actif quand le texte correspondant estr affiché dans le <div class="frame">.
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
Les boutons prennent la classe "actif" quand $_GET['nom'] est égale au nom du bouton ($row['nom']).

Fais un echo de ces variables pour voir ce quelle contiennent.
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
Si je fais un echo des variables, donc j'écris :

 ..........echo '<a '.$classe.'href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="bouton">'.$row['nom'].'</a><p>';   
}  
echo $_GET['nom']; 
echo $row['nom'];


$_GET['nom'] me retourne bien le nom. Par contre, $row['nom'] ne me retourne rien !!!!???? (j'ai testé en mettant les valeurs en commentaire).
Bizarre, puisque avec >'.$row['nom'].'</a>, le nom m'est bien retourné !
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
Fais l'affichage de $row['nom'] dans la boucle while.
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
J'ai donc fait ce que tu m'as dit, et le résultat du $row[nom] s'affiche partout sauf dans la boucle du if

if(isset($_GET['nom']) && $_GET['nom'] == $row['nom']) 
    {
      echo $row['nom'];    
      $classe = 'class="actif" ';
    } 


Donc la condition n'est pas exécutée !?
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
if n'est pas une boucle.
Donc une seule fois dans while !

« Donc la condition n'est pas exécutée !? »
Ça je l'ai remarqué depuis longtemps.
C'est pour ça que j'aimerais savoir la valeur des variables.
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
La valeur de $row['nom'] correspond aux valeurs "nom" des enregistrements !
Comme c'est dans la boucle while, toutes les valeurs sont retournées.

La valeur $_GET['nom'] dans la boucle while me retourne la valeur du bouton sur lequel je cliques.

Donc effectivement, comme est écrit la condition, ça devrait fonctionner .... ????!!!!
Ce serait dans l'écriture du echo d'où vient l'erreur ?

echo '<a '.$classe.'href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="bouton">'.$row['nom'].'</a><p>';
0
Messages postés
18635
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2022
4 351
Je ne vois pas d'erreur dans l'affichage (echo).
Regarde au niveau du code source via ton navigateur.
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
0
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
YESSSSSSSSSSSSS !!!!!!!! J'ai trouvé !!!!!!!!!!
J'ai enlevé les espaces autour du & dans "....$row['nom'].' & texte....."

Merci pour ton aide et pour le dérangement ..... ;o))))))

A ++
0