webForumDet fria alternativet
Logga in / Bli medlem

Foreach-loop

PHP

10 svar · 349 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Trådstart#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

Medlem sedan juni 20034 013 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.

Medlem sedan juli 20033 147 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! :)

Medlem sedan juni 20034 013 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"];
  }
}
Medlem sedan mars 20034 471 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
   }
}
Medlem sedan juli 20033 147 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.

Medlem sedan juni 20034 013 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.

Medlem sedan juli 20033 147 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?

Medlem sedan juni 20034 013 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".

Medlem sedan juli 20033 147 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! :)

Medlem sedan juli 20033 147 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! :)

370 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
249 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)