Page 1 sur 3

[menu javascript//php/mysql ?]

Posté : 17 févr. 2006, 17:17
par vincedjs
-Bonjour, voila mon application (.php) rassemble des fiches de renseignements (numfiche, nomfiche, etc...).

Explications:

-Je dois réaliser un menu vertical qui lorsque je clic sur 1 catégorie m'affiche toutes les fiches ( Contenu dans la BDD mysql ) liées à cette catégorie en sous menu.

-Ainsi il s'agirait d'un menu avec arborescence pour chaque catégorie, "sur clic ou mouseover peu importe", des fiches classés par catégorie en sous menu :lol: .

-Ensuite lorsque je clic sur le nom de la fiche qui apparait donc, toute les informations de cette fiche doivent remplir les texarea, champ de texte et boutons de mon formulaire qui d'ailleur sert de formulaire de saisie également pour permettre de consulter les fiches ( bdd ).


Problème:


1) Est-ce réalisable ?

2) Le javascript est-il l'outil le plus adapté ?

3) Quelqu'un a t-il une expérience en la matiere pour m'aider un petit peu ? :)

4) Ou trouvé 1 exemple pour moi démarrer car je ne sais pas du tout par ou commencer, je suis perdu :?


ps: je débute :lol:

merci beaucoup 8)

Posté : 17 févr. 2006, 18:53
par Truc
Salut,

je te propose de jetter un oeil au menus CSS

ensuite effectuer quelques tutos pour débuter :wink:

Posté : 20 févr. 2006, 10:42
par Invité
re bonjour, merci de votre réponse, donc après quelques lectures, j'ai une idée pouvai vous me dire si je vais dans la bonne direction ou dans le mur :lol:

A l'aide du site sur les menus css, appliqué 1 menu identique et ainsi sur:
<dd id="Catégorie 1" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre();">
				<ul>
					<li><a href="#">enregistrement 1</a></li>
					<li><a href="#">enregistrement 2</a></li>
					<li><a href="#">enregistrement 3</a></li>

.........
effectué une boucle jusqu'à "fin d'enregistrements"

sur:
href="#">enregistrement 3</a></li>
et ainsi ajouté chaque ligne de mon champs ?

thx


Vous allez dire "bein pourquoi il le fait pas au lieu de demandé" :lol: , mais comme je débute je préfére m'orienté dans la bonne direction avant d'attaquer la chose. :)

Posté : 20 févr. 2006, 14:02
par Truc
Vous allez dire "bein pourquoi il le fait pas au lieu de demandé" :lol:
Pour tout te dire... c'est exactement ce que je me suis dis :lol:

Mais c'est ce qu'il faut faire... boucler sur tout ceci:
<li><a href="#">enregistrement 3</a></li>
de <li> à </li>

Posté : 20 févr. 2006, 17:01
par Invité
Pour l'instant je peut pas tester :lol:

j'ai ecrit ca:
<?php
include ("mysqlconnect.php"); 
	//requete SQL:
	$sql = "SELECT applicationModR, nomProjet 
	FROM modulered
	WHERE nomProjet="REDLIFT";

	//execution de la requÍte:
	$requete = mysql_query( $sql );

while( $result = mysql_fetch_object( $requete ) )
	{	
		<dt onclick="javascript:montre('".$result->applicationModR."');">".$result->applicationModR."</dt>
			<dd id=".$result->applicationModR.">
				<ul>
				//requete SQL:
				$sql2 = "SELECT numFiche, nomFiche
				FROM fiches
				WHERE enseigne =".$result->nomProjet.";
				
				//execution de la requÍte:
				$requete2 = mysql_query( $sql2 );
				while( $result2 = mysql_fetch_object( $requete2 ) )
					{
					<li><a href="#">".$result2->nomFiche."</a></li>
					}
	}
?>
Ca sera bien comme ca ? une boucle pour le titre du menu principale avec donc le contenu d'une table. Puis une deuxieme boucle à l'intérieur qui affiche mes enregistrement jusqu'au derniers dans:


<li><a href="#">".$result2->nomFiche."</a></li>

Posté : 20 févr. 2006, 18:56
par Truc
regarde un peu ce sujet pour l'organisation de la requete et la construction d'un menu avec sous menus

Posté : 21 févr. 2006, 12:45
par VinceDJs2
Je pense pas que ca me concerne, puisque je ne veux pas afficher de compeur je veux simplement créer des grandes rubriques à partir d'une table, et les sous rubriques a partir d'une autres, tout un menu css donc.

En tout cas je m'en suis inspiré. Cepandant j'ai une fatal erreur qui provient de ma boucle "while" grr :?
Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\rbdc\testmenu3.php on line 31

voici le code:
<dl id="menu1">
<?php
include ("mysqlconnect.php");
$comptcat=1;
$comptsouscat=1;
//requete grandes rubriques
$sql = "SELECT applicationModM, nomProjet 
FROM modulemis 
WHERE nomProjet = 'MIS'";
$requete = mysql_query($sql);
$nombrelignessql1=mysql_num_rows($requete);

while( $comptcat <= $nombrelignessql1)?>
	{
	<?php $comptcat++; ?>
			<dt onclick="javascript:montre('smenu1');">Menu 1</a></dt>
		<dd id="smenu1">
				<ul>
				<?php 
				//requete sous rubrique => enregistrements
				$sql2 = "SELECT numFiche, nomFiche
				FROM fiches
				WHERE enseigne ='$result->applicationModM.'";
				$requete2 = mysql_query($sql2);
				$nombrelignessql2=mysql_num_rows($requete2);
				while( $comptsouscat <= $nombrelignessql2) ?>
					{
					<?php $comptsouscat++; ?>
					<li><a href="#">Sous-Menu 1.1</a></li>
					}
				</ul>
			</dd>
	}			
</dl>
j'effectue donc ma 1ere requete permettant d'extraire les catégories d'une table 'applicationModM', je compte le nombre d'enregistrement afin de fixer un nombre de catégorie de menu
$nombrelignessql1=mysql_num_rows($requete);
et donc tant que le nombre de rubrique cf: $comptcat n'atteint pas le nombre d'enregistrement, les catégories s'ajoute:
while( $comptcat <= $nombrelignessql1)?>

La fonction:
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=20; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
aide de : http://css.alsacreations.com/Galeries-de-menus-en-CSS


Donc voila :cry: , je vois pas si ma boucle est bonne a mon avis non vu l'erreur, comment boucler et
comment incrémenter correctement dans la boucle les lignes:
<dt onclick="javascript:montre('smenu1');">Menu 1</a></dt> 
        <dd id="smenu1"> 
et
<li><a href="#">Sous-Menu 1.1</a></li>

Posté : 22 févr. 2006, 01:42
par Truc
voila une base, tu devras peut être remplacer les noms des champs étant donné que tu n'as pas précisé quels champs sont les menu et sous-menus:
<dl id="menu1">
<?php
include ("mysqlconnect.php");

$nom_projet = "MIS";

//requete grandes rubriques
$sql = "SELECT m.applicationModM, m.nomProjet, f.numFiche, f.nomFiche
FROM modulemis m, fiches f 
WHERE m.nomProjet = '".$nom_projet."' AND enseigne = m.applicationModM
ORDER BY m.nomProjet, f.numFiche";

$requete = mysql_query($sql);

$menu= "";
$i=1;

$fin = false;

while($data = mysql_fetch_array($requete)) 
{ 
   if($menu != $data['nomProjet'])
   {	
		if($i != 1)
		{
?>
			</ul>
				</dd>
<?
		}
?>
	    <dt onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();">
			<a href="#"><? echo $data['nomProjet']; ?></a>
	    </dt>
		<dd id="smenu<? echo $i; ?>" onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();">
			<ul>
<?
	}	
?>	
				<li><a href="#"><? echo $data['nomFiche']; ?></a></li>		
<?
	$i++;
}   
?>         
</dl>
Ce n'est bien sûr pas testé :wink:

Posté : 22 févr. 2006, 11:37
par vincedjs
Déja merci beaucoup pour ce code :shock: t'es le seul a bien vouloir m'aider sur tout les forums, trop prise de tete pour certain(e)s 8)
tu n'as pas précisé quels champs sont les menu et sous-menus:
Les menus sont "applicationModM" et sous menu "numFiche": C'est désormais compléter il me semble :)

-J'ai plusieurs questions :lol: :

-J'ai l'erreur suivante pourtant les incolades sont ouverte/fermer, et les ";" correctements insérer non ? :?
La ligne 65 c'est la dernier ligne
</html>
Parse error: syntax error, unexpected $end in C:\wamp\www\rbdc\testmenu4.php on line 65
-Sinon est tu bien sur de
if($menu != $data['applicationModM']) 
" != ". En faite je comprend l'ensemble mais les "!= " pas ici :?

-Derniere question :lol: , je voudrai une fois ce code réaliser, lorsque l'on clique sur 1 enregistrement "numFiche" ( sous menu ) qu'au lieu d'utiliser <a href="#">, remplir le formulaire ou j'ai effectuer mes saisies de fiches d'informations par les données de cette fiche sélectionner du sous menu. 8) . Est ce réalisable ? ca serai donc je pense une fonction javascript avec argument sur onclick= fonction_remplir_fiche( nomFiche ) => "nomFiche" est unique.

Enfin, je sais pas si vous etes perdu, moi ca va :D
<body>
<dl id="menu1"> 
<?php 
include ("mysqlconnect.php"); 

$nom_projet = "MIS"; 

//requete grandes rubriques 
$sql = "SELECT m.applicationModM, m.nomProjet, f.numFiche, f.nomFiche 
FROM modulemis m, fiches f 
WHERE m.nomProjet = '".$nom_projet."' AND enseigne = m.applicationModM 
ORDER BY m.nomProjet, f.numFiche"; 

$requete = mysql_query($sql); 

$menu= ""; 
$i=1; 

$fin = false; 

while($data = mysql_fetch_array($requete)) 
	{ 
	if($menu != $data['applicationModM']) 
		{     
		if($i != 1) 
			{ 
?> 
            </ul> 
            </dd> 
<? 
			} 
?> 
		<dt onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();"> 
		<a href="#"><? echo $data['applicationModM']; ?></a> 
		</dt> 
		<dd id="smenu<? echo $i; ?>" onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();"> 
		<ul> 
<? 
		}     
?>     
	<li><a href="#"><? echo $data['nomFiche']; ?></a></li>         
<? 
    $i++; 
	}    
?>          
</dl> 

Posté : 22 févr. 2006, 12:28
par Truc
Déja merci beaucoup pour ce code :shock: t'es le seul a bien vouloir m'aider sur tout les forums, trop prise de tete pour certain(e)s 8)
Bon eh bien tu peux laisser les autres Forums étant donné que "crossposting" est interdit (=> règlements)
Les menus sont "applicationModM" et sous menu "numFiche": C'est désormais compléter il me semble :)
Donc il faut modifier la requete en enlevant:
m.nomProjet = '".$nom_projet."' AND
sinon il n'y aura pas tous les projets.
-J'ai l'erreur suivante pourtant les incolades sont ouverte/fermer, et les ";" correctements insérer non ? :?
La ligne 65 c'est la dernier ligne
</html>
il n'y a pas les 65 lignes présentes ici, si le message indique la fin il manque certainement une fermeture d'accolade verifis bien ou alors une parenthèse dans un test if().
-Sinon est tu bien sur de
if($menu != $data['applicationModM']) 
" != ". En faite je comprend l'ensemble mais les "!= " pas ici :?
"!=" est la différence... c'est pour repérer le menu et sous menus, qi les 2 varaibles sont différentes alors cela veut dire qu'il faut inscrire le titre du menu sinon on passe ces instructions et on écrit un sous-menu.
je voudrai une fois ce code réaliser (...)
On va déja terminer le code et verifier sa construction.

Mais il va déjà falloir changer cette ligne:
<li><a href="#"><? echo $data['nomFiche']; ?></a></li>
en quelque chose comme:
<li><a href="page_formulaire.php?<? echo $data['nomFiche']; ?>"><?
echo $data['numFiche']; ?></a></li>
Commence par afficher la requete générée, ici $sql, avec un echo puis exécute la dans phpmyadmin (par exemple) pour verifier si elle retourne bien tous les menu et sous menus:
echo 'La requete générée est: <br />'.$sql

Posté : 22 févr. 2006, 13:23
par Invité
Bon eh bien tu peux laisser les autres Forums étant donné que "crossposting" est interdit (=> règlements)
Désolé je savai pas, j'ai mi mon sujet en résolu dans 1 forum concurent donc :wink:
Les menus sont "applicationModM" et sous menu "numFiche": C'est désormais compléter il me semble :)
Donc il faut modifier la requete en enlevant:
m.nomProjet = '".$nom_projet."' AND
sinon il n'y aura pas tous les projets.
Voilà c'est fait 8). De toute facon j'ai 1 table pour chaque projet avec les modules (=>"applicationModM") de ce projet Table "modulemis" et modules (=>"applicationModR") de ce projet Table "modulered". Car j'aurai 2 menus a faire pour 2 nomProjet donc. Ce n'est pas un probleme je remplacerai FROM "modulemis m" par "modulered m2" :lol:
-J'ai l'erreur suivante pourtant les incolades sont ouverte/fermer, et les ";" correctements insérer non ? :?
La ligne 65 c'est la dernier ligne
</html>
il n'y a pas les 65 lignes présentes ici, si le message indique la fin il manque certainement une fermeture d'accolade verifis bien ou alors une parenthèse dans un test if().
voici le code complet et franchement je ne trouve rien d'anormal syntaxiquement.
<script type="text/javascript">
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
</script>
</head>
<body> 
<dl id="menu1"> 
<?php 
include ("mysqlconnect.php"); 

//requete grandes rubriques 
$sql = "SELECT m.applicationModM, m.nomProjet, f.numFiche, f.nomFiche 
FROM modulemis m, fiches f 
WHERE enseigne = m.applicationModM 
ORDER BY m.applicationModM, f.numFiche"; 

$requete = mysql_query($sql); 

$menu= ""; 
$i=1; 

$fin = false; 

while($data = mysql_fetch_array($requete)) 
    { 
    if($menu != $data['applicationModM']) 
        {      
        if($i != 1) 
            { 
?> 
            </ul> 
            </dd> 
<? 
            } 
?> 
        <dt onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();"> 
        <a href="#"><? echo $data['applicationModM']; ?></a> 
        </dt> 
        <dd id="smenu<? echo $i; ?>" onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();"> 
        <ul> 
<? 
        }      
?>      
    <li><a href="#"><? echo $data['nomFiche']; ?></a></li>          
<? 
    $i++; 
    }     
?>           
</dl> 
</body>
</html>

je voudrai une fois ce code réaliser (...)
On va déja terminer le code et verifier sa construction.
:wink:
Mais il va déjà falloir changer cette ligne:
<li><a href="#"><? echo $data['nomFiche']; ?></a></li>
en quelque chose comme:
<li><a href="page_formulaire.php?<? echo $data['nomFiche']; ?>"><?
echo $data['numFiche']; ?></a></li>
<a href="page_formulaire.php?> Comme j'utiliserai une fonction javascript pour remplir les champs de saisie d'un formulaire par les données de la fiche sélectionner. ca fera plutot onlick="fonction(nomfiche)" Je pense...
Commence par afficher la requete générée, ici $sql, avec un echo puis exécute la dans phpmyadmin (par exemple) pour verifier si elle retourne bien tous les menu et sous menus:
echo 'La requete générée est: <br />'.$sql
je peu pas faire l'echo la page me met l'erreur précédement poster.

ma requete modifier:

Code : Tout sélectionner

$sql = "SELECT m.applicationModM, m.nomProjet, f.numFiche, f.nomFiche FROM modulemis m, fiches f WHERE enseigne = m.applicationModM ORDER BY m.applicationModM, f.numFiche";
j'effectue donc sous phpmyadmin la requete:

Code : Tout sélectionner

SELECT m.applicationModM, m.nomProjet, f.numFiche, f.nomFiche FROM modulemis m, fiches f WHERE f.enseigne = m.applicationModM ORDER BY m.applicationModM, f.numFiche;
AP MIS 83 zazaz
AP MIS 84 ffz
AP MIS 85 dz
AP MIS 86 eg
PO MIS 82 zdz

Posté : 22 févr. 2006, 13:27
par vincedjs
oups désolé c etait bien moi, et donc poru la requete ca fonctionne :wink:

Posté : 22 févr. 2006, 14:13
par Truc
Désolé je savai pas, j'ai mi mon sujet en résolu dans 1 forum concurent donc :wink:
Ce n'est pas vraiment un problème pour la conurence mais juste que tu peux avoir un réponse dans un autre forum et ici on continu a se "prendre la tete" dessus :?
voici le code complet et franchement je ne trouve rien d'anormal syntaxiquement.
il n'y a pas de balise d'ouverture <html><head>... verifis aussi dans le fichier inclus mysqlconnect.php.

La requete semble bonne donc on avance
Une fois que le menu sera affiché on regarde les liens :wink:

Posté : 22 févr. 2006, 15:08
par Invité
il n'y a pas de balise d'ouverture <html><head>... verifis aussi dans le fichier inclus mysqlconnect.php.

si c'est que je n'allai pas poster ce qui me paraisser évident voila donc le code complet complet :D

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test menu3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="css/style3.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
</script>
</head>
<body> 
<dl id="menu1"> 
<?php 
include ("mysqlconnect.php"); 

//requete grandes rubriques 
$sql = "SELECT m.applicationModM, m.nomProjet, f.numFiche, f.nomFiche 
FROM modulemis m, fiches f 
WHERE enseigne = m.applicationModM 
ORDER BY m.applicationModM, f.numFiche"; 

$requete = mysql_query($sql); 

$menu= ""; 
$i=1; 

$fin = false; 

while($data = mysql_fetch_array($requete)) 
    { 
    if($menu != $data['applicationModM']) 
        {      
        if($i != 1) 
            { 
?> 
            </ul> 
            </dd> 
<? 
            } 
?> 
        <dt onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();"> 
        <a href="#"><? echo $data['applicationModM']; ?></a> 
        </dt> 
        <dd id="smenu<? echo $i; ?>" onmouseover="javascript:montre('smenu<? echo $i; ?>');" onmouseout="javascript:montre();"> 
        <ul> 
<? 
        }      
?>      
    <li><a href="#"><? echo $data['nomFiche']; ?></a></li>          
<? 
    $i++; 
    }     
?>           
</dl> 
</body>
Ligne 63 => </html>
j'ai donc l'erreur qui m'empeche d'aller plus loin :cry:

Code : Tout sélectionner

Parse error: syntax error, unexpected $end in C:\wamp\www\rbdc\testmenu4.php on line 63
:wink: [/php]

Posté : 22 févr. 2006, 15:38
par Truc
Déja l'erreur indique une variable $end..... il n'y en as pas dans ce script :?

que contient "mysqlconnect.php" hormis les identifiants de connexion ?