Ben'k weer!

Het volgende:

Ik wil een rijtje categorieen presenteren als checkboxes. Dit zodat iemand bij het invoeren van een nieuw product kan besluiten dat dit in meerdere categorieen thuishoort.

Ik heb nu het volgende:
<?php
$sql = "SELECT * FROM categorieen ORDER BY categorie_naam ASC";
$result = mysql_query($sql);
				
if ($result && mysql_num_rows($result) > 0) {

echo "<p>";
while ($categorie = mysql_fetch_assoc($result)) {

echo "<input type=\"checkbox\" name=\"categorie\" class=\"normal\">&nbsp;" . $categorie['categorie_naam'] . "&nbsp;";
}
echo "</p>";
}?>

en nu verschijnen de beschikbare categorieen met een checkbox ervoor...Alleen wanneer ik de nieuwe invoer helemaal afhandel blijkt de categorie leeg te zijn. Ook wanneer je maar 1 checkbox aanvinkt.

Ik deed dit eerst met een <option> gebeuren, maar daar kon je er dus maar eentje selecteren (en ja, ik weet dat er <option> mogelijkheden zijn om meerdere selecties tegelijkertijd te maken).

Ik kom er niet echt helemaal uit...
Checkboxen moeten verschillende namen hebben. Alleen radio heeft steeds dezelfde naam.
Hey SanThe,

Oke...Verschillende namen voor de checkboxes.

Maar momenteel worden de checkboxes voorzien van een categorie_naam die uit de database word gehaald. Komen er dus meer categorieen bij, verschijnen er ook steeds meer checkboxes.

Hoe doe je dit dan wanneer elke checkbox een eigen naam heeft?
@SanThe

Ik gebruik voor checkboxes die voor hetzelfde doeleinde dienen (zoals hier, waar het allemaal om categorieën gaat) altijd dezelfde naam:

name="categorie[]" value="naam van categorie"


Je kan dan in de volgende pagina met een foreach of een in_array allerlei controles uitvoeren over de geselecteerde checkboxes.
Robert_Deiman schreef op 20.01.2009 12:54
Ik gebruik voor checkboxes die voor hetzelfde doeleinde dienen (zoals hier, waar het allemaal om categorieën gaat) altijd dezelfde naam:

Dat is een array(), dat kan uiteraard ook.
Haal je categorieen op binnen je while, dus:

<?php

/**
* stukje code
*/
while($aRow = mysql_fetch_assoc($rResult))
{
echo '<input type="checkbox" name="categories[]" value="'.$aRow['value'].'">';
}

?>

Bouw er een formuliertje omheen met een submit knop, vink een aantal van die dingen aan en doe het volgende:

<?php

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
echo '<pre>'.var_export($_POST['categories'], true).'</pre>';
}

?>

Ongeveer dit in ieder geval: Tadaa!
SanThe schreef op 20.01.2009 12:56
[quote='Robert_Deiman schreef op 20.01.2009 12:54']Ik gebruik voor checkboxes die voor hetzelfde doeleinde dienen (zoals hier, waar het allemaal om categorieën gaat) altijd dezelfde naam:

Dat is een array(), dat kan uiteraard ook.[/quote]

Klopt inderdaad een array, ik dacht zo dat het in dit geval toch de handigste oplossing was.. Je kan heel makkelijk van alles controleren en toevoegen in een database binnen een foreach. Scheelt in elk geval een stuk code..
Sorry was effies druk met wat anders.

En...Ik snap er nog steeds maar weinig van.

Wat mij in het geheel ontgaat is het database gedeelte.

Waneer er meerdere categorieen zijn voor 1 product...Dan moeten er in de database toch 'extra' tabellen worden aangemaakt om alle categorieen in kwijt te kunnen?

Nu is er bv. maar ruimte voor 1 categorie_id per product_id...Als er dus 2 categorie_id's zouden zijn waar komt deze 2e categorie_id dan te staan?

?!?
Een produkt kan in feite maar in 1 categorie staan

heb je subcategorien dan is het sub_id aan het product gekoppelt heb je geen subcategorien dan het maincat_id gekoppelt aan het produkt_id...

Anders geschreven: een product zit altijd gekoppelt aan het laagste niveau
Oftewel, in de categorie tabel heb je een kolom nodig die de "parent-id" van de bovenliggende categorie nodig hebt. Dat kan ook, maar een product kan zich ook prima in meerdere categorieën bevinden.

Stel (hypothetisch) dat je een bepaald product verkoopt, welke je naast een mp3-speler ook (via de usb-aansluiting van de computer) als extern geheugen (heeft ook vast intern geheugen) en kaartlezer kan gebruiken.

De categorieën waarin die Kán staan (niet Moét staan) zijn dan dus kaart-lezers, flash-drives en mp3-spelers de categorieën voor dat product. Geen van deze categorieën is een "subcategorie" van één van de andere genoemde apparaten.

Om dit te kunnen doen heb je een koppeltabel nodig.

Reageren