Avatar billede jenslyn_s Nybegynder
18. marts 2004 - 19:02 Der er 10 kommentarer og
2 løsninger

opdatere array

Når jeg tilføjer et produkt til min kurv vil gerne lave en 'if' som tjekker om [id], [ext] og [ext1] eksisterer med samme værdi som produktet der tilføje. Hvis der eksisterer et produkt magen til skal den addere og overskrive.

Jeg tilføjer til min kurv:
$_SESSION[kurv][] = array("id" => $_GET['id'], "antal" => $_GET['antal'], "ext" => $_GET['ext'], "ext1" => $_GET['ext1'],);
Avatar billede limemedia Nybegynder
18. marts 2004 - 19:06 #1
Dét ville være "lidt" smartere med
$_SESSION[kurv][$_GET['id']] = array("antal" => $_GET['antal'], "ext" => $_GET['ext'], "ext1" => $_GET['ext1']);

således du véd, at du ikke har samme produkt flere gange i kurven. så kan du jo løse dit problem med

if (isset($_SESSION[kurv][$_GET['id']])) {
  /* adder */
  $_SESSION[kurv][$_GET['id']]['antal'] += $_GET['antal'];
} else {
  /* tilføj */
  $_SESSION[kurv][$_GET['id']] = array("antal" => $_GET['antal'], "ext" => $_GET['ext'], "ext1" => $_GET['ext1']);
}
Avatar billede jenslyn_s Nybegynder
18. marts 2004 - 19:08 #2
ja, det ville det, hvis ikke at [ext] og [ext1] havde betydning. Feks.
id=bil
ext=sort
ext1=kusse-styled
Avatar billede limemedia Nybegynder
18. marts 2004 - 19:15 #3
jeg er mest til internt unikke id'er til ethvert produkt og konfigurering - dét gør operationer senere væsentligt hurtigere og mere fleksibelt.

men det er da også muligt med dit array, det er blot mere slavearbejde med at loope hele resultatsættet igennem og sammenligne værdier.
Avatar billede limemedia Nybegynder
18. marts 2004 - 19:20 #4
noget ala

reset($_SESSION['kurv']);
$found = false;
while (list($key, $val) = each($_SESSION['kurv'])) {
    if ($val['id'] == $_GET['id'] && $val['ext'] == $_GET['ext'] && $val['ext1'] == $_GET['ext1']) {
        $_SESSION['kurv'][$key]['antal'] += $_GET['antal'];
        $found = true;
        break;
    }
}
if (!$found) {
    $_SESSION['kurv'][] = array("id" => $_GET['id'], "antal" => $_GET['antal'], "ext" => $_GET['ext'], "ext1" => $_GET['ext1']);
}
Avatar billede limemedia Nybegynder
18. marts 2004 - 19:21 #5
kurv arrayet er jo heldigvis ikke et stort array, så at loope igennem er ikke så slemt
Avatar billede jenslyn_s Nybegynder
18. marts 2004 - 19:53 #6
Tal lars. Virker fint. Men hvorfor skal jeg køre reset($_sess....); ?
Avatar billede jenslyn_s Nybegynder
18. marts 2004 - 19:53 #7
tak var det så :)
Avatar billede limemedia Nybegynder
18. marts 2004 - 20:07 #8
reset anvendes til at nulstille den interne pointer, således at jeg er sikker på at mit each kald tager den første post i dit kurv array. Hvis du fx andetsteds tilgår arrayet er jeg ikke sikker på hvor din pointer er.
Avatar billede jenslyn_s Nybegynder
18. marts 2004 - 20:35 #9
ok, cool nok. Dog er det lidt et problem når kurven er tom(og session ikke er sat.) da den så giver: "Variable passed to reset() is not an array..."
Avatar billede limemedia Nybegynder
18. marts 2004 - 20:38 #10
ahh, så
if (isset($_SESSION['kurv']) && is_array($_SESSION['kurv'])) {
    reset($_SESSION['kurv']);
    $found = false;
    while (list($key, $val) = each($_SESSION['kurv'])) {
        if ($val['id'] == $_GET['id'] && $val['ext'] == $_GET['ext'] && $val['ext1'] == $_GET['ext1']) {
            $_SESSION['kurv'][$key]['antal'] += $_GET['antal'];
            $found = true;
            break;
        }
    }
    if (!$found) {
        $_SESSION['kurv'][] = array("id" => $_GET['id'], "antal" => $_GET['antal'], "ext" => $_GET['ext'], "ext1" => $_GET['ext1']);
    }
}
Avatar billede jenslyn_s Nybegynder
18. marts 2004 - 21:14 #11
ahh, tak, dog skriver den ikke til mit array, har testet med print_r ($kurv).
Kan ikke lige gennemskue hvor fejlen ligger.
Avatar billede jenslyn_s Nybegynder
19. marts 2004 - 00:14 #12
har fixet det:
if (isset($_SESSION['kurv']) && is_array($_SESSION['kurv'])) {
    reset($_SESSION['kurv']);
    $found = false;
    while (list($key, $val) = each($_SESSION['kurv'])) {
        if ($val['id'] == $_GET['id'] && $val['ext'] == $_GET['ext'] && $val['ext1'] == $_GET['ext1']) {
            $_SESSION['kurv'][$key]['antal'] += $_GET['antal'];
            $found = true;
            break;
        }
    }
} (TILFØJET TILFØJET TILFØJET)
    if (!$found) {
        $_SESSION['kurv'][] = array("id" => $_GET['id'], "antal" => $_GET['antal'], "ext" => $_GET['ext'], "ext1" => $_GET['ext1']);
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester