Menu di Navigazione

Ho creato un file chiamato MenuString che deve creare una stringa formattata con una determinata sintassi vi posto il codice

<?
$Profilo = $_SESSION["Profilo"];

//include "connessione.php";

$selmenu =  "select * from Menu where Profilo = '$Profilo'";

$querymenu = mysql_query ($selmenu,$connes)
                or die ("Non riesco ad eseguire la richiesta, torna indietro");

while ($valmenu = mysql_fetch_array ($querymenu)) {
   $Descr      = $valmenu ["Descr"];
   $Link     = $valmenu ["Link"];
   $PrimoLivello = $valmenu ["MenuLev1"];
   $SecondoLivello = $valmenu ["MenuLev2"];
        $CodProg = $valmenu ["CodProg"];
   $CodFunz = $valmenu ["CodFunz"];

        for ($i=0;$CodProg>$i;$i++) {

            if ((($PrimoLivello > 0) && ($SecondoLivello > 0)) AND (($CodProg <> 0) && ($CodFunz <> 0))) {

                                        // secondo livello
                    $MenuString_Lev2 = "{||".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";
                                } else if ($PrimoLivello == 0) {
                                        // principale
                                        if (($CodProg == 0) && ($CodFunz == 0)) {
                                                $MenuString_Princ ="{".$Descr."}";
                    } else {
                       $MenuString_Princ = "{".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

                                        }
              } else {
                    // primo livello
                                        if (($CodProg == 0) && ($CodFunz == 0)) {
                                                $MenuString_Lev1 = "{|".$Descr."}";
                    } else {
                       $MenuString_Lev1 = "{|".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

                              }
                        }
       }

 }
//visualizza una voce di menu fissa con Descrizione Uscita
$Exit = "{Uscita,logout.php ,_top}";
$MenuString = $MenuString_Princ.$MenuString_Lev1.$MenuString_Lev2;
$PARAMETRI_MENU = $MenuString.$Exit;
?>

La stringa viene formattata in questo modo e mi segnala questi errori:

Notice: Undefined variable: MenuString_Princ in C:\Programmi\ApacheGroup\Apache2\www\ProtocolliWebEnt\php\MenuString.php on line 48 Notice: Undefined variable: MenuString_Lev1 in C:\Programmi\ApacheGroup\Apache2\www\ProtocolliWebEnt\php\MenuString.php on line 48 {||Link3,javascript:jumpTo('Link3','.php','main'),main}{Uscita,logout.php ,_top}  :crazy:

inviato 10 anni fa
EKELON77
X 0 X

Non ho il tempo di controllare il codice ma l'errore ti segnala l'uso di una variabile non ancora inizializzata (senza valore).

Controlla quindi come mai vai a leggere il valore di una variabile prima di averglielo assegnato.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Per la segnalzione di errore sono d'accordo è perchè quella variabile non viene inizializzata ma il problema che cicla correttamente il codice e non appende correttamente la stringa?? O0 :crazy:

risposto 10 anni fa
EKELON77
X 0 X

Sei sicuro che la stringa $MenuString_Princ venga inizializzata correttamente? Dal codice ho visto che salvi un valore solo quando il primo controllo non va a buon fine e ($PrimoLivello == 0).... prova a controllare il valore di $PrimoLivello; altrimenti potresti inizializzare la variabile.

Mi permetto di darti un consiglio... cerca di commentare il codice soprattutto quando hai cicli innestati per facilitare la lettura ad un altro programmatore e soprattutto per quando riprenderai in mano il codice dopo un po' di tempo! Te lo assicuro.. non è una perdita di tempo!

Buon lavoro

Zeta80

risposto 10 anni fa
zeta80
X 0 X

La stringa $MenuString_Princ venga inizializzata correttamente anzi adesso la stringa è la seguente

{Entra}{Uscita,logout.php ,_top} per n volte il ciclo for va in loop

Cmq. non ho messo commenti perchè non ci lavoro ha tempo pieno e non credo di riuscire a farla funzionare, almeno che qualche  :angel: non mi da un'aiuto.

risposto 10 anni fa
EKELON77
X 0 X

Ciao,

visto che non riesco a riprodurre il tuo DB riusciresti a darmi dei valori di queste variabili?

   $Descr      = $valmenu ["Descr"];

   $Link     = $valmenu ["Link"];

   $PrimoLivello = $valmenu ["MenuLev1"];

   $SecondoLivello = $valmenu ["MenuLev2"];

        $CodProg = $valmenu ["CodProg"];

   $CodFunz = $valmenu ["CodFunz"];

Per stamparli basta un echo "$Descr=".$Descr... ecc. Non sono un  :angel: ma cerco di aiutarti il più possibile!! Attendo tue notizie...

risposto 10 anni fa
zeta80
X 0 X
<?
//CARICO IN SESSIONE IL PROFILO CHE PUO' ESSERE 'U' PER UTENTE o 'A' PER ADMINSTRATOR
$Profilo = $_SESSION["Profilo"];

//include "connessione.php";


//ESEGUO UNA SELECT E PASSANDOGLI LA VARIAILE $PROFILO
$selmenu =  "select Menu.Descr,Menu.Link,Menu.MenuLev0,Menu.MenuLev1,Menu.MenuLev2,Menu.Flag from Menu where Profilo = '$Profilo'";

$querymenu = mysql_query ($selmenu,$connes)
                or die ("Non riesco ad eseguire la richiesta, torna indietro");

//CREO UN ARRAY CON I VALORI DELLA PRIMA RIGA DEL RECORD
$valmenu = mysql_fetch_array($querymenu);
   $Descr     = $valmenu ["Descr"];
   $Link     = $valmenu ["Link"];
   $PrimoLivello = $valmenu ["MenuLev1"];
   $SecondoLivello = $valmenu ["MenuLev2"];
   $Flag = $valmenu ["Flag"];

//ESEGUO UN CICLO FOR DEL $PrimoLivello CHE HA 0 COME VALORE E DEVE CICLARE PER 9 VOLTE
for ($i = count($PrimoLivello); $i <= 9;$i++)
{

            if (($PrimoLivello > 0) && ($SecondoLivello > 0) && ($Flag == "No")) {
                                        // secondo livello
                    $MenuString_Lev2 = "{||".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";
                                } else if ($PrimoLivello == 0) {
                                        // principale
                                        if ($Flag == "Si") {
                                                $MenuString_Princ = "{".$Descr."}";
                    } else {
                       $MenuString_Princ = "{".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

                                        }
              } else {
                    // primo livello
                                        if ($Flag == "Si") {
                                                $MenuString_Lev1 = "{|".$Descr."}";
                                        } else {
                       $MenuString_Lev1 = "{|".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

                              }

                           }
     }
     $MenuString = $MenuString_Princ.$MenuString_Lev1.$MenuString_Lev2;
//visualizza una voce di menu fissa con Descrizione Uscita
$Exit = "{Uscita,logout.php ,_top}";
$PARAMETRI_MENU = $MenuString.$Exit;
?>

Ho aggiornato il codice e aggiunto qualche commento spero che ti possa essere utile e ti aggiungo anche l'export del db della tabella menu e operatori:

-- phpMyAdmin SQL Dump

-- version 2.8.0.3

-- http://www.phpmyadmin.net

--

-- Host: localhost

-- Generato il: 30 Set, 2006 at 12:44 PM

-- Versione MySQL: 5.0.18

-- Versione PHP: 5.1.2

--

-- Database: `gestprotocolli`

--

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

--

-- Struttura della tabella `menu`

--

