Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: HTML, PHP, SQL: Kategorioiden järjestäminen

Macro [22.10.2011 18:26:59]

#

Terve

MySQL-tietokannassa on mm. sarakkeet nimi ja ylakategoria. Haen kaikki tiedot kyselyllä SELECT nimi, ylakategoria FROM kategoriat. Kuvitellaan, että tulos olisi seuraava.

nimiylakategoria
TietokoneetNULL
LuontoNULL
Ohjelmointi1
Kuvankäsittely1
PHP3

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)?

Grez [22.10.2011 18:32:55]

#

Tuosta SQL-kannasta haustasi puuttuu mitä ilmeisimmin id-numero tms, johon noi 1 ja 3 viittaa. Eli pitäisi varmaankin olla jotakuinkin

kategorianimiylakategoria
1TietokoneetNULL
2LuontoNULL
3Ohjelmointi1
4Kuvankäsittely1
5PHP3

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>

Macro [22.10.2011 20:27:07]

#

Jep. Tietokannassa on id-sarake, johon ylakategorian numerot viittaavaat.

Koodissasi oli pari virhettä, jotka olen merkinnyt alla olevaan koodilistaukseen.

$alaKat[is_null($yla)?-1:$yla][] = $id$; --> $alaKat[is_null($yla)?-1:$yla][] = $id;

$alaryhmia = isset($alaKat[$minka]); --> $alaryhmia = isset($alaKat[$id]);

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta