Avatar billede rthuls Nybegynder
09. april 2006 - 22:51 Der er 9 kommentarer og
2 løsninger

Indkøbskurv uden database

Jeg skal lave en simple "shop", dog uden betalingsdelen.
Brugeren skal have mulighed for at komme varer i indkøbskurven, men ved køb skal der blot sendes en mail med bestillingen.

Problemet er at jeg ikke har en database til rådighed, så jeg er i tvivl om hvordan jeg smartest håndterer dataen i brugerens kurv.

Skal jeg bruge sessions, cookies, xml eller andet? Alle gode råd er velkommene.
Avatar billede Six Nybegynder
09. april 2006 - 23:13 #1
Du kan sagtens lagre dine data i sessions :D smid nogle arrays i nogle sessions.

Kurven.php
                                <?
                                    if (isset($_SESSION['varer'])) {
                                        $varer = $_SESSION['varer'];
                                    }

                                    if ($varer) {
                                      foreach ($varer as $key => $vare) {
                                            echo "V_model: ".$vare[0]."<br />";
                                            echo "Vare: ".$vare[1]."<br />";
                                            echo "Antal: ".$vare[2]."<br />";
                                            echo "Pris: ".$vare[3] * $vare[2]."<br />";
                                            echo "<a href=\"inc\\sletvare.php?id=".$key."\">slet vare</a><br /><br />";
                                      };
                                    };
                                    if (isset($_SESSION['varer'])) {
                                        echo "<a href=\"index.php?mode=kundeinfo\">Bestil</a>";
                                    } else { echo "Der er endnu ikke nogle varer i kurven"; }


                                ?>

Tilfoej.php
<?php

if ($_POST) {
    session_start();
  if (isset($_SESSION['varer'])) {
      $varer = $_SESSION['varer'];
  }
  else {
        $varer = array();
    }
   
    $varer[] = array($_POST['v_model'],(int) $_POST['v_id'],(int) $_POST['v_antal'], (int) $_POST['v_pris']);
  $_SESSION['varer'] = $varer;
    header("Location: ". DIRNAME($_SERVER['HTTP_REFERER']) ."/" ."index.php?mode=kurv");

}
?>

slet.php
<?
session_start();
$varer = $_SESSION['varer'];
$vare_id = $_REQUEST['id'];
    if (isset($_SESSION['varer'])) {
      unset($_SESSION['varer'][$vare_id]);
    }

header("Location: ". DIRNAME($_SERVER['HTTP_REFERER']) ."/" ."index.php?mode=kurv");

?>

leg lidt med det der, så skal du nok få lavet en løsning der fungerer :D
Avatar billede Six Nybegynder
09. april 2006 - 23:14 #2
Du skal selvfølgelig lige rette det til, men nu kan du da lige se hvordan det eventuelt kan laves :D
Avatar billede rthuls Nybegynder
09. april 2006 - 23:57 #3
Tak for svaret. Det ser ud til at virke fint, pånær når jeg tilføjer en varer som allerede findes i kurven. Den finder selv ud af at ligge til antallet, men den beholder den gamle varedata og opretter også en ny:

Id: 6504
Antal: 1
Pris: 600

Id: 6504
Antal: 2
Pris: 1200
Avatar billede greew Nybegynder
10. april 2006 - 06:36 #4
Du kan løbe igennem dit $vare-array og se om der findet et produkt med dette model-nummer i forvejen - hvis der gør det, kan du vælge mellem at overskrive, så det kun er det nye antal, der har noget at sige, eller du kan vælge at lægge det nye antal oveni det gamle antal..
Avatar billede rthuls Nybegynder
10. april 2006 - 11:09 #5
Er der en der kan komme med et eksempel på hvordan man løber brugeren varer session igennem og lægger til, samt hvordan man sletter en vare helt fra arrayet?
Avatar billede greew Nybegynder
10. april 2006 - 12:14 #6
Det skulle gerne være muligt at slette en vare fra array'et i kurven.php med slet vare linket. Du skal selvfølgelig sørge for at dette link peger på slet.php (eller hvad du har kaldt den).

En mulig metode til at løbe array'et igennem og lægge varer til er:

foreach ($varer as &$vare) {
    if ($vare[1] == $_POST['v_id'] && $vare[0] == $_POST['v_model']) {
          $vareopdateret = array(
                        $_POST['v_model'],
                        (int) $_POST['v_id'],
                        $vare[2] + (int) $_POST['v_antal'],
                        $vare[3] + (int) $_POST['v_pris']);
          $vare = $vareopdateret;
    }
}

Jeg har ikke testet ovenstående lige nu :-)
Avatar billede rthuls Nybegynder
11. april 2006 - 07:44 #7
Så fik jeg det til at virke :-)

greew > Smider du ikke også et svar?
Avatar billede greew Nybegynder
11. april 2006 - 12:11 #8
done :-)
Avatar billede rthuls Nybegynder
11. april 2006 - 16:23 #9
Nej, ikke helt :-)
Prøv lige igen.
Avatar billede greew Nybegynder
11. april 2006 - 17:29 #10
Haha.. vi prøver igen..
Avatar billede rthuls Nybegynder
11. april 2006 - 21:18 #11
Det var bedre :-)

Tak for hjælpen begge to!
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