Archief - checkboxes aanduiden via array met database info

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Sprits

Legacy Member
Ik ben volgens mij gewoon verkeerd aan het denken want ik geraak er niet aan uit. En google heeft niets opgeleverd.

Het werkt als volgend:
De gebruiker kiest welk type broodje er mogelijk is voor het product en voegt het product toe aan de database.
De values van de checkboxes worden 'comma seperated' in de database gezet (vb: Wit = 11, Bruin = 12, Meergranen = 13, Zacht = 14. Wit en zacht zijn aangeduidt dus in de database wordt het volgende gezet 11,14)

De checkboxes die de gebruiker heeft aangeduid op de 'toevoegen' pagina, moeten op de 'wijzigen' pagina ook aangeduid worden.

PHP:
$query = mysql_query("SELECT * FROM blablabla WHERE optionType = 'broodje'") or die(mysql_error());
				$prodType = explode(',', $prodType);
				while ($res = mysql_fetch_array($query)) {
					if (!$prodType) {
						echo "<input type=\"checkbox\" id=\"prodType\" name=\"prodType\" disabled=\"disabled\" value=\"" . $res["optionID"] . "\" /> " . $res["optionName"] . "<br />";
					}
					else {
						  foreach ($prodType as $value) {
							  if ($res["optionID"] == $value) {
								  echo "<input type=\"checkbox\" id=\"prodType\" name=\"prodType\" checked=\"checked\" value=\"" . $res["optionID"] . "\" /> " . $res["optionName"] . "<br />";
							  }
							  else {
								  echo "<input type=\"checkbox\" id=\"prodType\" name=\"prodType\" value=\"" . $res["optionID"] . "\" /> " . $res["optionName"] . "<br />";
						  }
						}
					}

het volgende geeft dit resultaat als de gebruiker Wit, Bruin en Zacht heeft aangeduid op de 'toevoegen' pagina (in de database staat er nu: 11,12,14)
Code:
[ ] Wit
[ ] Wit
[X] Wit
[ ] Bruin
[X] Bruin
[ ] Bruin
[ ] Meergranen
[ ] Meergranen
[ ] Meergranen
[X] Zacht (wortel, granen of kruiden-smaak)
[ ] Zacht (wortel, granen of kruiden-smaak)
[ ] Zacht (wortel, granen of kruiden-smaak)

en het moet dit worden

Code:
[X] Wit
[X] Bruin
[ ] Meergranen
[X] Zacht (wortel, granen of kruiden-smaak)

Ik hoop dat het een beetje duidelijk is

greets

GivenToFly

Legacy Member
Die query levert dus 4 rijen op: Wit, Bruin, Meergranen, Zacht (wortel, granen of kruiden-smaak)?

PHP:
foreach ($prodType as $value) {
    if ($res["optionID"] == $value) {
        echo "<input type=\"checkbox\" id=\"prodType\" name=\"prodType\" checked=\"checked\" value=\"" . $res["optionID"] . "\" /> " . $res["optionName"] . "<br />";
    }
    else {
        echo "<input type=\"checkbox\" id=\"prodType\" name=\"prodType\" value=\"" . $res["optionID"] . "\" /> " . $res["optionName"] . "<br />";
}
Indien ik het juist begrijp, gebeurt dan het volgende in bovenstaand stuk. $prodType is een array met drie waarden (de 3 gecheckte opties). Voor elke rij die je query oplevert (4) zal dus drie keer de code van bovenstaande loop worden uitgevoerd.

Je loop over $prodType is eigenlijke niet nodig. Controleer gewoon voor elke rij die je query oplevert of het id in de array $prodType zit (in_array()).

PHP:
if(in_array($res["optionID"], $prodType))
{
	// item checked
}
else
{
	// item not checked
}

Maar eigenlijk is je databasemodel incorrect. Je zou je databasemodel moeten normaliseren zodat je niet meer met comma-separated velden moet werken om optielijsten in je database op slagen. Maak een tabel mogelijke opties, een tabel producten en dan een linktabel die een aparte rij heeft voor elke optie die voor een product wordt gecheckt. Dan kan je in 1 query alles opvragen en moet je niet meer met explode gaan werken. Het grote voordeel is echter dat je systeem veel makkelijker beheersbaar wordt.

Sprits

Legacy Member
Vriendelijk bedankt.

En bedankt voor de info. Dit ga ik zeker bekijken. :)

greets
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan