webForumDet fria alternativet

Foreach-loop

10 svar · 349 visningar · startad av Melea

MeleaMedlem sedan juli 20032 667 inlägg
#1

Hejsan!

Jag har ett formulär som ser ut som följande:

<input type="text" name="IntMin" /> <input type="text" name="IntMax" />
<input type="text" name="KarMin" /> <input type="text" name="KarMax" />
...

Det är alltså så att IntMin och IntMax hör ihop, samma med KarMin och KarMax.
För att spara dessa värden har jag en foreach-loop som ser ut såhär:

foreach ($_POST as $key => $value) {
	$key = substr($key, 3);
	mysql_query("INSERT INTO varden ($key, PersonID) VALUES ($value, 3)") or die (mysql_error());
}

I tabellen varden har jag två kolumner som heter Min och Max, där vill jag alltså spara de inputs som hör ihop. Problemet är nu dock att när foreach-loopen körs sparar den ett värde i taget, inte helt ologiskt kanske.
Det jag vill göra är att den sparar IntMin och IntMax i en INSERT och sedan går vidare till nästa. Jag har glott mig blind på det här nu allt för länge så jag hoppas någon har en idée på hur det ska gå att fixas.

Tack på förhand

tydalMedlem sedan juni 20033 788 inlägg
#2

Hur vet du vilka IntMin som hör ihop med vilka IntMax? För du har väl fler av varje? Annars är det ju bara att ange dem direkt $_POST['IntMin'] och $_POST['IntMax'].

Om du har flera kan man mellanlagra dem i en array, alltså att du använder foreach $_POST för att stoppa in dem i $IntMin['key'] = värde och $IntMax['key'] = värde där då key alltså är samma för dem båda för att ange vilka värden som hör ihop.

Men key borde du ju kunna lagra redan i formuläret så du har exempelvis IntMin1, IntMax1, IntMin2 osv... för då hittar du ju det andra värdet utifrån key.

MeleaMedlem sedan juli 20032 667 inlägg
#3

Ledsen om jag var otydlig. Det är så att det finns en IntMin och en IntMax, sen finns det en KarMin och en KarMax, en SpiMin och SpiMax osv.
Alla börjar alltså på tre bokstäver och följer sig sedan av Min eller Max.
Förstår inte riktigt hur du menar med att lagra i array, har ganska nyligen förstått själva finessen med just "arrayer" men har mycket kvar att lära.
Förklara gärna lite mer! :)

tydalMedlem sedan juni 20033 788 inlägg
#4
foreach ($_POST as $key => $value)
{
  $key = substr($key, 3);
  if ($key == "Min")
  {
    $typ = substr($key, 0, 3);
    $min = $value;
    $max = $_POST["{$typ}Max"];
  }
}
aasahMedlem sedan mars 20033 451 inlägg
#5

Om du istället (för int, kar, spi,...) döper dina variabler till:
min1, max1, min2, max2, min3, max3,...

så kan du ju fånga dom så här:

for ($i = 1, $i < $antalVariabelpar; $i++) {
   if (isSet($_POST['min'.$i]) && isSet($_POST['max'.$i])) {
      $min = $_POST['min'.$i];
      $max = $_POST['max'.$i];
      //insert paret $min och $max
   }
}
MeleaMedlem sedan juli 20032 667 inlägg
#6

Du vill alltså att det ska se ut såhär någonting? Förstår fortfarande inte riktigt:

foreach ($_POST as $key => $value) {
  $key = substr($key, 3);
  if ($key == "Min")
  {
    $typ = substr($key, 0, 3);
    $min = $value;
    $max = $_POST["{$typ}Max"];
  }

	mysql_query("INSERT INTO varden (Min, Max, PersonID) VALUES ($min, $max, 4)") or die (mysql_error());
}

/red Jag kan inte döpa om dem nu som det ser ut, ska kolla på det.

tydalMedlem sedan juni 20033 788 inlägg
#7

Gick det inte bra? :-)

Vi börjar med if-satsen för att bara plocka fram min-värdena. Vad max-värdesvariabeln heter vet vi ju eftersom det är samma min-variabeln (Int, Kar, Spi och vad det nu var). Så vi behöver ju bara ta reda på vad den aktuella min-variabeln heter. Det lagrar vi i $typ. Sedan tar vi fram det max-värdet av samma typ från $_POST-variabeln.

MeleaMedlem sedan juli 20032 667 inlägg
#8

tydal skrev:

Vi börjar med if-satsen för att bara plocka fram min-värdena.

Så långt hänger jag med.

tydal skrev:

Vad max-värdesvariabeln heter vet vi ju eftersom det är samma min-variabeln (Int, Kar, Spi och vad det nu var).

Där slutar jag hänga med. Hur vet vi vad max-variablen heter eftersom det är samma min-variabel? Jag är helt lost! :OO ;)

tydal skrev:

Så vi behöver ju bara ta reda på vad den aktuella min-variabeln heter. Det lagrar vi i $typ. Sedan tar vi fram det max-värdet av samma typ från $_POST-variabeln.

Okej, så $typ innehåller alltså det lägsta värdet av paret medans $max innehåller det högsta?

tydalMedlem sedan juni 20033 788 inlägg
#9

Det kan lika gärna vara jag som är lost. Alltså, jag vet ju hur man programmerar, men jag vet ju inte vad det är du vill programmera :-)

Som jag förstod har du alltså ett antal saker som heter bland annat Int, Kar och Spi. Av varje sak finns det två värden, ett min och ett max. Du vill få fram sakernas min- och max-värden tillsammans. Alltså, du vill ha IntMin tillsammans med IntMax, KarMin tillsammans med KarMax osv...

Därför gör vi så att vi loopar fram alla min-värden och så hämtar vi max-värdena allteftersom min-värdet dyker upp. Så om du i första key/value-paret får: KarMin = 5 så plockar vi ut "Kar" och kallar det $typ och så lägger vi till Max så den hämtar värdet på "KarMax".

MeleaMedlem sedan juli 20032 667 inlägg
#10

Du har förstått det rätt! Jag har i varje dubbelpar ett Min och ett Max värde som jag vill ska sparas i en INSERT. Som det sparas nu ser det ut såhär:

[b]Min	Max[/b]
1	0
0	2
1	0
0	2

Jag vill att det ska sparas såhär:

[b]Min	Max[/b]
1	2
1	2

Det jag inte förstår är var INSERT-taggen ska ligga för att få det här resultatet. Som den ligger nu får jag bara felmeddelande.

foreach ($_POST as $key => $value) {

	$key = substr($key, 3);
	if ($key == "Min") {
		$typ = substr($key, 0, 3);
		$min = $value;
		$max = $_POST["{$typ}Max"];
	}

	mysql_query("INSERT INTO varden (Min, Max, PersonID) VALUES ($typ, $max, 1)") or die (mysql_error());

}

Tack för all din hjälp tydal! :)

MeleaMedlem sedan juli 20032 667 inlägg
#11

Vi glömmer den här tråden! Jag har löst det på annat, enklare vis.
Tack för din hjälp iallafall tydal! :)

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb