Menu en php avec Mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Menu en php avec Mysql

par Johnstyle » 14 oct. 2006, 21:30

Merci beaucoup pour cet exemple clair.
je vient de comprendre mon erreur.


Voici mon menu terminé :
<table width="200" cellpadding="3" class="menu">
      <tr>
        <td colspan="2"><div align="center">Menu</div></td>
        </tr>
      <tr>
        <td colspan="2"><table width="100%" >
          
<? require_once ("config/config.php");
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 


	// on cr&eacute;e la requ&ecirc;te SQL 
	
$sql = "SELECT t2.id, t1.nom_categorie, t2.nom_section FROM categorie t1, section t2 where t1.nom_categorie=t2.categorie_section"; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 



/* J'établis une variable vide */ 
$var = ""; 
/* Je boucle pour créer ma liste en groupant par ensemble de titres */ 
// pour les besoins de l'exemple, je compte le nombre de lignes dans mon tableau 
while($data = mysql_fetch_assoc($req)) 

{
    /* On vérifie la valeur  de $var et on compare avec le titre de las ligne */ 
    if($var != $data['nom_categorie']) 
    { 
        /* J'attribue la valeur du titre à ma variable */ 
        $var = $data['nom_categorie']; 
        /* J'affiche le titre */  
        ?>
<tr>
<td class="titre"><?php echo($data['nom_categorie']) ?></td>
</tr> 
 <?  } 
    /** 
     * Pas de else, si le titre a la même valeur que la variable $var, je passe directement au  
     * lien, pas besoin de l'afficher à nouveau. 
     */ 
     
    /* On affiche de toutes façons le lien */ 
?>
<tr>
<td><a href="index.php?page=<?php echo($data['id']); ?>"><?php echo($data['nom_section']); ?></a></td>
</tr> <?    /* Fin du tour, on reboucle */ 
} 
mysql_close($db); 
?>
          
        </table></td>
        </tr>
</table>
encore merci.

par Cyrano » 14 oct. 2006, 20:35

Mouais, étant moi-même passé par le même chemin de l'auto-apprentissage, je visualise assez bien tes questionnement.

Partons donc si tu veux biens de données : ces données sont sous la forme d'un tableau : on va construirça rapido pour les besoins de la cause :
Construisons rapidement un jeu d'essai similaire :
<?php
$ligne = array();
$ligne[] = array("titre" => "Titre1", "lien" => "lien1");
$ligne[] = array("titre" => "Titre1", "lien" => "lien2");
$ligne[] = array("titre" => "Titre1", "lien" => "lien3");
$ligne[] = array("titre" => "Titre2", "lien" => "lien1");
$ligne[] = array("titre" => "Titre2", "lien" => "lien2");
$ligne[] = array("titre" => "Titre3", "lien" => "lien1");
$ligne[] = array("titre" => "Titre3", "lien" => "lien2");
?>
Ce qui va nous donner sommairement le résultat suivant :
- Titre1
- - lien1
- - lien2
- - lien3
- Titre2
- - lien1
- - lien3
- Titre3
- - lien1
- - lien2
Mais lors de ma requête, je vais récupérer ça sous forme de lignes du genre :
- Titre1 | lien1
- Titre1 | lien2
- Titre1 | lien3
- Titre2 | lien1
etc...
Pour que tu puisses tester, ce système présente une légère différence avec le fonctionnement sur une requête SQL, mais le principe est strictement le même.

Voici :
<?php
$ligne = array();
$ligne[] = array("titre" => "Titre1", "lien" => "lien1");
$ligne[] = array("titre" => "Titre1", "lien" => "lien2");
$ligne[] = array("titre" => "Titre1", "lien" => "lien3");
$ligne[] = array("titre" => "Titre2", "lien" => "lien1");
$ligne[] = array("titre" => "Titre2", "lien" => "lien2");
$ligne[] = array("titre" => "Titre3", "lien" => "lien1");
$ligne[] = array("titre" => "Titre3", "lien" => "lien2");

/* J'établis une variable vide */
$var = "";
/* Je boucle pour créer ma liste en groupant par ensemble de titres */
// pour les besoins de l'exemple, je compte le nombre de lignes dans mon tableau
$n = count($ligne);
for($i = 0; $i < $n; $i++)
{
    /* On vérifie la valeur  de $var et on compare avec le titre de las ligne */
    if($var != $ligne['titre'])
    {
        /* J'attribue la valeur du titre à ma variable */
        $var = $ligne['titre'];
        /* J'affiche le titre */ 
        echo("<h4>". $ligne['titre'] ."</h4>\n");
    }
    /**
     * Pas de else, si le titre a la même valeur que la variable $var, je passe directement au 
     * lien, pas besoin de l'afficher à nouveau.
     */
    
    /* On affiche de toutes façons le lien */
    echo("<a href=\"#\" title=\"Lien ". $i ."\">". $ligne['lien'] ."</a>\n");
    /* Fin du tour, on reboucle */
}
?>

par Johnstyle » 14 oct. 2006, 20:05

Merci,
j'ai parfaitement compris le fonctionement,
mais le probleme etant que je suis incapable de deviner le morceau de code à créer vu que j'aprend actuellement le language php.

Je sais bien que le meilleur moyen d'aprendre est de réflechir par sois même mais je ne suis pas doué avec les devinettes et vu que je n'ai pas d'exemple concret je ne peut pas l'inventer ..

Enfin bref,
je demande juste une solution ou un exemple pour que je puise résoudre ce probleme.

Merci

