webForumDet fria alternativet

Funktion som skall hämta ut värden till en array... eller nåt?

PHP

5 svar · 1 055 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Håller på lite med klarna och vill ha en funktion där jag hämtar ut lite data från min databas: antal, artikelnr, produktnamn, pris och detta skall jag sedan lägga in i denna:

$k->addArticle(4, "MG200MMS", "Matrox G200 MMS", 299.50, 25, 0, KlarnaFlags::INC_VAT);
$k->addArticle(2, "abc123", "Bil", 149000, 25, 0, KlarnaFlags::INC_VAT);

Här är beskrivet vad som är vad:

4,                               // Quantity
"MG200MMS",               // Article number
"Matrox G200 MMS",      // Article name/title
299.50,                       // Price
25,                            // 25% VAT
0,                             // Discount
KlarnaFlags::INC_VAT  // Price is including VAT.

Hur skriver jag i min funktion och hur hämtar jag ut allt sedan. Är inge bra alls på funktioner och arrayer. Hoppas någon vill och kan hjälpa mig :)

function getInfo(){   	
	$info = "";	
	$sql = mysql_query("SELECT * From produkt_in_cart Where sID=12345", $conn);
	while ($RS_cart=mysql_fetch_assoc($sql)){
	    $info = "HÄR SKA DÅ DET IN I NÅN ARRAY SOM SEN SKALL KUNNA HÄMTAS FRÅN EN ANNAN SIDA";
	}
  
    return $info;
}

Jag vill alltså på min sida där jag skall göra mitt anrop till klarna bara anropa min funktion och lägger loopar runt och lägger till de i det jag skrev i övre koden.

$k->addArticle($vardeFranFunktion[0], "$vardeFranFunktion[1]", "$vardeFranFunktion[2]", $vardeFranFunktion[3], 25, 0, KlarnaFlags::INC_VAT);
Medlem sedan dec. 20011 860 inlägg
#2

Är det ingen som kan eller är det ingen som förstår?

Medlem sedan jan. 2005953 inlägg
#3

Jag vet inte riktigt om jag förstår, men jag gör ett försök i alla fall :)

Först tycker jag att du ska skicka med ID-numret som en parameter till funktionen. På så sätt blir funktionen mer dynamisk. Dessutom kommer din funktion inte att känna till någon variabel $conn, så antingen kan du säga åt PHP att använda den som en global variabel (inte rekommenderat då det anses "fult" att koda på det sättet) eller så skickar du med även $conn som en parameter till funktionen.

Jag gissar att det bara finns en post med sID=12345, alltså behöver du ingen loop för att hämta värdet. Så prova följande:

function getInfo($id, $conn) {
    $sql = mysql_query('SELECT * FROM produkt_in_cart WHERE sID=' . (int)$id, $conn);
    $info = false;
    if ($RS_cart = mysql_fetch_assoc($sql)) {
        $info = array($RS_cart['quantity'], $RS_cart['article_number'], $RS_cart['article_name'], $RS_cart['price']);
    }
    return $info;
}

$vardeFranFunktion = getInfo(12345, $conn);
if ($vardeFranFunktion) {
    $k->addArticle($vardeFranFunktion[0], $vardeFranFunktion[1], $vardeFranFunktion[2], $vardeFranFunktion[3], 25, 0, KlarnaFlags::INC_VAT);
}

Du skulle kunna korta ner funktionen ytterligare genom att ange precis vilka fält det är du är intresserad av i din SQL-fråga.

function getInfo($id, $conn) {
    $sql = mysql_query('SELECT quantity, article_number, article_name, price FROM produkt_in_cart WHERE sID=' . (int)$id, $conn);
    return mysql_fetch_array($sql, MYSQL_NUM);
}

Observera att jag inte har en aning om vad kolumnerna i databasen heter, jag har bara gissat :)

Jag vill också passa på att påpeka att PHP:s mysql-funktioner är deprecated. Det betyder att de kommer att försvinna i någon av de kommande versionerna. Titta gärna på PDO eller Mysqli istället.

Medlem sedan dec. 20011 860 inlägg
#4

Tackar så mycket men det finns flera poster i kundvagnen som skall loopas in i denna arrayen. Hur skriver jag då för att få det rätt?

Om arrayen jag får ut ser ut så här vid var_dump:

array(3) {
  [0]=>
  array(7) {
    ["artnr"]=>
    string(6) "FL B44"
    ["namn"]=>
    string(37) "Beanie Knitted Hat  - 38/Bottle Green"
    ["antal"]=>
    int(1)
    ["pris"]=>
    float(49)
    ["moms"]=>
    int(25)
    ["rabatt"]=>
    int(0)
    ["flagga"]=>
    string(20) "KlarnaFlags::INC_VAT"
  }
  [1]=>
  array(7) {
    ["artnr"]=>
    string(9) "FL 63214 "
    ["namn"]=>
    string(43) "PIQUE SCREEN STAR ORIGINAL POLO  - 36/Black"
    ["antal"]=>
    int(1)
    ["pris"]=>
    float(111)
    ["moms"]=>
    int(25)
    ["rabatt"]=>
    int(0)
    ["flagga"]=>
    string(20) "KlarnaFlags::INC_VAT"
  }
  [2]=>
  array(7) {
    ["artnr"]=>
    string(5) "Frakt"
    ["namn"]=>
    string(5) "Frakt"
    ["antal"]=>
    int(1)
    ["pris"]=>
    float(124)
    ["moms"]=>
    int(25)
    ["rabatt"]=>
    int(0)
    ["flagga"]=>
    string(47) "KlarnaFlags::INC_VAT | KlarnaFlags::IS_SHIPMENT"
  }
}

Hur skriver jag då ut så värderna hamnar i varsin sådan rad:

$k->addArticle(4,"MG200MMS","Matrox G200 MMS",299.99,25,0,KlarnaFlags::INC_VAT);
Medlem sedan jan. 2005953 inlägg
#5

Du kan använda t.ex. en foreach-loop för att loopa igenom arrayen. Jag är lite osäker dock på hur man ska använda "flagga" på bästa sätt. Det överlåter jag åt någon annan att hitta en snygg lösning på.

foreach ($din_array as $vara) {
   /* Här kan du sedan använda $vara för att få fram dina värden... $vara['flagga'] vet jag som sagt inte riktigt hur du ska använda
 $k->addArticle($vara['antal'], $vara['artnr'] ...osv
   */ 
}
Medlem sedan dec. 20011 860 inlägg
#6

Tackar! Var tvungen å göra så här:

foreach ($getCartRows as $key => $value ) {
	$antal  = $value['antal'];
	$artnr  = $value['artnr'];
	$namn   = $value['namn'];
	$pris   = $value['pris'];
	$moms   = $value['moms'];
	$rabatt = $value['rabatt'];

	$k->addArticle($antal, utf8_decode($artnr), utf8_decode($namn), $pris, $moms, $rabatt, KlarnaFlags::INC_VAT);
}
266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)