[PHP,Mysql] Menu et lien a la volée

Résolu/Fermé
Profil bloqué - 8 févr. 2010 à 14:35
 Profil bloqué - 11 févr. 2010 à 13:51
Bonjour a tous.
Je suis toujours en train de realise mon site en php mysql mais j'ai un soucis que je ne parviens pas a resoudre. Je cherche a afficher des bloc de menu (composer de pluieurs div afin d'avoir les coins arrondis mais sa vous allez le voir)
avec a l'interieur les liens du bloc.

Le nomvre de menu a afficher et dynamique par mysql et les liens aussi.
Uns table (jos_left) contient le menu (id (INT 11 auto-increment), title (VARCHAR 255 utf8_general_ci), description (TEXT 255 utf8_genberal_ci))
Une table (jos_left_link) contient les liens à afficher (id (INT 11 auto-increment), title (VARCHAR 255 utf8_general_ci), link (TEXT 255 ut8_general_ci), description (TEXT 255 utf8_general_ci))

Voila pour la confige mysql que vous puissiez tester :p

le code que j'utilise:
<ul>
<?php
$left_menu = mysql_query("Select title FROM jos_left ORDER BY id ASC") or die (mysql_error());
while ($donnees_left_menu = mysql_fetch_array($left_menu)){
echo'<div class="left_header_articles"></div><div class="right_header_articles"></div><div class="center_header_articles"></div><div class="left"><fieldset><legend>'.$donnees_left_menu['title'].'</legend>';

?>
<ul>
<?php
$left_link = mysql_query("Select title,link FROM jos_left_link ORDER BY id ASC") or die (mysql_error());
while ($donnees_left_link = mysql_fetch_array($left_link)){
echo'<li><a href="'.$donnees_left_link['link'].'">'.$donnees_left_link['title'].'</a></li>';
}
?>
</ul>
<?php
echo '</fieldset></div><div class="left_footer_articles"></div><div class="right_footer_articles"></div><div class="center_footer_articles"></div><br>';
}
?>
</ul>


Fonctionne bien pour faire les menu separer mais repete les même liens dans chaque bloc menu.
J'ai beau chercher, je ne parviens pas a trouvr comment faire pour afficher les liens qui vont avec le bloc qui les contient.

Si vous voyez une erreur, dites le :p et si vous avez une idées, merci de me le dire meme si je dois tout modifier :p (php ou mysql :p)

Merci de vos reponses constructives.
A voir également:

9 réponses

Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
8 févr. 2010 à 15:45
Salutation,

Si j'ai bien compris tu veux afficher pour chaque categorie de ta table jos_left, les liens correspondant dans jos_left_link?

Si je ne me trompe pas, il manque une information essentielle dans ta base! Tes tables ne sont pas "liées entre elles".

