webForumDet fria alternativet

Välja flera kategorier

PHP

13 svar · 440 visningar · startad av Gislaved.net

Medlem sedan juni 20001 521 inlägg
Frågan#1

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?

------------------
Gislaved.net - Ett roligare Internet!

Medlem sedan feb. 20001 270 inlägg
#2

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!

------------------
woodi

Svenska FF1
www.johan-skog.nu

Medlem sedan juni 20001 521 inlägg
#3

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?

------------------
Gislaved.net - Ett roligare Internet!

Medlem sedan juni 20001 521 inlägg
#4

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

------------------
Gislaved.net - Ett roligare Internet!

Medlem sedan feb. 20001 270 inlägg
#5

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!

------------------
woodi

Svenska FF1
www.johan-skog.nu

Medlem sedan juni 20001 521 inlägg
#6

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?

------------------
Gislaved.net - Ett roligare Internet!

[Redigerat av Gislaved.net den 05 jul 2000]

Medlem sedan feb. 2000280 inlägg
#7

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?

------------------
BABBA

http://www.webbkontor.com

Medlem sedan feb. 20001 270 inlägg
#8

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]

------------------
woodi

Svenska FF1
www.johan-skog.nu

[Redigerat av woodi den 05 jul 2000]

Medlem sedan juni 20001 521 inlägg
#9

Japp, det fungerar perfekt. Tack!

------------------
Gislaved.net - Ett roligare Internet!

Medlem sedan feb. 2000211 inlägg
#10

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

Medlem sedan feb. 20001 270 inlägg
#11

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

------------------
woodi

Svenska FF1
www.johan-skog.nu

Medlem sedan feb. 2000211 inlägg
#12

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

Medlem sedan feb. 20001 270 inlägg
#13

Ingen orsak!

------------------
woodi

Svenska FF1
www.johan-skog.nu

Medlem sedan juni 20001 521 inlägg
#14

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.

------------------
Gislaved.net

"Tänk på vad du säger så att du inte säger vad du tänker."

[Redigerat av Gislaved.net den 15 sep 2000]

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)