Avatar billede kaktus Nybegynder
27. april 2010 - 12:36 Der er 4 kommentarer

simpel cart via session

Kurv med session og array

Min lille test kurv danner ny linie hver gang det tilføjes til kurv.
Jeg ønsker at hvis en vareline findes i forvejen skal den nye post bare tilføjes samme linie, og ikke som nu hvor der dannes en ny linie for hver "læg i kurv" men det driller....

Front-end kan ses her
http://cart.foxi.dk/

og her er lidt kode........

if(isset($_POST['addtocart']) && $_POST['p_id'] !="" && $_POST['p_quantity'] !=0) {
  if (!isset($_SESSION["shop"]))//Hvis sessionen ikke findes(ved første POST)
    $_SESSION['shop'] = array();// så opretter den en kurv SESSION(array)
  $p_lines = count($_SESSION['shop']);
  $_SESSION["shop"][$p_lines][$_POST['category_id']]['p_line']          = $p_lines;
  $_SESSION["shop"][$p_lines][$_POST['category_id']]['k_id']              = $_POST['category_id'];
  $_SESSION["shop"][$p_lines][$_POST['category_id']]['p_id']              = $_POST['p_id'];
  $_SESSION["shop"][$p_lines][$_POST['category_id']]['p_quantity']      = $_POST['p_quantity'];
  $_SESSION["shop"][$p_lines][$_POST['category_id']]['p_price']          = $_POST['p_price'];
  $_SESSION["shop"][$p_lines][$_POST['category_id']]['p_name']          = $_POST['p_name'];
    if($_SESSION["shop"][$p_values['p_line']][$_POST['category_id']]['p_id']      ==  $_POST['p_id']){
    $_SESSION["shop"][$p_lines][$_POST['category_id']]['p_quantity']     =  ($_SESSION["shop"][$p_lines][$_POST['category_id']]['p_quantity'] +  $_POST['p_quantity']);
    }
 
}

PS  Koden er ud af et større eksisterende sammenhæng og jeg vil helst bruge denne variant af session til kurv
Avatar billede repox Seniormester
27. april 2010 - 15:08 #1
Det nemmeste er at korte strukturen ned og fjerne al overflødig kode og dobbeltkonfekt.
Identificer din varelinie på den naturlige unikke forskel (som bør være p_id):
if( isset($_POST["addtocart"]) && $_POST["p_id"] != "" && $_POST["p_quantity"] != 0 ) 
{
 
  if( !isset($_SESSION["shop"]) )
      $_SESSION["shop"] = array();
 
  $p_id = $_POST["p_id"];
  if( isset($_SESSION["shop"][$p_id]) )
  {
      $_SESSION["shop"][$p_id]["p_quantity"] += $_POST["p_quantity"];
  }
  else
  {
      $_SESSION["shop"][$p_id]["k_id"]              = $_POST["category_id"];
      $_SESSION["shop"][$p_id]["p_quantity"]      = $_POST["p_quantity"];
      $_SESSION["shop"][$p_id]["p_price"]          = $_POST["p_price"];
      $_SESSION["shop"][$p_id]["p_name"]          = $_POST["p_name"];
    }
     
}
Avatar billede kaktus Nybegynder
27. april 2010 - 19:20 #2
Så kører jeg på igen......
Jeg er nået dertil hvor jeg ikke kan slette et id fra array...eller rettere ikke tilføje igen fordi den stå som "DELETED" i array

Det er garanteret meget simpelt, men.....

Min slette kode er nu...
if(isset($_POST['submit_kurv_slet'])&&$_POST['del']=="true" && $_POST['p_id']!="") {
    //echo "Deleted " . $_POST['p_id'];//for testing
    $_SESSION['shop'][$_POST['p_id']] = array("DELETED");
    // We don't actually remove anything from the array....
}
grunden til at array sættes til DELETED og ikke fjernes er fra gammel kode som ikke skal bruges her

Kan du hjælpe????
Avatar billede kaktus Nybegynder
27. april 2010 - 19:31 #3
ser ud til at denne kode virker.....
unset($_SESSION['shop'][$_POST['p_id']]);
der hvor der stod
$_SESSION['shop'][$_POST['p_id']] = array("DELETED");

Måske du lige vil teste??
Avatar billede repox Seniormester
28. april 2010 - 09:08 #4
Jeg er ikke sikker på hvordan du vil have jeg skal teste det? Jeg gider ikke sidde og forsøge mig med at bygge de omkringliggende data op, for at kunne gengive din problematik.

Men ellers, så er unset() vejen at gå.
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