menu met subitems uit database ophalen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tortuga web

tortuga web

08/09/2015 17:41:33
Quote Anchor link
Hallo,
Ik ben bezig een boomstructuur te maken, waarvoor dus items gerangschikt worden onder een hoofditem.
Ik bedoel dus zoiets als:
fotos 2015:
fotos mei
fotos juli
fotos september
fotos 2014:
fotos augustus
fotos 2013
etc.

Nou heb ik dus al wel dat ik alles uit de database kan halen, maar ik krijg het niet voor elkaar om de subcategorie te rangschikken bij de hoofdcategorie.
In de database heb ik elk item opgeslagen met een id, de hoofdcategorie en de subcategorie (dus 3 kolommen)

Dit is wat ik heb:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
    try {
        //Connect to the dBase
        require_once ('../data/sql_link_frans.php');
        //Make a select-query to show the comments
        $sql_select = "SELECT titel,
                            link
                        FROM fotomappen
                        ORDER BY titel"
;
        $stmt = $db->prepare($sql_select);
        $stmt -> execute(array());
        $results = $stmt->fetchAll();
        ?>

        <dl class="leftmenu">
        <?php foreach ($results as $result) { ?>
            <dt><?php echo $result['titel']; ?></dt>
            <dd><a href="<?php echo $result['link']; ?>"><?php echo $result['link']; ?></a></dd>
            <?php
        }
        ?>

        </dl>
        <?php
    }    
    catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        echo 'Iets gaat niet goed. ';
    }
        
?>

Uit de PHP.net website heb ik begrepen dat ik dit zou moeten gebruiken:
$results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
Als ik dit met een var_dump laat verschijnen komt er inderdaad de juiste array op het scherm, maar ik kom er maar niet achter hoe ik het in mijn script moet verwerken.
Kan iemand me uitleggen hoe dit te doen?
 
PHP hulp

PHP hulp

29/03/2024 01:31:34
 
DavY -

DavY -

08/09/2015 18:29:55
Quote Anchor link
$results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$result['titel']
$result['link']


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$result[0]


Edit: Niet zeker hoor en niet getest. Ik gebruik PDO zelden.
Gewijzigd op 08/09/2015 18:36:24 door DavY -
 
Tortuga web

tortuga web

08/09/2015 18:36:24
Quote Anchor link
Ja, dank DavY, zo ver was ik dus al. En dan?
 
Thomas van den Heuvel

Thomas van den Heuvel

08/09/2015 21:34:07
Quote Anchor link
Ik zou ook een kolom "volgorde" introduceren, zodat je items van een bepaalde diepte expliciet kunt rangschikken.

EDIT: in mijn PHP versie werkt PDO::FETCH_COLUMN|PDO::FETCH_GROUP niet echt intuitief, lijkt alleen te werken als je 2 kolommen ophaalt en negeert de kolom(men) waar deze op zou moeten groeperen.

Ik denk dat het een stuk makkelijker is om een "volgorde" kolom toe te voegen en de logica voor weergave maar tijdens het afdrukken (on-the-fly) te regelen.

EDIT2: wellicht werkt PDO::FETCH_ASSOC|PDO::FETCH_GROUP beter, waarbij de eerste kolom die je ophaalt met je SELECT statement de kolom is waar je op groepeert.
Gewijzigd op 08/09/2015 22:22:51 door Thomas van den Heuvel
 

09/09/2015 14:04:21
Quote Anchor link
Ik ben hier ook mee bezig maar dan dmv een folder structure.
Het zou mooi zijn als je, mocht je er tijd voor hebben, iets voor kan maken waarmee je objecten kan maken en die in mijn tool te gooien.

http://www.delistio.us
 
Tortuga web

tortuga web

09/09/2015 14:23:42
Quote Anchor link
@Thomas:
De var_dump van $results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
geeft dit als resultaat:
array (size=2)
'Mojacar en omgeving' =>
array (size=3)
0 => string 'sorbas' (length=6)
1 => string 'Desierto del Wild West' (length=22)
2 => string 'Mojacar' (length=7)
'Vrienden en feesten' =>
array (size=1)
0 => string 'Benji' (length=5)
Dit is precies wat ik wil, maar dan zonder de array dingen natuurlijk. Dus volgens mij zou dit wel kunnen werken, als ik maar wist hoe ik deze gegenereerde array naar een leesbare tekst omzet.
Een idee, of zie ik dit dan echt te makkelijk.
Gewijzigd op 09/09/2015 14:25:31 door tortuga web
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2015 19:40:42
Quote Anchor link
Als je maar "twee niveau's" hebt kun je een dubbele for-loop gebruiken, maar beter is mogelijk een recursieve functie (een functie die zichzelf aanroept) die van een boom een lijst maakt of de items direct recursief afdrukt. In jouw geval is een dubbele for-loop waarschijnlijk de eenvoudigste oplossing.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// voorbeeld structuur, zoals je die min of meer van PDO terugkrijgt
$items = array(
    'Mojacar en omgeving' => array(
        'sorbas',
        'Desierto del Wild West',
        'Mojacar',
    ),

    'Vrienden en feesten' => array(
        'Benji',
    ),
);


// de dubbele for-loop
foreach ($items as $map => $submappen) {
    ?>
<h1><?php echo $map ?></h1><?php
    foreach ($submappen as $submap) {
        ?>
<h2><?php echo $submap ?></h2><?php
    }
}

?>

Of had je iets anders/ingewikkelders voor ogen?
 
Tortuga web

tortuga web

09/09/2015 21:44:07
Quote Anchor link
@Thomas:
Wederom hartelijk dank. Dit was de oplossing voor wat ik zocht.
Voorlopig heb ik niks ingewikkelders voor ogen. Dat gaat een weer veel later volgend project worden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.