Categorie, subcategorie en omschrijving
Ik heb drie grafische kolommen.
De eerste wordt de hoofdcategorie, de tweede de subcategorie en de derde de omschrijving van die subcategorie. Bijvorbeeld Hoofdcat. Eten, subcategorie macaroni en de omschrijving vertelt me wat bijvoorbeeld de ingredienten zijn.
Nu wil ik met behulp van PHP/MySQL alle data dynamisch maken en uitlezen.
Wat ik NIET weet is hoe ik deze informatie netjes gecategoriseerd kan weergeven in php waarbij het 'eten' linkje clickable is... vervolgens het 'macaroni' linkje verschijnt en ook weer clickable is... waardoor er daarnaast weer de omschrijving verschijnt.
Snapt iemand wat ik bedoel en zo ja, heeft iemand een script dat me op weg kan helpen?
groetjes,
Marije
ps. ik heb al wat geprobeerd en mij tabel in de DB ziet er nu als volgt uit:
ID, categorie, subcategorie, omschrijvig
eerst even de indeling:
categorie
--------------
id
naam
subcategorie
---------------
id
naam
categorie_id
product
-------------
id
naam
omschrijving
subcategorie_id
Uitleg:
Een subcategorie zit ALTIJD in een hoofdcategorie, vandaar dat je een veld categorie_id moet hebben in je tabel subcategorie.
Een product zit ALTIJD in een subcategorie, vandaar dat je een veld subcategorie_id moet hebben in je tabel product.
Als je het zo opzet heb je volgens mij een redelijk datamodel.
Wat wil je precies zien als je op een link klikt? Bij een hoofdcategorie alle subcategorieën? En bij een subcategorie alle producten?
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
SELECT id, naam FROM categorie;
Hierdoor krijg je een lijst met alle categorie items. Als je daar op klikt krijg je:
SELECT id, naam FROM subcategorie WHERE categorie_id = $id;
Dan krijg je een lijst met alle subcategorieën in die categorie.
Als je daar op klikt wil je een om schrijving, dat kan ;).
SELECT naam, omschrijving FROM product WHERE subcategorie_id = $id;
Jan:
Hoi Marije,
Wat wil je precies zien als je op een link klikt? Bij een hoofdcategorie alle subcategorieën? En bij een subcategorie alle producten?
Wat wil je precies zien als je op een link klikt? Bij een hoofdcategorie alle subcategorieën? En bij een subcategorie alle producten?
precies... dat is wat ik zoek... ik wil door kunnen klikken naar bijvoorbeeld andijvieschotel (hehe)
Een link van een subcategorie hoort er bijvoorbeeld zo uit te zien:
<a href=?cat=1&subcat=2>schotels</a>
Een link van een product hoort er bijvoorbeeld zo uit te zien:
<a href=?cat=1&subcat=2&product=3>andijvieschotel (hehe)</a>
brrr, het zal wel lastiger lijken dan het is :)
Ik heb vanavond niks te doen en zal wel wat maken voor je :).
@ arjan: zou ik dat scriptje dan ook mogen?
Je hebt het over subcategorieën, maar als ik het voorbeeld lees komt dat er niet in voor:
Je hebt een categorie, bijvoorbeeld eten of drinken. Vervolgens heeft iedere categorie een aantal producten. En die producten hebben een omschrijving.
Daar komt geen subcategorie in voor en dus hebben we voldoende aan 2 tabellen. Is dat correct of moet er toch een subcategorie tussen?
Categorieen:
Voedsel
Sport
Onderwijs
Cultuur
etc
etc
Subcategorie : (voedsel geklikt)
Macaroni
Spagettini
Shoarma
Slamix
etc
etc
Omschrijving : (macaroni geklikt)
Dit gerecht maak je klaar met kaas en weet ik veel wat nog meer leuk is om te vermelden over dit gerecht :-)
Dus ik wilde proberen twee keer kunnen klikken... eerst de categorie.. en dan de subcat.
die drie kolommen naast elkaar zodat het er overzichtelijk uitziet. Dat had ik leuk op papier geschetst, en zoals vaker krijg ik mijn idee dan niet goed uitgewerkt. grrr
In ieder geval bedankt alvast voor de reacties e.d.!
dit is wat je wilt zal ik even de code documenteren en hier neerzetten. Jou idee van naast elkaar is ook niet echt een probleem, maar dan moet je Jan even lief aankijken en vragen of hij een 3 columns fixed layout met misschien een overflow:auto; wilt maken voor je.
Als bedankt arjan, ik ga er na het eten mee aan de slag!
Code (php)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
define("BR", "\n\r");
//Database gegevens en het verbinding maken met een database.
$db_host = '';
$db_user = '';
$db_pass = '';
$db_name = '';
mysql_connect($db_host, $db_user, $db_pass) or die('Er kon geen verbinding met de server worden gemaakt.');
mysql_select_db($db_name) or die('Ik kon de juiste database niet vinden.');
//We kijken of er een categorie in de url te vinden is.
if(isset($_GET['categorie']))
{
if(is_numeric($_GET['categorie']))
{
$categorie = mysql_real_escape_string($_GET['categorie']);
}
}
//Hetzelfde doen we voor een productid
if(isset($_GET['productid']))
{
if(is_numeric($_GET['productid']))
{
$productid = mysql_real_escape_string($_GET['productid']);
}
}
//Huppakee, tijd om eens een lijstje van categorieën te maken.
echo '<h1>Categorieën</h1>'.BR;
$query = "SELECT id, naam FROM categorie";
$resultaat = mysql_query($query);
//Als er een resultaat is en minimaal 1 rij...
if($resultaat && mysql_num_rows($resultaat) >= 1)
{
//Echoén we een rijtje met categorieën.
while($rij = mysql_fetch_array($resultaat))
{
$id = $rij['id'];
$naam = stripslashes(ucfirst($rij['naam']));
echo '<a href="?categorie='.$id.'">'.$naam.'</a><br>'.BR;
}
}else{
echo '<p>Sorry, er zijn nog geen categorieën toegevoegd!</p>'.BR;
}
//Als er een categorie in de url gevonden is word het tijd om de verschillende producten op te halen.
if(isset($categorie))
{
echo BR.'<h2>Producten</h2>'.BR;
$query = "SELECT id, naam FROM producten WHERE categorie_id = ".$categorie;
$resultaat = mysql_query($query);
if($resultaat && mysql_num_rows($resultaat) >= 1)
{
while($rij = mysql_fetch_array($resultaat))
{
$id = $rij['id'];
$naam = stripslashes(ucfirst($rij['naam']));
echo '<a href="?categorie='.$categorie.'&productid='.$id.'">'.$naam.'</a><br>'.BR;
}
}else{
echo '<p>Sorry, er zijn nog geen producten toegevoegd!</p>'.BR;
}
}
//Als er een product id in de url gevonden is gaan we de beschrijving daarvan ophalen.
if(isset($productid))
{
$query = "SELECT naam, omschrijving FROM producten WHERE id = ".$productid;
$resultaat = mysql_query($query);
//We verwachten 1 resultaat, niet meer en niet minder!
if($resultaat && mysql_num_rows($resultaat) == 1)
{
$rij = mysql_fetch_array($resultaat);
$naam = stripslashes(ucfirst($rij['naam']));
$omschrijving = stripslashes($rij['omschrijving']);
echo BR.'<div id="product"><h3>'.$naam.'</h3>'.BR;
echo '<p>'.$omschrijving.'</p>'.BR;
}else{
echo '<p>Sorry, er is nog geen omschrijving toegevoegd!</p>'.BR;
}
}
?>
define("BR", "\n\r");
//Database gegevens en het verbinding maken met een database.
$db_host = '';
$db_user = '';
$db_pass = '';
$db_name = '';
mysql_connect($db_host, $db_user, $db_pass) or die('Er kon geen verbinding met de server worden gemaakt.');
mysql_select_db($db_name) or die('Ik kon de juiste database niet vinden.');
//We kijken of er een categorie in de url te vinden is.
if(isset($_GET['categorie']))
{
if(is_numeric($_GET['categorie']))
{
$categorie = mysql_real_escape_string($_GET['categorie']);
}
}
//Hetzelfde doen we voor een productid
if(isset($_GET['productid']))
{
if(is_numeric($_GET['productid']))
{
$productid = mysql_real_escape_string($_GET['productid']);
}
}
//Huppakee, tijd om eens een lijstje van categorieën te maken.
echo '<h1>Categorieën</h1>'.BR;
$query = "SELECT id, naam FROM categorie";
$resultaat = mysql_query($query);
//Als er een resultaat is en minimaal 1 rij...
if($resultaat && mysql_num_rows($resultaat) >= 1)
{
//Echoén we een rijtje met categorieën.
while($rij = mysql_fetch_array($resultaat))
{
$id = $rij['id'];
$naam = stripslashes(ucfirst($rij['naam']));
echo '<a href="?categorie='.$id.'">'.$naam.'</a><br>'.BR;
}
}else{
echo '<p>Sorry, er zijn nog geen categorieën toegevoegd!</p>'.BR;
}
//Als er een categorie in de url gevonden is word het tijd om de verschillende producten op te halen.
if(isset($categorie))
{
echo BR.'<h2>Producten</h2>'.BR;
$query = "SELECT id, naam FROM producten WHERE categorie_id = ".$categorie;
$resultaat = mysql_query($query);
if($resultaat && mysql_num_rows($resultaat) >= 1)
{
while($rij = mysql_fetch_array($resultaat))
{
$id = $rij['id'];
$naam = stripslashes(ucfirst($rij['naam']));
echo '<a href="?categorie='.$categorie.'&productid='.$id.'">'.$naam.'</a><br>'.BR;
}
}else{
echo '<p>Sorry, er zijn nog geen producten toegevoegd!</p>'.BR;
}
}
//Als er een product id in de url gevonden is gaan we de beschrijving daarvan ophalen.
if(isset($productid))
{
$query = "SELECT naam, omschrijving FROM producten WHERE id = ".$productid;
$resultaat = mysql_query($query);
//We verwachten 1 resultaat, niet meer en niet minder!
if($resultaat && mysql_num_rows($resultaat) == 1)
{
$rij = mysql_fetch_array($resultaat);
$naam = stripslashes(ucfirst($rij['naam']));
$omschrijving = stripslashes($rij['omschrijving']);
echo BR.'<div id="product"><h3>'.$naam.'</h3>'.BR;
echo '<p>'.$omschrijving.'</p>'.BR;
}else{
echo '<p>Sorry, er is nog geen omschrijving toegevoegd!</p>'.BR;
}
}
?>
En de databasecode:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE categorie (
id int(11) NOT NULL auto_increment,
naam varchar(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE producten (
id int(11) NOT NULL auto_increment,
naam varchar(255) NOT NULL,
omschrijving text NOT NULL,
categorie_id int(11) NOT NULL,
PRIMARY KEY (id)
);
id int(11) NOT NULL auto_increment,
naam varchar(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE producten (
id int(11) NOT NULL auto_increment,
naam varchar(255) NOT NULL,
omschrijving text NOT NULL,
categorie_id int(11) NOT NULL,
PRIMARY KEY (id)
);
het werkt! nog niet in drie kolommen maar dat ga ik nu proberen.. bedankt arjan!
^^
Resultaat
Zipfile
Ik heb Arjan zijn code zoveel mogelijk intact gelaten. Heb alleen wat HTML ervan veranderd, en wat elsjes voor extra meldingen toegevoegd.
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
wauw, dat is wel heel snel zeg... ook frustrerend om te zien dat sommigen van jullie er zo makkelijk iets van maken... ik ga het nu proberen in te voeren en dat laat ik het hier weten!
Die copyright mag je trouwens weghalen hoor :P Ik had gewoon even iets voor in de footer nodig :)
okee bedankt :)
Ik heb je CSS script gebruikt, perfect!
Nu zoek ik alleen nog een stukje code dat ervoor zorgt dat de zojuist geselecteerde categorie en product ge-highlite worden zodat het duidelijk is waar je in het systeem zit.
Iemand een idee?
Wat heb je zelf zoal geprobeerd?