Avatar billede darkside Nybegynder
22. januar 2004 - 14:49 Der er 38 kommentarer og
2 løsninger

Shop Problem

Heysa, jeg sidder og roder lidt med at lave en lille shop, men er løbet ind i et lille problem.

Jeg har en side man kan vælge at købe en vare fra, men hvordan pokker for jeg lavet en side hvor jeg kan liste alt det der er blevet valgt?

Jeg vil tro man kan benytte et arrey eller noget i den stil, hvad mener eksperterne ?

Evt gerne kode eks.
Avatar billede delphimann Nybegynder
22. januar 2004 - 14:59 #1
det kommer jo an på hvordan din shop er bygget op !
Avatar billede kimg Nybegynder
22. januar 2004 - 15:09 #2
En løsning kunne være at lægge det i database, når kunden klikker på læg i kurv.
Avatar billede schaefner Juniormester
22. januar 2004 - 15:10 #3
jeg ville gemme det i et array i en session, f.eks.:

$_SESSION['items'][varens_id] = antal
Avatar billede darkside Nybegynder
22. januar 2004 - 15:12 #4
schaefner, Kan du give et lille eks ?
Er ikke lige så pokkers god til at arbejde med array's ;)
Avatar billede schaefner Juniormester
22. januar 2004 - 15:14 #5
Et lille eksempel:

<?php
session_start();
$key = $_GET['product_id']; // AVrens id
if ($_GET['method'] == 'add') {
    if (isset($_SESSION['items'])) { // Tjekker om arrayet findes
        if (isset($_SESSION['items'][$key])) { // Hvis varen allerede er i kurven lægges der 1 til antallet
            $_SESSION['items'][$key]++;
        } else {
            $_SESSION['items'][$key] = 1; // Ellers tilføjes varen og antallet sættes til 1
        }
    } else {
        $_SESSION['items'] = array(); // Ellers laver vi et array
        $_SESSION['items'][$key] = 1; // ... og tilføjer varen
    }
}
?>
Avatar billede kokoko Nybegynder
22. januar 2004 - 15:18 #6
Avatar billede jakobclausen Nybegynder
22. januar 2004 - 15:20 #7
schaefner >> Er bare lige lidt nysgerrig. Hvad gør nedenstående linie?

if ($_GET['method'] == 'add') {
Avatar billede schaefner Juniormester
22. januar 2004 - 15:25 #8
hov, den virker vidst ikke helt som den skal. 2 sekunder, så prøver jeg lige at lave noget der skulle virke ;)
Avatar billede schaefner Juniormester
22. januar 2004 - 15:26 #9
nææh, den virker vidst fint nok ;)
Avatar billede darkside Nybegynder
22. januar 2004 - 15:28 #10
Lige et lille tillægs spm, hvordan pokker trækker jeg det data ud som ligger i det array og viser det ?

Altså eks: Varenavn            Pris        Antal ?

Jeg er oxo lidt i tvivl om linjen if ($_GET['method'] == 'add') {
Avatar billede schaefner Juniormester
22. januar 2004 - 15:29 #11
Sådan:

<?php
session_start();
$key = $_GET['id']; // Varens id

if (isset($_SESSION['items'])) { // Tjekker om arrayet findes
    if (isset($_SESSION['items'][$key])) { // Hvis varen allerede er i kurven lægges der 1 til antallet
        $_SESSION['items'][$key]++;
    } else {
        $_SESSION['items'][$key] = 1; // Ellers tilføjes varen og antallet sættes til 1
    }
} else {
    $_SESSION['items'] = array(); // Ellers laver vi et array
    $_SESSION['items'][$key] = 1; // ... og tilføjer varen
}

// Udskriver vare

foreach ($_SESSION['items'] AS $product => $quantity) {
    echo $quantity.' af produkt nr. '.$product.'<br>';
}
?>
Avatar billede schaefner Juniormester
22. januar 2004 - 15:31 #12
darkside og jakobclausen >> Det er fordi jeg selv har lavet et ligende system, hvor den samme fil opdaterede, tilføjede og slettede varer fra kurven, derfor $_GET['method'] ;)

Lidt hurtig klippe/klistre
Avatar billede darkside Nybegynder
22. januar 2004 - 15:33 #13
schaefner, Virker perfekt!

Men det ser ikke ud til den tager antal og evt pris med?

Kan du ændre den så den gør?
Avatar billede schaefner Juniormester
22. januar 2004 - 15:33 #14
men således skulle det gerne virke: http://schaefner.dk/test.php?id=2
Avatar billede schaefner Juniormester
22. januar 2004 - 15:35 #15
Pris, varenavn og den slags ville jeg jo så gemme i en database, og udfra array'et hive informationerne ud af databasen.
Avatar billede schaefner Juniormester
22. januar 2004 - 15:39 #16
Hvis man selv skal vælge antallet af en vare man vil have, så skal du lave det sådan:

<?php
/*
fil.php?id=1&quantity=5
*/
session_start();
$key = $_GET['id']; // Varens id
$quantity = isset($_GET['quantity']) ? $_GET['quantity'] : 1; // Hvis ikke antallet er sat, sættes den til 1

if (isset($_SESSION['items'])) { // Tjekker om arrayet findes
    if (isset($_SESSION['items'][$key])) { // Hvis varen allerede er i kurven opdateres antallet
        $_SESSION['items'][$key] += $quantity;
    } else {
        $_SESSION['items'][$key] = $quantity; // Ellers tilføjes varen og antallet sættes til $quantity
    }
} else {
    $_SESSION['items'] = array(); // Ellers laver vi et array
    $_SESSION['items'][$key] = $quantity; // ... og tilføjer varen
}
?>
Avatar billede darkside Nybegynder
22. januar 2004 - 15:43 #17
jeg er lidt i tvivl om hvad følgende gør?
AS $product => $quantity

Kan du forklare det?
Avatar billede schaefner Juniormester
22. januar 2004 - 15:48 #18
Den kører array'et igennem, og sætter $product til array'ets key og $quantity til array'ets value


Det er ikke helt nemt at forklare, det er snart nemmere at kigge her :)

http://dk2.php.net/manual/en/control-structures.foreach.php
Avatar billede jakobclausen Nybegynder
22. januar 2004 - 16:03 #19
Har bygget videre på schaefners eksempel, så der er database tilgang.

shop
------------------
id  | navn | pris|
-------------------
  1  | cola |  15 |

<?php

//fil.php?id=1&quantity=5

session_start();
$key = $_GET['id']; // Varens id
$quantity = isset($_GET['quantity']) ? $_GET['quantity'] : 1; // Hvis ikke antallet er sat, sættes den til 1

if (isset($_SESSION['items'])) // Tjekker om arrayet findes
{
    if (isset($_SESSION['items'][$key])) // Hvis varen allerede er i kurven opdateres antallet
    {
        $_SESSION['items'][$key] += $quantity;
    }
    else
    {
        $_SESSION['items'][$key] = $quantity; // Ellers tilføjes varen og antallet sættes til $quantity
    }
}
else
{
    $_SESSION['items'] = array(); // Ellers laver vi et array
    $_SESSION['items'][$key] = $quantity; // ... og tilføjer varen
}

// Udskriver vare

foreach ($_SESSION['items'] AS $product => $quantity)
{
    $connect = mysql_connect("host", "bruger", "password");
    mysql_select_db("database");

    $result = mysql_query("SELECT * FROM shop WHERE id = $product ");
    while($row = mysql_fetch_array($result))
    {
        echo $quantity.' stk '. $row[navn] .'- Varenr: '. $product.'<br>';
        $sum = $row[pris]*$quantity;
        echo 'Pris: ' . $sum;
    }
}
?>
Avatar billede schaefner Juniormester
22. januar 2004 - 16:08 #20
Ingen grund til at connecte hver gang foreach kører igennem en række i array'et ;)

<?php
if (isset($_SESSION['items']) && count($_SESSION['items']) > 0) {
    $products = implode(',',array_keys($_SESSION['items']));
    $mysql_handle = mysql_connect("host", "bruger", "password");
    mysql_select_db("database",$mysql_handle);

    $result = mysql_query("SELECT * FROM shop WHERE id IN($products)");
    while($row = mysql_fetch_array($result)) {
        echo $quantity.' stk af '. $row['navn'] .' - Varenr: '. $product.' - Pris: '.($row['pris']*$quantity);
    }
    mysql_close($mysql_handle);
}
?>
Avatar billede schaefner Juniormester
22. januar 2004 - 16:09 #21
<?php
if (isset($_SESSION['items']) && count($_SESSION['items']) > 0) {
    $products = implode(',',array_keys($_SESSION['items']));
    $mysql_handle = mysql_connect("host", "bruger", "password");
    mysql_select_db("database",$mysql_handle);

    $result = mysql_query("SELECT * FROM shop WHERE id IN($products)");
    while($row = mysql_fetch_array($result)) {
        $key = $row['id'];
        $quantity = $_SESSION['items'][$key];
        echo $quantity.' stk af '. $row['navn'] .' - Varenr: '. $product.' - Pris: '.($row['pris']*$quantity);
    }
    mysql_close($mysql_handle);
}
?>
Avatar billede schaefner Juniormester
22. januar 2004 - 16:10 #22
ved $product kan du så bare udskrive $row['id']
Avatar billede jakobclausen Nybegynder
22. januar 2004 - 16:17 #23
Er det bedre, end at bruge for each ?
Avatar billede darkside Nybegynder
22. januar 2004 - 16:23 #24
Okay sidste spm, hvordan ligger man nemmeste priserne sammen

Eks man har 10 Cola og 5 Øl
Cola koster 80 Kr og Øl koster 110 Kr
Det skulle jo gerne give 190 Kr Totalt.
Avatar billede schaefner Juniormester
22. januar 2004 - 16:26 #25
<?php
if (isset($_SESSION['items']) && count($_SESSION['items']) > 0) {
    $products = implode(',',array_keys($_SESSION['items']));

    $mysql_handle = mysql_connect("host","bruger","password");
    mysql_select_db("database",$mysql_handle);

    $result = mysql_query("SELECT * FROM shop WHERE id IN($products)");
    while($row = mysql_fetch_array($result)) {
        $key = $row['id'];
        $quantity = $_SESSION['items'][$key];
        $sum = $row['pris']*$quantity;
        $subtotal += $sum;
        echo $quantity.' stk af '. $row['navn'] .' - Varenr: '. $product.' - Pris: '.$sum.'<br>';
    }
    echo number_format($subtotal,2,',','.');
    mysql_close($mysql_handle);
}
?>
Avatar billede jakobclausen Nybegynder
22. januar 2004 - 16:30 #26
schaefner >> I sql'en skriver du IN istedet for = , hvad gør den ?
Avatar billede schaefner Juniormester
22. januar 2004 - 16:33 #27
$products = implode(',',array_keys($_SESSION['items'])); laver en streng med alle varenumrene ad skilt af komma (1,5,7)

id IN($products) tager alle rækker i databasen hvor id findes i "IN-listen"

http://www.mysql.com/doc/en/Comparison_Operators.html
Avatar billede schaefner Juniormester
22. januar 2004 - 16:34 #28
adskilt hedder det :)
Avatar billede jakobclausen Nybegynder
22. januar 2004 - 16:36 #29
sikker på at det sidste her virke? Synes ikke rigtig jeg kan få den til at udskrive noget
Avatar billede schaefner Juniormester
22. januar 2004 - 17:16 #30
Avatar billede darkside Nybegynder
22. januar 2004 - 17:24 #31
schaefner, Når jeg bruger følgende:
<?php
if (isset($_SESSION['items']) && count($_SESSION['items']) > 0) {
    $products = implode(',',array_keys($_SESSION['items']));

    $mysql_handle = mysql_connect("host","bruger","password");
    mysql_select_db("database",$mysql_handle);

    $result = mysql_query("SELECT * FROM shop WHERE id IN($products)");
    while($row = mysql_fetch_array($result)) {
        $key = $row['id'];
        $quantity = $_SESSION['items'][$key];
        $sum = $row['pris']*$quantity;
        $subtotal += $sum;
        echo $quantity.' stk af '. $row['navn'] .' - Varenr: '. $product.' - Pris: '.$sum.'<br>';
    }
    echo number_format($subtotal,2,',','.');
    mysql_close($mysql_handle);
}
?>
Bliver mit resultat sådan her:
4 stk af Cola - Varenr: 1 - Pris: 3200
4 stk af Øl - Varenr: 1 - Pris: 2576
5.776,004 stk af Cola - Varenr: 2 - Pris: 3200
4 stk af Øl - Varenr: 2 - Pris: 2576
11.552,00

Men problemmet er der er kun tilføjet 4 Cola og 4 Øl. ikke det der vilde tal 5.776,004 stk af Cola - Varenr: 2 - Pris: 3200
Avatar billede schaefner Juniormester
22. januar 2004 - 17:26 #32
Hvordan kan nogle have det samme varenr.? Hvordan har du skrevet prisen i databasen?
Avatar billede darkside Nybegynder
22. januar 2004 - 17:28 #33
schaefner, Har fundet fejlen.. :)

Det var en af de der fejl 40! ;)
Avatar billede schaefner Juniormester
22. januar 2004 - 17:29 #34
Du kan da lige prøve med den kode3 jeg har brugt på http://schaefner.dk/test.php

CREATE TABLE shop (
  id int(11) NOT NULL auto_increment,
  navn varchar(100) NOT NULL default '',
  pris int(11) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Dumping data for table `shop`
#

INSERT INTO shop VALUES (1, 'cola', 10);
INSERT INTO shop VALUES (2, 'slik', 12);

<?php
session_start();
$key = $_GET['id']; // Varens id
$quantity = isset($_GET['quantity']) ? $_GET['quantity'] : 1; // Hvis ikke antallet er sat, sættes den til 1

if (isset($_SESSION['items'])) { // Tjekker om arrayet findes
    if (isset($_SESSION['items'][$key])) { // Hvis varen allerede er i kurven opdateres antallet
        $_SESSION['items'][$key] += $quantity;
    } else {
        $_SESSION['items'][$key] = $quantity; // Ellers tilføjes varen og antallet sættes til $quantity
    }
} else {
    $_SESSION['items'] = array(); // Ellers laver vi et array
    $_SESSION['items'][$key] = $quantity; // ... og tilføjer varen
}

if (isset($_SESSION['items']) && count($_SESSION['items']) > 0) {
    $products = implode(',',array_keys($_SESSION['items']));

    $mysql_handle = mysql_connect('*','*','*');
    mysql_select_db('*',$mysql_handle);

    $result = mysql_query("SELECT * FROM shop WHERE id IN($products)");
    while($row = mysql_fetch_array($result)) {
        $key = $row['id'];
        $quantity = $_SESSION['items'][$key];
        $sum = $row['pris']*$quantity;
        $subtotal += $sum;
        echo $quantity.' stk '. $row['navn'] .' - Pris : '. number_format($row['pris'],2,',','.').' kr. - Total : '.number_format($sum,2,',','.').' kr. <br>';
    }
    echo number_format($subtotal,2,',','.');
    mysql_close($mysql_handle);
}
?>
Avatar billede schaefner Juniormester
22. januar 2004 - 17:29 #35
ok, det kan jo ske ;)
Avatar billede darkside Nybegynder
22. januar 2004 - 17:59 #36
Takker for hjælpen, i kan få lov til at dele pointene ;)
Avatar billede jakobclausen Nybegynder
22. januar 2004 - 18:02 #37
Hmm jeg takker, schaefner burde godt nok have haft lidt mere.
Avatar billede darkside Nybegynder
22. januar 2004 - 18:20 #38
Han må bare sig til, så kan jeg da give ham 50 point mere ;)
Avatar billede schaefner Juniormester
22. januar 2004 - 18:38 #39
mon ikke jeg klarer mig uden :)
Avatar billede acmed Nybegynder
10. oktober 2005 - 21:37 #40
Som jeg læser det, har fået det til at være følgende kode.
Jeg kan bare ikke få det til at gøre noget fornuftigt:

<?php

//fil.php?id=1&quantity=5

session_start();
$key = $_GET['id']; // Varens id
print ('test');
$quantity = isset($_GET['quantity']) ? $_GET['quantity'] : 1; // Hvis ikke antallet er sat, sættes den til 1

if (isset($_SESSION['items'])) // Tjekker om arrayet findes
{
    if (isset($_SESSION['items'][$key])) // Hvis varen allerede er i kurven opdateres antallet
    {
        $_SESSION['items'][$key] += $quantity;
    }
    else
    {
        $_SESSION['items'][$key] = $quantity; // Ellers tilføjes varen og antallet sættes til $quantity
    }
}
else
{
    $_SESSION['items'] = array(); // Ellers laver vi et array
    $_SESSION['items'][$key] = $quantity; // ... og tilføjer varen
}

// Udskriver vare

foreach ($_SESSION['items'] AS $product => $quantity)
{
if (isset($_SESSION['items']) && count($_SESSION['items']) > 0) {
    $products = implode(',',array_keys($_SESSION['items']));

    $mysql_handle = mysql_connect("host","bruger","password");
    mysql_select_db("database",$mysql_handle);

    $result = mysql_query("SELECT * FROM easyshave_products WHERE id IN($products)");
    while($row = mysql_fetch_array($result)) {
        $key = $row['id'];
        $quantity = $_SESSION['items'][$key];
        $sum = $row['pris']*$quantity;
        $subtotal += $sum;
        echo $quantity.' stk af '. $row['navn'] .' - Varenr: '. $product.' - Pris: '.$sum.'<br>';
    }
    echo number_format($subtotal,2,',','.');
    mysql_close($mysql_handle);
}
}
?>
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