Pour faire se que tu veux (enfin se que j'écrit aux dessus):
BDD:
jos_left(id, title, description)
jos_left_link(id, title, link, description, IdJosLeft)
(ps: Quand tu affiche la structure de ta bdd, un export serai aussi bien (voir mieux), J' entend par la des requêtes SQL insert, c'est tout aussi compréhensible et plus simple a utiliser pour tester)

IdJosLeft est égal a l'id de la catégorie a laquelle il appartient.

Après, il suffit juste de modifier les 2 requêtes sql pour que sa marche:
$left_menu = mysql_query("Select id, title FROM jos_left ORDER BY id ASC") or die (mysql_error());

$left_link = mysql_query("Select title,link FROM jos_left_link WHERE IdJosLeft = ".$donnees_left_menu['id']." ORDER BY id ASC") or die (mysql_error());

Voila
0
Profil bloqué
8 févr. 2010 à 19:02
Merci Camuke. en effet c'est exactement cela.
Juste une chose, comment faire pour lier? car mes id de tables sont toujours 1.2.3... il faut que je declare comment? (Je fais les export pour creation des que possible et avec les infos que j'ai deja mis.)

Merci (c'est deja bien comme piste :p)
0
Profil bloqué
8 févr. 2010 à 22:40
C'est bon j'ai reussi a bidouiller un truc mais c'est du int pour le IdJosLeft donc si il faut mieux avoir autre chose, dis le moi :p
0
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
9 févr. 2010 à 09:24
Oui, IdJosLeft doit être un int comme les autres id pour éviter les problème de type.

Quand je dit liée, c'est un peu exagère. Concrètement, quand tu va insérer une valeur dans jos_left_link, tu récupère l'id de la bonne catégorie dans jos_left et tu lui attribut.

si c'est fait en php, sa donne un truc comme sa:

$cat = 'maCat';
$req = mysql_query("Select id FROM jos_left Where title=".$cat."") or die (mysql_error());
$result = mysql_fetch_array($req);

$req2= mysql_query("INSERT INTO jos_left_link(title, link, description, idJosLeft) values ('MonTitre', 'monlien', 'PetiteDescription', ".$result['id']." ) or die (mysql_error());
0

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

Posez votre question
Profil bloqué
9 févr. 2010 à 19:01
oki merci. Ca vas deja aide beaucoup :D.
Dinon autant eviter d'ouvrir un autre post pour une idée qui rejoind la premiere:
Si je veux faire un truc a la joomla ( tu clic sur un lien et dans la nouvelle page les enfants s'affiche), c'est le meme principe non?
0
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
9 févr. 2010 à 23:05
Oui c'est le meme princiipe.
0
Profil bloqué
10 févr. 2010 à 20:02
Malheureusement, je ne parviens pas j'ai une erreur et je ne pârviens pas a la trouver.
Un oeil pl_us exercer que le mien parviendras surment a trouver l'erreur:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id ASC' at line 1"

voila le code:
<ul>
<?php
$left_menu = mysql_query("Select id, title FROM jos_left ORDER BY id ASC") or die (mysql_error()); 
while ($donnees_left_menu = mysql_fetch_array($left_menu)){
echo'<div class="left_header_articles"></div><div class="right_header_articles"></div><div class="center_header_articles"></div><div class="left"><fieldset><legend>'.$donnees_left_menu['title'].'</legend>';
?>
<ul>
<?php
$left_linka = mysql_query("Select id, title, link FROM jos_left_link WHERE id_jos_left = ".$donnees_left_menu['id']." ORDER BY id ASC") or die (mysql_error());
while ($donnees_left_linka = mysql_fetch_array($left_linka)){
echo'"'.$donnees_left_linka['id'].'"<a href="'.$donnees_left_linka['link'].'">'.$donnees_left_linka['title'].'</a><br>';
}
?>
</ul>
<ul>
<?php
$left_linkb = mysql_query("Select id,title,link FROM jos_left_link2 WHERE id_jos_left_link = ".$donnees_left_linka['id']." ORDER BY id ASC") or die (mysql_error());
while ($donnees_left_linkb = mysql_fetch_array($left_linkb)){
echo'"'.$donnees_left_linkb['id'].'"<a href="'.$donnees_left_linkb['link'].'">'.$donnees_left_linkb['title'].'</a><br>';
}
?>
</ul>
<?php
echo '</fieldset></div><div class="left_footer_articles"></div><div class="right_footer_articles"></div><div class="center_footer_articles"></div><br>';
}
?>
</ul>

on retrouve le premier qui commence a afficher le bloc, le deuxieme affiche bien le lien suivant le bloc de menu mais le troisieme plante alors que j'ai bien diit de prendre les infos depuis la nouvele table et en repiquant l'id du liens precedent.

Voila aussi les export de table sql :p
jos_menu:
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- https://www.phpmyadmin.net/
--
-- Serveur: localhost
-- Généré le : Mer 10 Février 2010 à 19:00
-- Version du serveur: 5.1.36
-- Version de PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `jof`
--

-- --------------------------------------------------------

--
-- Structure de la table `jos_left`
--

CREATE TABLE IF NOT EXISTS `jos_left` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8 NOT NULL,
  `description` text CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

--
-- Contenu de la table `jos_left`
--

INSERT INTO `jos_left` (`id`, `title`, `description`) VALUES
(1, 'Acceuil', 'Accueil du site. Contient tout les liens important.'),
(2, 'Gloogloo', 'Google du site, sqimple teste de deuxieme bloc de menu');


jos_left_link:
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- https://www.phpmyadmin.net/
--
-- Serveur: localhost
-- Généré le : Mer 10 Février 2010 à 18:59
-- Version du serveur: 5.1.36
-- Version de PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: `jof`
--

-- --------------------------------------------------------

--
-- Structure de la table `jos_left_link`
--

CREATE TABLE IF NOT EXISTS `jos_left_link` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_jos_left` int(11) NOT NULL,
  `title` varchar(255) CHARACTER SET utf8 NOT NULL,
  `link` text CHARACTER SET utf8 NOT NULL,
  `description` text CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  KEY `jos_left` (`id_jos_left`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Contenu de la table `jos_left_link`
--

INSERT INTO `jos_left_link` (`id`, `id_jos_left`, `title`, `link`, `description`) VALUES
(1, 1, 'Accueil', '/index2.php?titre=titre&contenu=contenu&table=table', 'Liens de retour sur l''accueil.'),
(2, 2, 'Google', 'http://www.google.fr', 'direction google'),
(3, 2, 'Tyoogle', 'http://www.tyoogle.com/', ''),
(4, 1, 'Contact', '/jof/index.php', 'lien pour tester le double lien');


jos-left_linl2:
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- https://www.phpmyadmin.net/
--
-- Serveur: localhost
-- Généré le : Mer 10 Février 2010 à 19:00
-- Version du serveur: 5.1.36
-- Version de PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: `jof`
--

-- --------------------------------------------------------

--
-- Structure de la table `jos_left_link2`
--

CREATE TABLE IF NOT EXISTS `jos_left_link2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_jos_left_link` int(11) NOT NULL,
  `title` varchar(255) CHARACTER SET utf8 NOT NULL,
  `link` text CHARACTER SET utf8 NOT NULL,
  `description` text CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `jos_left_link2`
--

INSERT INTO `jos_left_link2` (`id`, `id_jos_left_link`, `title`, `link`, `description`) VALUES
(1, 4, 'Contactez zai', '/jof/index.php', 'voila le test en lui meme');


Voila, je rappelle juste que je cherche a faire un principe a la joomla, des liens enfants qui ne s'affiche que lorsque l'on a cliquez sur le lien parents et que l'on a changer de page.

Merci de votre aide precieuse
0
Camuke Messages postés 224 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 12 août 2011 88
11 févr. 2010 à 09:59
Le problème est tout simple en fait.

Tu fait ta 1er boucle qui affiche les diffèrent titre de menu. A l'intérieur de cette boucle, tu affiche les différent liens. Jusque la aucun problème.

La 3eme boucle maintenant, tu fait la requete :
Select id,title,link FROM jos_left_link2 WHERE id_jos_left_link = ".$donnees_left_linka['id']." ORDER BY id ASC"
$donnees_left_linka['id'] est égal a un champs de ta requête dans ta 2eme boucle, OR ta 3eme requête est en dehors de la 2eme boucle donc quand voila se que reçoit mysql :
Select id,title,link FROM jos_left_link2 WHERE id_jos_left_link = ORDER BY id ASC

Voila. Je te laisse essayer de trouver tout seul la solution, c'est quand même plus formateur. Dernier conseil, lorsque tu a une erreur avec une requête sql, fait un écho de la requête et regarde si tu vois pas quelque chose qui coince, si tu vois rien, tu l'exécute directement dans phpmyadmin pour voir si elle passe.
0
Profil bloqué
11 févr. 2010 à 13:51
ok, j'ai trouver, c'etait le } qui etait mal placer.
mais cela ne fonctionne pas comme je le pensait :(

Sait tu ou je peux trouver un tuto ou autre pour que le liens de la 3° boucles (et les autres qui viendront apres) n'appraissent que lorsque l'on clique sur le lien de la 2° boucle? (que l'on change de page ou non).

J'ai bien trouver deux trois script java qui permetent de replier le menu et de l'afficher quand c'est necessaire mais sans mysql derriere et en frame.
0