par Cyrano » 14 oct. 2006, 19:30

$titre = "" que mettre ici ??
rien justement :
Je t'ai donné des indices, pas la solution et cette dernière ne semble pas t'avoir effleuré.

Essaye de te représenter le déroulement de la boucle : au départ, on a une variable dont la valeur est une chaine vide. On lance la boucle. Première chose, on compare la valeur du titre retourné par MySQL et la valeur de notre variable : la comparaison retourne FALSE : logique : donc, on va faire un truc : on assigne la valeur de retour de MySQL à notre variable et on affiche le titre "Titre1" : ensuite, on affiche le lien correspondant à cette ligne.

Si tu suis toujours, on reboucle, deuxième tour: on compare la valeur du retour Titre de MySQL avec notre variable : mais là, la comparaison retourne TRUE : donc on affiche pas le titre. Suite du code, on affiche le lien normalement. Troisième tour : on refait la même chose, comparaison de notre variable et tu titre retourné par mysql : si c'est toujours TRUE, on passe et on affiche juste le lien, mais si le retour est FALSE, alors on affiche le titre, on assigne la nouvelle valeur à notre variable et on affiche le lien... et on boucle à nouveau.

Tu commences à saisir ? :-k ?

par Johnstyle » 14 oct. 2006, 18:18

j'essaye d'etre logique mais je suis dsl mais je ne comprend pas..
-1- Avant la boucle, définis une variable , par exemple $titre = "" (chaine vide)
$titre = "" que mettre ici ??
-2- Dans ta boucle : à chaque tour, vérifie la valeur de cette variable et compare-la avec la valeur du titre retourné par ta requête
Comment faire pour comparer ces deux valeur ?

par Cyrano » 14 oct. 2006, 16:47

Être débutant ne doit pas signifier nécessairement que tu n'es pas logique, on est d'accord sur ce point ?

Prends ta requête et exécute-la dans phpMyAdmin et que vois-tu ? Tu as un certain nombre de lignes avec toujours le titre de mentionné, donc forcément, tu vois plusieurs fois Titre1, plusieurs fois Titre2 etc...

Le résultat te permet d'avoir tous les liens, c'est ce que tu voulais. Maintenant, il faut gérer l'affichage et ne pas répéter le titre à chaque tour.

Je te donne la piste (mais pas la solution) :
-1- Avant la boucle, définis une variable , par exemple $titre = "" (chaine vide)
-2- Dans ta boucle : à chaque tour, vérifie la valeur de cette variable et compare-la avec la valeur du titre retourné par ta requête.

Ce sont deux indices importants, je te laisse réfléchir un peu pour trouver la suite..., elle est logique :)

par Johnstyle » 14 oct. 2006, 16:33

Merci c'est ça que je cherchai ^^

mais j'ai un autre probleme,

l'affichage ce fait comme ceci :

Titre1
lien1
Titre1
lien2
Titre1
lien3

au lieu de :

Titre1
lien1
lien2
lien3
 <? require_once ("config/config.php");
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion &agrave; la base 
    mysql_select_db($dbname,$db); 


	// on cr&eacute;e la requ&ecirc;te SQL 
	
$sql = "SELECT t1.id, t1.titre, t2.lien FROM table1 t1, table2 t2 WHERE t1.titre = t2.lien_titre"; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 


// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req)) 

{
?>

<tr>
<td><?php echo($data['titre']); ?></td>
</tr>

<tr>
<td><?php echo($data['lien']); ?></td>
</tr>
<? } 

mysql_close($db); 
?>
excusez moi mais je suis débutant .. ^^
merci

par Ryle » 14 oct. 2006, 15:13

Il te faut faire une jointure sur ta deuxieme table et ajouter le critère de correspondance pour lier les enregistrements de ces deux tables :) Quelque chose du genre :

Code : Tout sélectionner

SELECT t1.id, t1.titre, t2.lien, ... // ramène les champs désirés FROM maTable1 t1, maTable2 t2 // des tables maTable1 et maTable2 WHERE t1.id = t2.idTable1 // pour lesquels les identifiants correspondent
"t1" et "t2" sont des alias pour les noms des tables pour les paresseux comme moi qui n'ont pas envie de retaper le nom de la table à chaque fois ;)

par Johnstyle » 14 oct. 2006, 14:39

Persone n'aurai une petite idée de comment je pourait faire ?

Menu en php avec Mysql

par Johnstyle » 14 oct. 2006, 02:41

Bonjour,
j'ai un petit souci,
j'aimerai creer un menu et pour cela j'ai creer 2 tables dans mysql.

TABLE 1
titre 1
titre 2
titre 3

TABLE 2
lien 1
lien 2
lien 3
lien 4

et j'aimerai créer un menu du ce style :

Titre 1
lien 1
lien 2
Titre 2
lien 3
Titre 3
lien 4

Mon probleme est que je ne vois pas comment faire pour alterné le renvois de donnée provenant de 2 tables différente.

j'ai commencer a faire ceci, mais je n'obtient que le renvois d'une table.
 <? require_once ("config/config.php");
    $db = mysql_connect($dbhost, $dbuname, $dbpass);  // connexion à la base 
    mysql_select_db($dbname,$db); 


	// on cr&eacute;e la requ&ecirc;te SQL 
$sql = "SELECT id,titre FROM table1"; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 


// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req)) 



{
?>

<tr>
<td><?php echo($data['titre']); ?></td>
</tr>

<? } 

mysql_close($db); 
?>
est-ce que vous auriez une idée pour m'aider ?

merci