---
title: "Ska optgroups/options med PHP / MySQL"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/178434-ska-optgroups-options-med-php-mysql"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2009-05-06T17:01:00.000Z"
updated: "2009-05-06T17:43:46.000Z"
replies: 1
views: 376
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/178434-ska-optgroups-options-med-php-mysql"
---

# Ska optgroups/options med PHP / MySQL

## #1 — MickeA.com, 2009-05-06T17:01Z

Hej,

Försöker skapa en dynamiskt selectlista där alla options ska delas in i grupper.
Resultatet behöver se ut såhär:

```
var selectMenu = getElemRefs("MySelectList");

var optgroup_x0 = document.createElement("optgroup");
optgroup_x0.label = "Grupper med start 6 - 2009";

var group_x0 = document.createElement("option");
group_x0.value = "3";
group_x0.appendChild(document.createTextNode("vecka 24 kl. 08.40-09.20"));
optgroup_x0.appendChild(group_x0);

var group_x1 = document.createElement("option");
group_x1.value = "4";
group_x1.appendChild(document.createTextNode("vecka 25 kl. 09.20-10.00"));
optgroup_x0.appendChild(group_x1);

if (optgroup_x0.hasChildNodes()) { selectMenu.appendChild(optgroup_x0); }

// nästa optgroup
var optgroup_x1 = document.createElement("optgroup");
optgroup_x1.label = "Grupper med start 7 - 2009";

var group_x2 = document.createElement("option");
group_x2.value = "3";
group_x2.appendChild(document.createTextNode("vecka 26 kl. 08.40-09.20"));
optgroup_x1.appendChild(group_x2);

var group_x3 = document.createElement("option");
group_x3.value = "4";
group_x3.appendChild(document.createTextNode("vecka 27 kl. 09.20-10.00"));
optgroup_x1.appendChild(group_x3);

if (optgroup_x1.hasChildNodes()) { selectMenu.appendChild(optgroup_x1); }

...
```

Koden ser för tillfället ut såhär:

```php
if(!(mysql_num_rows($result) == false)){
			$curr_year  = 0;
			$curr_month = 0;
			$counter1	= 0;
			$counter2	= 0;
			while($res = mysql_fetch_assoc($result)){
				if(!($curr_year == $res['start_year']) || !($curr_month == $res['start_month'])){
					if($counter2 != 0){
						echo "if (optgroup_x" . $counter1 . ".hasChildNodes()) { selectMenu.appendChild(optgroup_x" . $counter1  . "); }\n\n";
					}
					echo "var optgroup_x" . $counter1 . " = document.createElement(\"optgroup\");\n";
					echo "optgroup_x" . $counter1 . ".label = \"Grupper med start " . $res['start_month'] . " - " . $res['start_year'] . "\";\n\n";
					$counter1++;
				}
				echo "var group_x" . $counter2 . " = document.createElement(\"option\");\n";
				echo "group_x" . $counter2 . ".value = \"" . $res['group_id'] . "\";\n";
				echo "group_x" . $counter2 . ".appendChild(document.createTextNode(\"" . $res['group_name'] . "\"));\n";
				echo "optgroup_x" . $counter1 . ".appendChild(group_x" . $counter2 . ");\n\n";
				$counter2++;

				$curr_year  = $res['start_year'];
				$curr_month = $res['start_month'];
			}
		}
		mysql_free_result($result);
```

Problemet är att mina två räknare räknar lite fel, så att "$counter1" får för högt värde då "nuvarande" optgroup ska populeras.

Har testat att flytta $counter1 / $counter2 till olika positioner, men det står still i huvudet.

Hur bör det se ut?

Tack!

Permalänk: https://www.webforum.nu/p/178434

## #2 — MickeA.com, 2009-05-06T17:43Z

Löste det genom:

```php
if($counter2 != 0){
     echo "if (optgroup_x" . ($counter1 - 1) . ".hasChildNodes()) { selectMenu.appendChild(optgroup_x" . ($counter1 - 1)  . "); }\n";
}
```

Permalänk: https://www.webforum.nu/p/2184194

---

Tråden på webben: https://www.webforum.nu/amne/php/178434-ska-optgroups-options-med-php-mysql
