Avatar billede andersthingholm Nybegynder
17. november 2004 - 14:57 Der er 12 kommentarer og
1 løsning

Forskel på kode

Hej,

Hvorfor virker dette:

    // Update from cart
    if ($_POST[task] == "updateCart"){
       
        $i = 0;
        foreach($_POST[id] as $key) {
            $SESSION["cart"][$key] = $_POST[quantity][$i];
            $i++;
        }


       
    }   

    // Recalculate cart   
    if ($_POST[task] == "addToCart" || $_POST[task] == "updateCart"){


        $SESSION["cart"]["itemCount"] = 0;
        $SESSION["cart"]["total"] = 0;
        foreach($SESSION["cart"] as $key => $value) {
            //echo $key." --- ".$value."<br>";
            if ($key != "itemCount" && $key != "total"){   
               
                $SESSION["cart"]["itemCount"] += $SESSION["cart"][$key];
               
                // Hent pris
                $query = mysql_query("SELECT price FROM product_products WHERE productID=$key") or die(handleError($PHP_SELF, mysql_error()));
                $row = mysql_fetch_array($query);
               
                $SESSION["cart"]["total"] += $value*$row[price];           
            }
        }

Når dette ikke virker:

function recalcCart(){
    // Recalculate cart   
        $SESSION["cart"]["itemCount"] = 0;
        $SESSION["cart"]["total"] = 0;
        foreach($SESSION["cart"] as $key => $value) {
            //echo $key." --- ".$value."<br>";
            if ($key != "itemCount" && $key != "total"){   
               
                $SESSION["cart"]["itemCount"] += $SESSION["cart"][$key];
               
                // Hent pris
                $query = mysql_query("SELECT price FROM product_products WHERE productID=$key") or die(handleError($PHP_SELF, mysql_error()));
                $row = mysql_fetch_array($query);
               
                $SESSION["cart"]["total"] += $value*$row[price];           
            }
        }


    // Update from cart
    if ($_POST[task] == "updateCart"){
       
        $i = 0;
        foreach($_POST[id] as $key) {
            $SESSION["cart"][$key] = $_POST[quantity][$i];
            $i++;
        }

recalcCart()
       
    }
Avatar billede andersthingholm Nybegynder
17. november 2004 - 14:58 #1
Det virker som om at $SESSION["cart"] ikke er tilgængelig inde i funktionen? Er det mon noget med global?
Avatar billede schaefner Juniormester
17. november 2004 - 15:04 #2
$_SESSION er global som standard, så det burde ikke være det. Har du husket at skrive session_start() på de sider hvor du benytter sessions?
Avatar billede andersthingholm Nybegynder
17. november 2004 - 15:05 #3
ja, det er på samme side
Avatar billede schaefner Juniormester
17. november 2004 - 15:06 #4
Men burde den ikke hedde $_SESSION i stedet for $SESSION ?
Avatar billede andersthingholm Nybegynder
17. november 2004 - 15:10 #5
Nej, jeg bruger den på denne måde:

    if (!isset($SESSION)) {
        session_register("SESSION");
        $SESSION = array();
        $SESSION["cart"]["itemCount"] = 0;
        $SESSION["cart"]["total"] = 0;
    }
Avatar billede schaefner Juniormester
17. november 2004 - 15:16 #6
Så skal den jo umiddelabrt gøres global i dine funktioner:

http://dk2.php.net/manual/en/function.session-register.php

"This registers a global variable. If you want to register a session variable from within a function, you need to make sure to make it global using the global  keyword or the $GLOBALS[] array, or use the special session arrays as noted below."

Men hvorfor ikke bruge $_SESSION?
Avatar billede andersthingholm Nybegynder
17. november 2004 - 15:20 #7
Hvordan ville den så skulle se ud - altså med $_SESSION?
Avatar billede schaefner Juniormester
17. november 2004 - 15:21 #8
Nu er det godt nok et stykke siden jeg har oprettet sessions på den måde, men umiddelbart skal du også bruge session_register() hver gang du vil opdatere din session. Men som sagt - jeg kan faktisk ikke huske det :)
Avatar billede schaefner Juniormester
17. november 2004 - 15:32 #9
Nu har jeg prøvet at omskrive noget af det:

<?php
if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
    $_SESSION['cart']['itemCount'] = 0;
    $_SESSION['cart']['total'] = 0;
}

function recalcCart(){
    $_SESSION['cart']['itemCount'] = 0;
    $_SESSION['cart']['total'] = 0;
   
    foreach($_SESSION['cart'] AS $key => $value) {
        // echo $key." --- ".$value."<br>";
        if ($key != "itemCount" && $key != "total"){ 
            $_SESSION['cart']['itemCount'] += $_SESSION['cart'][$key];
             
            // Hent pris
            $result = mysql_query("SELECT price FROM product_products WHERE productID=".$key."") or die(handleError($PHP_SELF, mysql_error()));
            $data = mysql_fetch_array($result);
           
            $_SESSION['cart']['total'] += $value*$data['price'];         
        }
    }
}

recalcCart();
?>
Avatar billede schaefner Juniormester
17. november 2004 - 15:33 #10
og så skal der selvfølgelig også lige session_start() ind i toppen :)
Avatar billede schaefner Juniormester
17. november 2004 - 21:16 #11
Virker det?
Avatar billede andersthingholm Nybegynder
18. november 2004 - 09:52 #12
Ja, det spiller - smider du et svar?
Avatar billede schaefner Juniormester
18. november 2004 - 11:18 #13
jep :)
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