---
title: "Välja flera kategorier"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/14797-välja-flera-kategorier"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Gislaved.net"
published: "2000-07-03T20:45:00.000Z"
updated: "2000-09-15T10:57:00.000Z"
replies: 13
views: 443
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/14797-välja-flera-kategorier"
---

# Välja flera kategorier

## #1 — Gislaved.net, 2000-07-03T20:45Z

Jag har en databas i MySQL som jag ansluter till med PHP. Jag vill att varje post ska kunna tillhöra flera kategorier, och därför har jag skapat en tabell som bara håller reda på relationen mellan kategorier och poster.

Vilken metod ska jag använda för att avgöra vilka kategorier som har valts på en webbsida, och hur läser jag av valen i PHP?

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

## #2 — woodi, 2000-07-03T20:52Z

Komma-separerade listor är bra..  Enkelt att söka på..  

$kategorier="34,35,67,4,2";

$res=mysql_query("select \* from tabellen where kid in ($kategorier)");

På så sätt kan en post tillhöra flera "kategorier" från en annan tabell..  

Hoppas det löste ditt problem!

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

## #3 — Gislaved.net, 2000-07-03T21:13Z

Tack woodi, men är det inte stor risk att det blir krångligt att jobba med när man ska göra ändringar? 

Det största problemet är väl egentligen inte hur jag ska spara indatan, utan hur jag ska få tag i den på ett enkelt sätt. Det är visserligen bara jag som ska ange kategorierna, men det blir lätt jobbigt att komma ihåg alla sifferkoder. Är det checkboxar som gäller?

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

## #4 — Gislaved.net, 2000-07-04T07:15Z

Nej, förresten. Jag kör nog med en SELECT-box där man kan välja flera alternativ.... det blir lättare så.

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

## #5 — woodi, 2000-07-04T08:53Z

Gislaved
Aha, jag tolkade som att det var en "webshop" liknade sak med kategorier som Du ville ha..  Om nu så fortfarande är fallet så är detta det enklaste:

Tabell Kategori:
id, namn (1, Pop ; 2, Rock)

Tabell Produkt:
id,kid,namn (1, ",2,", "Metallica" ; 2, ",1,2,", "Magnus Uggla")

Som Du ser pekar KID fältet på ID värdet i Kategori tabellen..  

Anledningen till att jag har lagt till ett kommatecken framför det första värdet och ett efter är för att det lättare ska gå att söka i fältet sedan (se nedan)!

På så sätt kan flera "artiklar" höra i hop med flera kategorier.
Magnus Uggla tillhör i exemplet ovan både Pop och Rock.. 
För att då lista alla produkter som till för Kategori Rock så använder man alltså följande select-sats:

$res=mysql_query("select \* from produkt where kid like (%,1,%)");

Hoppas detta blev mer användbart!

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

## #6 — Gislaved.net, 2000-07-05T10:17Z

Okej, då fattar jag. Tack!

Hmm... en annan grej: om jag har en SELECT-box med flerval i ett formulär så blir ju $kategori = det sista värdet, dvs om kategori 1 och 2 har valts så skickas informationen som filen.php?kategori=1&kategori=2

Hur gör man för att läsa av även det första värdet?

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

## #7 — BABBA, 2000-07-05T11:15Z

om jag inte har misstagit mig något kopiöst så får du ut en array av det, således:

$katagori\[0\] & $kategori\[1\]

har jag rätt?

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

## #8 — woodi, 2000-07-05T11:26Z

**BABBA**
Helt rätt.

**Gislaved**
Formuläret:
\<select name='kategori\[\]' multiple\>
\<option value='1'\>Kategori 1\</option\>
\<option value='2'\>Kategori 2\</option\>
\<option value='3'\>Kategori 3\</option\>
\</select\>

I scriptet:
for($x=0; $x\<count($kategori); $x++){
echo "$kategori\[$x\]\<br\>";
}

Resultatet blir:
1
2
3

Således blir det första värdet $kategori\[0\]

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

## #9 — Gislaved.net, 2000-07-05T11:30Z

Japp, det fungerar perfekt. Tack!

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

## #10 — Qaz, 2000-09-15T04:52Z

så återupptas ett gamalt inlägg. 

Jag får inte detta att funka... 

Detta är min SQL:
$result = mysql_query("SELECT \* FROM test WHERE Till LIKE (%,$ID,%)"); 

Till är en kolum i databasen test, den finns och innehåller värden ,2,3,4, osv. $ID är en variabel som är satt och värdet finns i Till. Följande felmess får jag
You have an error in your SQL syntax near '%,2,%)' at line 1

Jag kör allt på en win98 burk med PHP402 ,Apache och MySQL 3.22.34

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

## #11 — woodi, 2000-09-15T08:09Z

Ändra till följande så ska det fungera:
$result = mysql_query("SELECT \* FROM test WHERE Till LIKE '%,$ID,%'");

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

## #12 — Qaz, 2000-09-15T09:18Z

Hmmm tyckte jag hade provat även detta, men nu funkar det.... tack woodi

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

## #13 — woodi, 2000-09-15T10:46Z

Ingen orsak!

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

## #14 — Gislaved.net, 2000-09-15T10:57Z

Om man skulle vilja ändra kategori för någon post i databasen... hur bär man sig åt då? Just nu kör jag med följande kod, men det sparar bara de gamla kategorierna omringat av en massa kommatecken.

```
	<FORM method="POST" action="<? echo("$PHP_SELF"); ?>?id=<? echo("$id"); ?>">
          
			<SELECT name="kategorival[]" size=4 MULTIPLE>
			<?
	  		$fr_tva = mysql_query("SELECT * FROM kategorier");
	 	 	while ($rad_tva = mysql_fetch_array($fr_tva)) {
		     		$gk2 = $rad_tva["gk"];
		     		$katnamn = $rad_tva["katnamn"]; 
						// Markera de som var valda innan!
						if (eregi(",$gk2,",$gk)) {	
							echo("<OPTION value=\"$gk\" SELECTED>$katnamn");
						} else { echo("<OPTION value=\"$gk\">$katnamn"); }

	 		} 

	 		?>
			</SELECT>
</FORM>
```

Och när man sedan har klicka på okej, så ska de nya kategorierna sparas...

```
// Kolla vilka kategorier som har valts.
		for($x=0; $x<count($kategorival); $x++){
			$gk= "$gk,$kategorival[$x]";
		}
		$gk = "$gk,";
		$datum = date ("YmdHis");
		mysql_query("UPDATE tabell SET gk='$gk', titel='$titel', url='$url', artist='$artist', datum='$datum' WHERE id = '$id'");
```

Självklart är det lite mer kod, men det blir för långt att skriva allt här.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/14797-välja-flera-kategorier