CREATE TABLE `menu` (

  `IdMenu` int(10) unsigned NOT NULL auto_increment,

  `Descr` varchar(50) NOT NULL,

  `Link` varchar(50) NOT NULL,

  `MenuLev0` int(1) NOT NULL,

  `MenuLev1` int(1) NOT NULL,

  `MenuLev2` int(1) NOT NULL,

  `Profilo` varchar(1) NOT NULL,

  `Flag` enum('Si','No') NOT NULL,

  PRIMARY KEY  (`IdMenu`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--

-- Dump dei dati per la tabella `menu`

--

INSERT INTO `menu` (`IdMenu`, `Descr`, `Link`, `MenuLev0`, `MenuLev1`, `MenuLev2`, `Profilo`, `Flag`) VALUES (1, 'Entra', '', 0, 0, 0, 'U', 'Si'),

(2, 'Menu1', '', 0, 1, 0, 'U', 'Si'),

(3, 'Menu2', '', 0, 2, 0, 'U', 'Si'),

(8, 'eNTRA2', '', 1, 0, 0, 'U', 'Si'),

(9, 'Link3', '.php', 0, 2, 1, 'U', 'No');

e

-- phpMyAdmin SQL Dump

-- version 2.8.0.3

-- http://www.phpmyadmin.net

--

-- Host: localhost

-- Generato il: 30 Set, 2006 at 12:45 PM

-- Versione MySQL: 5.0.18

-- Versione PHP: 5.1.2

--

-- Database: `gestprotocolli`

--

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

--

-- Struttura della tabella `operatori`

--

CREATE TABLE `operatori` (

  `IdUsPwd` int(10) unsigned NOT NULL auto_increment,

  `Username` varchar(12) NOT NULL,

  `Password` varchar(32) NOT NULL,

  `Nome` varchar(50) NOT NULL,

  `Cognome` varchar(50) NOT NULL,

  `Cdc` int(4) NOT NULL,

  `Profilo` varchar(1) NOT NULL,

  PRIMARY KEY  (`IdUsPwd`,`Username`,`Password`),

  KEY `IdUsPwd` (`Username`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--

-- Dump dei dati per la tabella `operatori`

--

INSERT INTO `operatori` (`IdUsPwd`, `Username`, `Password`, `Nome`, `Cognome`, `Cdc`, `Profilo`) VALUES (2, 'Demo', 'fe01ce2a7fbac8fafaed7c982a04e229', 'Demo', 'Demo', 0, 'U');

Spero che ti possa essere utile.  O0

risposto 10 anni fa
EKELON77
X 0 X

Ciao,

in base ai dati che mi hai passato e dopo aver modificato un po' lo script sono arrivato a questa soòuzione:

{Entra}{eNTRA2}{|Menu1}{|Menu2}{||Link3,javascript:jumpTo('Link3','.php','main'),main}{Uscita,logout.php ,_top}

E' quella corretta? Se sì, posto il codice, altrimenti riusciresti a dirmi quale sequenza vorresti ottenere?

Ciao

Zeta

risposto 10 anni fa
zeta80
X 0 X

Ciao Zeta,

Ho analizzato i precedenti post e purtroppo la stringa non è corretta e ti spiego anche perchè:

Dalla base dati preleva le informazioni che stanno ha 0 per creare il menu principale nel campo MenuLev1, purtroppo i valori descritti "entra" ed "entra2" pur avendo nel MenuLev0 due valori diversi ovvero uno 0 e

l'altro  1 non riesce a capire come comportarsi quando accade che i valori del MenuLev1 sono ha 0 per 2 livelli principali infatti nella tua stringa è

{Entra}{eNTRA2}{|Menu1}{|Menu2}{||Link3,javascript:jumpTo('Link3','.php','main'),main}{Uscita,logout.php ,_top}

invece dovrebbe essere {Entra}{|Menu1}{|Menu2}{||Link3,javascript:jumpTo('Link3','.php','main'),main}{eNTRA2}{Uscita,logout.php ,_top} non funzionerebbe ugualmente ma quello si andrebbe a risolvere popolando la tabella per i valori di entra2.

Grazie per la tua disponibilità.

risposto 10 anni fa
EKELON77
X 0 X

Ciao,

grazie per la spiegazione... anche se hai detto "non funzionerebbe ugualmente ": che cosa intendi?

La stringa che ho ottenuto è il risultato di una modifica nella costruzione dei cicli dell'algoritmo. Pensavo che almeno la parte contenente gli if fosse corretta!

Ora mi adopero per sistemare il problema.

Attendo tue notizie

Buona giornata

Zeta

risposto 10 anni fa
zeta80
X 0 X

Intendo che funzionerebbe se ci fosserò delle sotto-voci di menu nel db per la voce "entra2",

cmq. la parte delle IF sono corrette altrimenti non creava la stringa.

Grazie e Attendo tue risposte.

Buona Giornata anche a te.

Ekelon77

risposto 10 anni fa
EKELON77
X 0 X

Ciao,

finalmente ho trovato la soluzione!!! Solo che mi sono dimenticato di portarmi dietro il codice :(

Stasera o alla peggio domani mattina lo posto.

Scusa l'attesa.

Buona giornata

Zeta

risposto 10 anni fa
zeta80
X 0 X

Come promesso ecco qui il codice:

<?

# Carico in sessione il profilo:

# 'U' per utente o 'A' per Amministratore

$Profilo = "U";

# connessione al DB

# Da inserire....

# Eseguo una select sul menù da creare per il profilo scelto

# ordinando in maniera crescente i vari livelli di menù

$selmenu =  "select Descr, Link, MenuLev0, MenuLev1, MenuLev2, Flag from Menu where Profilo = '".$Profilo."' order by MenuLev0, MenuLev1, MenuLev2";

# Eseguo la query

$querymenu = mysql_query($selmenu)

            or die ("Non riesco ad eseguire la richiesta, torna indietro");

# Per tutte le righe ottenute

for ($i = 0; $i < mysql_num_rows($querymenu); $i++) {

   # Salvo il valore in un array numerato (0, 1, ...)

   # Con la seguente struttura:

   #    [0] => Array

    #    (

    #        [Descr] => Entra

    #        [Link] =>

    #        [MenuLev0] => 0

    #        [MenuLev1] => 0

    #        [MenuLev2] => 0

    #        [Flag] => Si

    #    )

   $valmenu[$i] = mysql_fetch_array($querymenu, MYSQL_ASSOC);   

}

# Inizializzo la stringa di menù

$menu = "";

# Passo tutte le righe di risultato della mia select

for ($i = 0; $i < count($valmenu); $i++) {

   # Salvo i valori in variabili temporanee

   $Descr          = $valmenu[$i]["Descr"];

   $Link          = $valmenu[$i]["Link"];

   $PrimoLivello    = $valmenu[$i]["MenuLev1"];

   $SecondoLivello = $valmenu[$i]["MenuLev2"];

   $Flag         = $valmenu[$i]["Flag"];

      if (($PrimoLivello > 0) && ($SecondoLivello > 0) && ($Flag == "No")) {

   # secondo livello

       $menu .= "{||".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

    } else if ($PrimoLivello == 0) {

      # principale

        if ($Flag == "Si") {

          $menu .= "{".$Descr."}";

       } else {

          $menu .= "{".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

        }

   } else {

      # primo livello

        if ($Flag == "Si") {

         $menu .= "{|".$Descr."}";

        } else {

         $menu .= "{|".$Descr.",javascript:jumpTo('".$Descr."','".$Link."','main'),main}";

        }

   } # end else primo livello

}  # end for

# Aggiungo una voce di menu fissa con Descrizione Uscita

$Exit = "{Uscita,logout.php ,_top}";

echo $PARAMETRI_MENU = $menu.$Exit;

?>

In testata mancano le stringhe di connession al DB... Per qualsiasi dubbio sono a tua disposizione!

A presto

Zeta

risposto 10 anni fa
zeta80
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda