Items in een dropdownl list zetten
ik heb hier een probleempje, en ik heb het idee dat ik er heel dicht bij ben, maar dat ik gewoon een stukje logica mis.
Wat ik probeer te maken
Een admin pagina, waarmee ik aan kan passen:
- De volgorde van mijn menu items
- De doelpagina
- De tekst die in de knop komt
Waar gaat het fout
De doelpagina selecteren wil ik doen in een dropdown list. De verschillende items in een dropdownlist neerzetten gaat nog wel, maar het gaat fout als ik ook nog degene die op het moment gebruikt wordt, wil selecteren.
Script
Het staat in een functie, die listcontent($id) heet.
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
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
function listcontent($linkid) {
// $id is gelijk aan de kolom listid uit de tabel pvd_menu
$sql = mysql_query('SELECT * FROM pvd_inhoud');
$output = '<select name="link_' . $linkid . '">';
// Begin de select
while($i=mysql_fetch_assoc($sql)) {
// begin met het doorlopen van de rijen
if($linkid == $i['id'] OR $linkid == 0) {
// Als het $linkid gelijk is aan het id wat op dit moment door de lus uit de tabel met inhoud wordt gehaald, of het linkid is 0, doe:
if($linkid==0) {
// Wat als het id 0 is.
if(empty($isleeg)) {
// Om te voorkomen dat we dubbele items in de lijst krijgen
$output .= '<option selected="selected" value="0"></option>';
$isleeg = true;
}
}
else {
// linkid is gelijk aan het id uit de inhoud tabel, echo de geselecteerde optie
$output .= '<option selected="selected" value="' . $linkid . '">' . $i['name'] . '</option>';
}
}
else {
// Is een item in de tabel, maar moet niet geselecteerd worden.
$output .= '<option value="' . $linkid . '">' . $i['name'] . '</option>';
}
}
if(empty($isleeg)) {
// De keuze leeg moet er sowieso zijn
$output .= '<option value="0"></option>';
}
$output .= '</select>';
return $output;
}
// $id is gelijk aan de kolom listid uit de tabel pvd_menu
$sql = mysql_query('SELECT * FROM pvd_inhoud');
$output = '<select name="link_' . $linkid . '">';
// Begin de select
while($i=mysql_fetch_assoc($sql)) {
// begin met het doorlopen van de rijen
if($linkid == $i['id'] OR $linkid == 0) {
// Als het $linkid gelijk is aan het id wat op dit moment door de lus uit de tabel met inhoud wordt gehaald, of het linkid is 0, doe:
if($linkid==0) {
// Wat als het id 0 is.
if(empty($isleeg)) {
// Om te voorkomen dat we dubbele items in de lijst krijgen
$output .= '<option selected="selected" value="0"></option>';
$isleeg = true;
}
}
else {
// linkid is gelijk aan het id uit de inhoud tabel, echo de geselecteerde optie
$output .= '<option selected="selected" value="' . $linkid . '">' . $i['name'] . '</option>';
}
}
else {
// Is een item in de tabel, maar moet niet geselecteerd worden.
$output .= '<option value="' . $linkid . '">' . $i['name'] . '</option>';
}
}
if(empty($isleeg)) {
// De keuze leeg moet er sowieso zijn
$output .= '<option value="0"></option>';
}
$output .= '</select>';
return $output;
}
Tabel opbouw
Twee tabellen: pvd_inhoud en pvd_menu
pvd_menu bestaat uit een id, voor als een item verandert moet worden, een linkid (waar de link naartoe wijst), en een tekst.
In pvd_inhoud staat alleen een kolom id, en een kolom tekst.
Het probleem:

De onderste twee menu items hebben een linkid die 0 is. Ze linken dus nog nergens naar.
Het lijkt erop dat de while lus de andere items er niet bij zet, als het linkid 0 is. Waarom?
Alvast bedankt
Oke, even voor de duidelijkheid: Je hebt nooit een menu-item dubbel in je menu staan?
Maar het idee er achter is niet echt het probleem ;) waarom zou mn while niet verder gaan??
Nou, ik denk dan dat op dit moment je database structuur al niet optimaal is. Ga eens normaliseren :)
Ceesietopc schreef op 10.12.2007 14:40:
maar dat ik gewoon een stukje logica mis.
Crispijn schreef op 10.12.2007 16:38:
Nou, ik denk dan dat op dit moment je database structuur al niet optimaal is. Ga eens normaliseren :)
Hoe roep je die vode eigenlijk aan toevallig zo: listcontent();?
Verder vind ik je code nogal raar, van opbouw en wat je nou allemaal doet.
Ik roep de code op in een ander script, gewoon echoen in een td
Ceesietopc schreef op 10.12.2007 17:07:
Ik roep de code op in een ander script, gewoon echoen in een td
Laat eens zien.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$uitvoer = mysql_query("SELECT * FROM pvd_menu");
while($i = mysql_fetch_assoc($uitvoer)) {
echo '<tr><td><input name="id_' . $i["id"] . '" type="text" class="id" value="' . $i["volgorde"] . '" /></td><td>' . listcontent($i['linkid']) . '</td><td><input name="tekst_' . $i["id"] . '" type="text" class="id" value="' . $i["tekst"] . '" /></td></tr>';
}
?>
$uitvoer = mysql_query("SELECT * FROM pvd_menu");
while($i = mysql_fetch_assoc($uitvoer)) {
echo '<tr><td><input name="id_' . $i["id"] . '" type="text" class="id" value="' . $i["volgorde"] . '" /></td><td>' . listcontent($i['linkid']) . '</td><td><input name="tekst_' . $i["id"] . '" type="text" class="id" value="' . $i["tekst"] . '" /></td></tr>';
}
?>
Dit maakt het tabelletje wat je in mn screenie ziet.