kostenloser Webspace werbefrei: lima-city


php sessionarray problem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hi, ich habe ein größeres Problem, dass wie ich denke auf einem Logikfehler beruht. Da ich weder den Fehler finden kann, noch in der Lage bin eine andere Lösung aus dem Hut zu zaubern hoffe ich mal dass ihr mir helfen könnt. DAs ganze ist etwas komplex, aber ich poste mal die 2 wichtigen Funktionen. (php)


    function basket_add($prod_id){
       # echo "id:".$prod_id;
        $basket_prod_stk = 0;
        if(!empty($_SESSION['basket'])){
            for($i = 0; $i < count($_SESSION['basket']); $i++){
                echo "[$i]";
                if($_SESSION['basket'][$i][0] == $prod_id){
                    echo "[x]";
                    $basket_prod_stk = $_SESSION['basket'][$i][1];
                    break;
                }
            }
        }
        $basket_prod_stk++;
        #$_SESSION['basket'][(empty($i))?0:$i] = array($prod_id, $basket_prod_stk);
        #echo "--(i)>".$i;
        #echo "--(cnt)>".count($_SESSION['basket']);
        $_SESSION['basket'][(!isset($i))?0:$i] = array($prod_id, $basket_prod_stk);
       # echo "------";
        #print_r($_SESSION['basket'][3]);
    }
    
    function basket_remove($prod_id){
        #echo "1.1 id".$prod_id."<br/>";
        if(!empty($_SESSION['basket'])){
            for($i = 0; $i < count($_SESSION['basket']);$i++){
            echo "[$i]";
                if($_SESSION['basket'][$i][0] == $prod_id){
                echo "[x]";
                    $basket_prod_stk = $_SESSION['basket'][$i][1];
                    break;
                }
            }
        }
        $basket_prod_stk--;
       # echo "stk: ".$basket_prod_stk;
        if(empty($basket_prod_stk)){
            $_SESSION['basket'][$i] = "";
            unset($_SESSION['basket'][$i]);
        }else{
            $_SESSION['basket'][$i] = array($prod_id, $basket_prod_stk);
        }
        #echo "-------------";
        #print_r($_SESSION['basket'][$i]);
    }


    Die beiden Funktionen speichern in der session basket (array) an array, das aus der id des produktes (integer) und der Anzahl im Warenkorb (integer) besteht.

    DAs Problem ist, dass ich nachdem ich einzelne Produkte vollständig gelöscht habe, ich keine weiteren mehr hinzufügen kann, bzw zu nachfolgenden keine mehr hinzufügen. Kurz: die ganze Struktur in der Session stimmt nichtmehr.

    Ich habe mal geschaut, und anscheinend gibt es ein Problem mit der count funktion, die nähmlich bereits via unset gelöschte einträge noch mitzählt und demnach kann die Schleife ja garnichtmehr korrekt laufen.

    Allerdings kann ich das Prinziep nicht komplett ändern, da viele weitere Funktionen darauf aufbauen, und ich dann alles umschreiben müsste, was eigentlich unmöglich ist.

    Ich hoffe Ihr könnt mir helfen, mfg
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. also ohne jetzt großartig viel ändern zu müssen wäre eine einfache neue Struktur des Arrays von nöten, du hast recht numerische Schlüssel von einem Array kann man nicht mit unset wieder löschen

    $oldArray = $array();
    $array = array();
    foreach($oldArray as $key => $item) {
        $array[intval($key)] = $item;
    }


    Eine nicht getestete Variante die mir gerade so vorschwebt ist die Funktion
    array_values()
    .
    Mit ihr kann man glaube ich ein Array neu indizieren lassen was im Endeffekt auf das selbe Ergebnis führen sollte :)

    Teste es mal aus :)
  4. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hey die Funktion array_values() hat das Problem gelöst. Die Lücke die durch das Löschen eines Feldes entsteht wird geschlossen und man hat wieder ein fortlaufendes Array.

    Vielen Dank & MFG

    Beitrag zuletzt geändert: 7.8.2011 18:32:21 von programtools
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!