Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    recupero variabili con il doppio dollaro ( $$ )

    mi sa che il titolo non è molto chiaro, ora cerco si spiegare.

    Ho la necessità di costruire un menù ad albero gerarchico con i dati presi da una tabella mySQL. La tabella in questione ha questa struttura:

    codice:
    -- 
    -- Struttura della tabella `CATEGORIE`
    -- 
    
    CREATE TABLE `CATEGORIE` (
      `CATEGORIA_ID` int(10) unsigned NOT NULL auto_increment,
      `CATEGORIA` varchar(50) default NULL,
      `META` text,
      `CATEGORIA_PADRE_ID` int(11) NOT NULL default '0',
      PRIMARY KEY  (`CATEGORIA_ID`)
    ) TYPE=InnoDB AUTO_INCREMENT=14 ;
    
    -- 
    -- Dump dei dati per la tabella `CATEGORIE`
    -- 
    
    INSERT INTO `CATEGORIE` VALUES (1, 'Frutta', NULL, 0);
    INSERT INTO `CATEGORIE` VALUES (2, 'Banana', NULL, 13);
    INSERT INTO `CATEGORIE` VALUES (3, 'Mela', NULL, 13);
    INSERT INTO `CATEGORIE` VALUES (4, 'Secca', NULL, 1);
    INSERT INTO `CATEGORIE` VALUES (5, 'Arachidi', NULL, 4);
    INSERT INTO `CATEGORIE` VALUES (6, 'Pistacchi', NULL, 4);
    INSERT INTO `CATEGORIE` VALUES (7, 'Carne', NULL, 0);
    INSERT INTO `CATEGORIE` VALUES (8, 'Bibite', NULL, 0);
    INSERT INTO `CATEGORIE` VALUES (9, 'Rossa', NULL, 7);
    INSERT INTO `CATEGORIE` VALUES (10, 'Bianca', NULL, 7);
    INSERT INTO `CATEGORIE` VALUES (11, 'Pollo', NULL, 10);
    INSERT INTO `CATEGORIE` VALUES (12, 'Coca Cola', NULL, 8);
    INSERT INTO `CATEGORIE` VALUES (13, 'Fresca', NULL, 1);
    vi ho postato anche il dump dei dati così potete provare anche voi.
    io riesco a costruire la struttura ( grazie anche all'aiuto di gianaz che ieri mi ha dato l'input per procedere ):
    Codice PHP:
    $sql="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID=0";
    $res=mysql_query($sql);
    while (
    $row=mysql_fetch_assoc($res)){
        echo 
    "<a href=\"".$_SERVER['PHP_SELF']."?genitore=".$row['CATEGORIA_ID']."\">";
        echo 
    $row['CATEGORIA']."</a>
    "
    ;
        echo 
    mostraAlbero($row['CATEGORIA_ID'],1);
    }

    function 
    mostraAlbero($padre$livello) {
       
    $s="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID={$padre}";
       
    $r=mysql_query($s)or die("$s
    "
    .mysql_error());

       while (
    $row mysql_fetch_array($r)) {
           echo 
    str_repeat('...',$livello);
           echo 
    "<a href=\"".$_SERVER['PHP_SELF']."?genitore=".$row['CATEGORIA_ID']."\">";
           echo 
    $row['CATEGORIA']."</a>
    "
    ;
           
    mostraAlbero($row['CATEGORIA_ID'], $livello+1);
       }

    ecco, in questo modo io ottengo la mia bella struttura. Il problema ora è fare in modo che la struttura stia racchiusa in un menù ad albero dinamico. Quindi all'inizio io dovrei vedere le tra macro categorie e aprendone una vedo i "figli" di quella categoria. Un po' come la struttura a cartelle di windows per indenderci.

    Io ho scaricato un menù, ma purtroppo non mi ricordo da dove.

    in sostanza comunque, questo è il codice per creare il menù:

    Codice PHP:
    $menu=new HTML_TreeMenuXL();

    $nodeProperties=array("icon"=>"fld.gif"expanded=>false);
    $pageProperties=array("icon"=>"page.gif");


    $sql="SELECT * FROM CATEGORIE ORDER BY CATEGORIA_PADRE_ID ASC, CATEGORIA ASC";
    $res=mysql_query(sql);

    $sql="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID=0";
    $res=mysql_query($sql);
    $i=1;
    while (
    $row=mysql_fetch_assoc($res)){
        
    $nodo="node".$i;;
        $
    $nodo=new HTML_TreeNodeXL($row['CATEGORIA'], ""$nodeProperties);
            
    /*
            * questa istruzione mi crea i nodi "padre"
           */
        
    mostraAlbero($row['CATEGORIA_ID'], 1"$".$nodo);
        
    $menu->addItem($$nodo);
        
    $i++;
    }

    // poi ho la funzione ricorsiva che dovrebbe agganciare le foglie ai nodi padre
    function mostraAlbero($padre$livello$nodo) {
       
    $s="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID={$padre}";
       
    $r=mysql_query($s)or die("$s
    "
    .mysql_error());
       global 
    $node1;

       while (
    $row mysql_fetch_array($r)) {
          echo 
    $nodo;
          
    $subNode=&$nodo->addItem(new HTML_TreeNodeXL($row[CATEGORIA], ""$pageProperties));
          
    mostraAlbero($row['CATEGORIA_ID'], $livello+1,$nodo);
       }

    il problema è che in questo modo ottengo un fatal error del genere:
    Fatal error: Call to a member function on a non-object in /store/domains/test.evoltel.com/.../...menu/ins-categorie2.php on line 56

    dove alla linea 56 ho proprio la riga:

    $subNode=&$nodo->addItem(new HTML_TreeNodeXL($row[CATEGORIA], "", $pageProperties));

    non capisco il motivo dell'errore in quanto facendo scrivere $nodo mi restituisce correttamente $node1.

    Ho provato comunque a trasformare così la riga:

    codice:
    $subNode=&$node1->addItem(new HTML_TreeNodeXL($row[CATEGORIA], "", $pageProperties));
    e così funziona...mettendomi però tutto ovviamente sotto il primo nodo. Non capisco come mai...


    Chiedo scusa per il post un po' lunghetto, ma ho cercato di spiegare tutte le possibili alternative. Spero che qualcuno mi sappia dare una mano.



    Ringrazio anticipatamente!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    con queste 4 righe di codice mi sà che c'è qualcosa chè non va

    Codice PHP:
    $sql="SELECT * FROM CATEGORIE ORDER BY CATEGORIA_PADRE_ID ASC, CATEGORIA ASC";
    $res=mysql_query(sql);

    $sql="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID=0";
    $res=mysql_query($sql); 
    perchè la variabile $res tu la scrivi due volte perdendo il valore iniziale

    poi quando fai

    while ($row = mysql_fetch_array($r)) {
    echo $nodo;

    te lo stampa il valore $nodo ?

  3. #3
    Originariamente inviato da sideval
    con queste 4 righe di codice mi sà che c'è qualcosa chè non va

    ...
    perchè la variabile $res tu la scrivi due volte perdendo il valore iniziale

    poi quando fai

    while ($row = mysql_fetch_array($r)) {
    echo $nodo;

    te lo stampa il valore $nodo ?
    si scusa, ovviamente vale solo la seconda query, mi sono dimenticato di cancellarla

    si $nodo me lo stampa, l'ho scritto anche nel primo post:


    non capisco il motivo dell'errore in quanto facendo scrivere $nodo mi restituisce correttamente $node1.
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    hmmmm....

    :master:

    prova un po '


    Codice PHP:

    $subNode
    =&$$nodo->addItem(new HTML_TreeNodeXL($row[CATEGORIA], ""$pageProperties)); 
    tanto per provare tutto alla cieca perche per analizarlo corretamente mi devo ricostuire le tue tabelle e il codice completo della tua pagina-

  5. #5
    ho provato a fare $$nodo ma non cambia niente, ottengo sempre l'errore.

    Comunque il succo è questo:

    se nella funzione mostraAlbero io metto $node1 al posto di $nodo (che contiene esattamente $node1) funziona...e non ne capisco il motivo. Io ho bisogno di passare $nodo perché in questo cambia il suffisso a seconda del nodo che sto disegnando. Quindi la prima volta è 1, poi 2, 3 e così via
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    lasciate perdere...questo menù mi sa che in questo caso non lo posso usare.

    se avete un qualche altro menù da suggerirmi...








    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.