Terve
MySQL-tietokannassa on mm. sarakkeet nimi ja ylakategoria. Haen kaikki tiedot kyselyllä SELECT nimi, ylakategoria FROM kategoriat
. Kuvitellaan, että tulos olisi seuraava.
nimi | ylakategoria |
---|---|
Tietokoneet | NULL |
Luonto | NULL |
Ohjelmointi | 1 |
Kuvankäsittely | 1 |
PHP | 3 |
Tästä pitäisi muotoilla seuraavanlainen PHP-taulukko, jotta se voidaan myöhemmin tulostaa oikein.
$taulukko = array( "Tietokoneet" => array( "Ohjelmointi" => array( "PHP" ), "Kuvankäsittely" ), "Luonto" );
Tarkoitus on muotoilla HTML-pudotusvalikko, joka sisältäisi kategoriat. Esimerkkivastausta noudattaen siitä pitäisi saada tälläinen.
<select> <option disabled>Tietokoneet</option> <option disabled>— Ohjelmointi</option> <option>—— PHP</option> <option>— Kuvankäsittely</option> <option>Luonto</option> </select>
optgroupeja ei saa montaa sisäkkäin, joten korvasin tämän sitten viivoilla.
Mitenköhän PHP:llä esimerkkituloksen (taulukko ylhäällä) voisi muotoilla esitettyyn muotoon (viimeinen HTML-listaus)?
Tuosta SQL-kannasta haustasi puuttuu mitä ilmeisimmin id-numero tms, johon noi 1 ja 3 viittaa. Eli pitäisi varmaankin olla jotakuinkin
kategoria | nimi | ylakategoria |
---|---|---|
1 | Tietokoneet | NULL |
2 | Luonto | NULL |
3 | Ohjelmointi | 1 |
4 | Kuvankäsittely | 1 |
5 | PHP | 3 |
Itse kysymykseen, "mitenköhän" hieman tarkennusta että mikä asia lähinnä tuottaa hankaluuksia?
Onko tuon taulukkorakenteen pakko olla juuri tuollainen?
Itse tekisin varmaan tälleen. En testannut mitenkään, eli todennäköisesti on jotain virheitä:
<select><? while ($rivi = luetietokannasta) { list($id, $nimi, $yla) = $rivi; $kategoriat[$id] = $nimi $alaKat[is_null($yla)?-1:$yla][] = $id$; } function optiot($tasomrk, $minka, $kategoriat, $alaKat) { foreach ($alaKat[$minka] as $id) { echo '<option'; $alaryhmia = isset($alaKat[$minka]); if ($alaryhmia) { echo ' disabled'; } echo '>' . htmlspecialchars($kategoriat[$id]) . '</option>'; if ($alaryhmia) optiot($tasomrk.'-', $id, $kategoriat, $alaKat); } } optiot('',-1,$kategoriat,$alaKat); ?></select>
Jep. Tietokannassa on id-sarake, johon ylakategorian numerot viittaavaat.
Koodissasi oli pari virhettä, jotka olen merkinnyt alla olevaan koodilistaukseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.