Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-10-2008, 11:30   #1
frizzo28
Senior Member
 
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
[php/mysql] Organizzare categorie e sottocategorie

Visto che un'esempio vale piu' di mille parole vi posto subito un immaggine:

Sulla destra vedete la tabella SQL sulla sinistra il risultato che vorrei ottenere tramite il PHP. Praticamente stampare a video quella tabella come una serie di liste nidificate( UL,LI ).
Il mio problema e' proprio a livello di algoritmo non riesco a trovare un modo per gestire correttamente categorie e sottocategorie...
Avete qualche idea?

p.s La tabella che vedete nell'immaggine e' cosi' organizzata
id_cat=Id della categoria univoco
nome=Il nome della categoria/sottogategoria
id_principale=Settato a 0 se e' un categoria principale altrimenti settato al valore dalla categoria "padre"...
grazie
ciao
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM
-Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd)

Ultima modifica di frizzo28 : 28-10-2008 alle 11:33.
frizzo28 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 12:26   #2
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
mi sono imbattuto in una situazione simile alla tua, se non identica e ho risolto creando prima un array contenente tutti i dati:

Codice:
while ($row = $stmt->fetch())
                {
                    if ($row['id_principale'] == 0)
                    {
                        $db_data[$row['nome']] = array();

                        $db_data[$row['nome']]['desc'] = $row['desc'];
                        $db_data[$row['nome']]['link'] = $row['link'];
                        $db_data[$row['nome']]['selected'] = ($item == $row['nome']) ? 1 : 0;
                        $db_data[$row['nome']]['subs'] = array();
                    }
                    else
                    {
                        if (array_key_exists($row['id_principale'], $db_data))
                        {
                            $db_data[$row['id_principale']]['subs'][$row['nome']] = array();
                            $db_data[$row['id_principale']]['subs'][$row['nome']]['desc'] = $row['desc'];
                            $db_data[$row['id_principale']]['subs'][$row['nome']]['link'] = $row['link'];
                            $db_data[$row['id_principale']]['subs'][$row['nome']]['selected'] = ($item == $row['nome']) ? 1 : 0;
                        }
                    }
                }
a questo punto ti è più comodo, visto che se un padre ha dei figli te li ritrovi nell'array subs.
se hai domande chiedi pure.

edit: però ho visto solo ora che tu hai più livelli, io ne avevo solo due...vedi se riesci a riadattare il codice =)
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.

Ultima modifica di vizzz : 28-10-2008 alle 12:28.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 13:14   #3
frizzo28
Senior Member
 
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
@vizz ti ringrazio ma in effetti il codice che hai postato e' per solo 2 livelli invecie io dovrei gestirne N di livelli...
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM
-Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd)
frizzo28 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 16:05   #4
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
Scritto adesso:
Codice PHP:
<?
    
function output_categorie($id_principale)
    {
        
$sql = "SELECT * FROM categorie WHERE id_principale = '$id_principale'";
        
$res = mysql_query($sql);
        
        echo 
"<ul>";
        while (
$row = mysql_fetch_assoc($res))
        {
            echo 
"<li>";
            echo 
$row['nome'];
            
            
//Stampa sottocategorie
            
output_categorie($row['id_cat']);
            
            echo 
"</li>";
        }
        echo 
"</ul>";
    }
    
    
output_categorie(0);
?>
Se vuoi fare in modo che si espandano (cioè siano visibili le sottocategorie) solo quando sono selezionate, beh, è un po' più complicato.
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 17:44   #5
frizzo28
Senior Member
 
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
La tua soluzione funzione alla grande ecco come l'ho modificata per visualizzare solo una categoria e/o sottocategoria e tutte le sue sottocategorie quando ci si clicca...
principale.php
Codice PHP:
<?

require "connect.php";

    function 
output_categorie($id_principale)
    {
        
$sql = "SELECT * FROM downcat WHERE id_principale = \"$id_principale\"";
        
$res = mysql_query($sql);
        
        echo 
"<ul>";
        while (
$row = mysql_fetch_assoc($res))
        {
            echo 
"<li>";
            echo 
"<a href=apricat.php?id=".$row['id_cat'].">".$row['nome']."</a>";
            
            
//Stampa sottocategorie
            
output_categorie($row['id_cat']);
            
            echo 
"</li>";
        }
        echo 
"</ul>";
    }
    
    
output_categorie(0);
?>
e poi apricat.php
Codice PHP:
<?

require "connect.php";

    function 
output_categorie($id_principale)
    {
        
$sql = "SELECT * FROM downcat WHERE id_principale = \"$id_principale\"";
        
$res = mysql_query($sql);
        
        echo 
"<ul>";
        while (
$row = mysql_fetch_assoc($res))
        {
            echo 
"<li>";
            echo 
"<a href=apricat.php?".$row['id_cat'].">".$row['nome']."</a>";
            
            
//Stampa sottocategorie
            
output_categorie($row['id_cat']);
            
            echo 
"</li>";
        }
        echo 
"</ul>";
    }

if(isset(
$_GET['id'])){
$id=$_GET['id'];
 
$sql = "SELECT * FROM downcat WHERE id_cat = \"$id\"";
        
$res = mysql_query($sql);
        
        echo 
"<ul>";
        while (
$row = mysql_fetch_assoc($res))
        {
            echo 
"<li>";
            echo 
"<a href=apricat.php?".$row['id_cat'].">".$row['nome']."</a>";
            echo 
"</li>";}
    
output_categorie($id);
echo 
"</ul>";
}
else 
output_categorie(0);
?>
grazie
ciao
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM
-Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd)

Ultima modifica di frizzo28 : 28-10-2008 alle 18:30.
frizzo28 è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2009, 19:16   #6
amadeusorrento
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 1
Quote:
Originariamente inviato da kk3z Guarda i messaggi
Scritto adesso:
Codice PHP:
<?
    
function output_categorie($id_principale)
    {
        
$sql = "SELECT * FROM categorie WHERE id_principale = '$id_principale'";
        
$res = mysql_query($sql);
        
        echo 
"<ul>";
        while (
$row = mysql_fetch_assoc($res))
        {
            echo 
"<li>";
            echo 
$row['nome'];
            
            
//Stampa sottocategorie
            
output_categorie($row['id_cat']);
            
            echo 
"</li>";
        }
        echo 
"</ul>";
    }
    
    
output_categorie(0);
?>
Se vuoi fare in modo che si espandano (cioè siano visibili le sottocategorie) solo quando sono selezionate, beh, è un po' più complicato.

Ciao..sto leggendo questo post...e quello che devo fare è proprio questo...fare in modo che le categorie si espandono solo se cliccate...qualcuno mi sa aiutare??
amadeusorrento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
Il nuovo pickup elettrico Ford può alime...
Opera WebAI: così l'intelligenza artific...
Copilot nella Sidebar di Edge sparisce p...
X terrorizza gli utenti con una mano gig...
Firmware UEFI, embargo saltato per error...
Android 18 limiterà le modifiche alla ru...
Silent Hill 1 Remake, nuove indiscrezion...
Keystone distrugge 18.835 hardware walle...
GTA VI potrebbe richiedere più GB...
Nokia 6300 rinasce grazie all'IA: arriva...
iPhone 18e: le prime indiscrezioni antic...
Motorola Edge 70 Neo in arrivo, un leak ...
Apple rilascia iOS 27.2 e iPadOS 27.2: n...
Ondata di licenziamenti in casa PlayStat...
macOS 27.2 Golden Gate è disponib...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:04.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v