Avatar billede lesp Nybegynder
31. december 2006 - 19:13 Der er 23 kommentarer og
1 løsning

Indkøbsvogn - individuel

Jeg har skrevet en indkøbsvogn til brug ved netshops. Mit problem er bare at når jeg tilføjer en vare til indkøbsvognen får ALLE tilføjet den. Jeg vil gerne gøre så den bliver individuel. Jeg kan vise alle mine scripts her:

Showcart.php:

<?php
session_start();
{

//connect to database
$conn = mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("korczynski",$conn)  or die(mysql_error());

$display_block = "<h1>Your Shopping Cart</h1>";

//check for cart items based on user session id
$get_cart = "select st.id, si.item_title, si.item_price, si.item_nr, st.sel_item_qty, st.sel_item_size, st.sel_item_color from store_shoppertrack as st  left join store_items as si on si.id = st.sel_item_id where  session_id = '$PHPSESSID'";
$get_cart_res = mysql_query($get_cart) or die(mysql_error());

if (mysql_num_rows($get_cart_res) < 1) {
    //print message
    $display_block .= "<P>You have no items in your cart.
    Please <a href=\"seestore.php\">continue to shop</a>!</p>";

} else {
    //get info and build cart display
    $display_block .= "
    <table celpadding=3 cellspacing=2 border=1 width=98%>
    <tr>
    <th>Titel</th>
    <th>Pris</th>
    <th>Antal</th>
    <th>Samlet pris</th>
    <th>Varenr</th>
    <th>Slet</th>
    </tr>";

    while ($cart = mysql_fetch_array($get_cart_res)) {
          $id = $cart['id'];
          $item_title = stripslashes($cart['item_title']);
          $item_price = $cart['item_price'];
          $item_qty = $cart['sel_item_qty'];
          $item_nr = $cart['item_nr'];
        $total_price = sprintf("%.02f", $item_price * $item_qty);

          $display_block .= "<tr>
          <td align=center>$item_title <br></td>
          <td align=center>\$ $item_price <br></td>
          <td align=center>$item_qty <br></td>
          <td align=center>\$ $total_price</td>
          <td align=center>$item_nr<br></td>
          <td align=center><a href=\"removefromcart.php?id=$id\">remove</a></td>
          </tr>";
    }

    $display_block .= "</table>";
}
}
?>
<HTML>
<HEAD>
<TITLE>My Store</TITLE>
</HEAD>
<BODY>
<? print $display_block; ?>
<a href="bestilling.php">Fortsæt til kasse</a>
</BODY>
</HTML>
================

Bestilling.php:

<html>

<head>

<title>nix</title>

</head>

<body oncontextmenu="return false"ondragstart="return false"onselectstart="return false">

<div align="left">

<form action="bestilling.php?action=ok" method="POST">
<b>Dit navn:</b><br>
<input type="text" name="navn">
<br>
<b>Din E-mail:</b><br>
<input type="text" name="mail"><br>
<b>Adresse:</b><br>
<input type="text" name="adresse">
<br>
<b>Postnummer og by:</b><br>
<input type="text" name="postnummer">
<br><br>
<input type="submit" value="Send Besked" name="send">
<input type="reset" value="Tøm felterne">
<br>
</div>
</form>

<?
$conn = mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("korczynski",$conn)  or die(mysql_error());

include("showcart.php");

if($_GET[action] == "ok") {

if($_POST[navn] == "") {
echo("Du skal udfylde feltet med dit <b>Navn</b>");
} else {

if($_POST[mail] == "") {
echo("Du skal udfylde feltet med din <b>Mail</b>");
} else {

if($_POST[adresse] == "") {
echo("Du skal udfylde feltet <b>Adresse</b>");
} else {

if($_POST[postnummer] == "") {
echo("Du skal udfylde feltet med dit <b>Postnummer</b>");
} else {


              $showcart = $_POST[showcart.php];
            $navn = $_POST[navn];
            $mail = $_POST[mail];
            $adresse = $_POST[adresse];
            $postnummer = $_POST[postnummer];
            $item_price = $_POST['item_price'];
          $item_qty = $_POST['sel_item_qty'];
          $item_nr = $_POST['item_nr'];


          $cart = mysql_fetch_array($get_cart_res);
          $item_price = $cart['item_price'];
          $item_qty = $cart['sel_item_qty'];
          $item_nr = $cart['item_nr'];
        $total_price = sprintf("%.02f", $item_price * $item_qty);
            $show = $_POST['$item_nr'];
            $shaw = $_POST['item_qty'];

          $display_block .= "


          ";


mail("bratsch@ofir.dk", "Emne: Order", $display_block, $_mail, "From: $mail\nX-Mailer: http://$HTTP_HOST$REQUEST_URI");
echo("<br>Din ordre er modtaget. Er De i tvivl med købeproceduren, så læs venligst købsvejledningen.");

}
}
}
}
}

?>

</div>

</body>

</html>
========

Addtocart.php:

<?php
session_start();

//connect to database
$conn = mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("korczynski",$conn)  or die(mysql_error());

if ($_POST[sel_item_id] != "") {
  //validate item and get title and price
    $get_iteminfo = "select item_title from store_items where id = $_POST[sel_item_id]";
    $get_iteminfo_res = mysql_query($get_iteminfo) or die(mysql_error());

    if (mysql_num_rows($get_iteminfo_res) < 1) {
          //invalid id, send away
          header("Location: seestore.php");
          exit;
    } else {
          //get info
          $item_title =  mysql_result($get_iteminfo_res,0,'item_title');

          //add info to cart table
          $addtocart = "insert into store_shoppertrack values ('', '$PHPSESSID', '$_POST[sel_item_id]', '$_POST[sel_item_qty]', '$_POST[sel_item_size]', '$_POST[sel_item_color]', now())";
          mysql_query($addtocart);

          //redirect to showcart page
          header("Location: showcart.php");
          exit;
    }
} else {
    //send them somewhere else
    header("Location: seestore.php");
    exit;
}
?>
=====

Removefromcard.php

<?php
session_start();
//connect to database
$conn = mysql_connect("", "", "")  or die(mysql_error());
mysql_select_db("korczynski",$conn)  or die(mysql_error());

if ($_GET[id] != "") {
    $delete_item = "delete from store_shoppertrack where id = $_GET[id] and session_id = '$PHPSESSID'";
    mysql_query($delete_item) or die(mysql_error());

    //redirect to showcart page
    header("Location: showcart.php");
    exit;

} else {
    //send them somewhere else
    header("Location: seestore.php");
    exit;
}
?>
=======

Seestore.php:

<?php
session_start();
//connect to database
$conn = mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("korczynski",$conn)  or die(mysql_error());

$display_block = "<h1>My Categories</h1>
<P>Select a category to see its items.</p>";

//show categories first
$get_cats = "select id, cat_title, cat_desc from store_categories order by cat_title";
$get_cats_res = mysql_query($get_cats) or die(mysql_error());

if (mysql_num_rows($get_cats_res) < 1) {
  $display_block = "<P><em>Sorry, no categories to browse.</em></p>";
} else {
  while ($cats = mysql_fetch_array($get_cats_res)) {
        $cat_id  = $cats[id];
        $cat_title = strtoupper(stripslashes($cats[cat_title]));
        $cat_desc = stripslashes($cats[cat_desc]);

        $display_block .= "<p><strong><a href=\"$_SERVER[PHP_SELF]?cat_id=$cat_id\">$cat_title</a></strong><br>$cat_desc</p>";

        if ($_GET[cat_id] == $cat_id) {
          //get items
          $get_items = "select id, item_title, item_price from store_items where cat_id = $cat_id order by item_title";
          $get_items_res = mysql_query($get_items) or die(mysql_error());

          if (mysql_num_rows($get_items_res) < 1) {
                $display_block = "<P><em>Sorry, no items in this category.</em></p>";
          } else {
                $display_block .= "<ul>";

                while ($items = mysql_fetch_array($get_items_res)) {
                  $item_id  = $items[id];
                  $item_title = stripslashes($items[item_title]);
                  $item_price = $items[item_price];

                  $display_block .= "<li><a href=\"showitem.php?item_id=$item_id\">$item_title</a></strong> (\$$item_price)";
                }

                $display_block .= "</ul>";
          }
      }
  }
}
?>
<HTML>
<HEAD>
<TITLE>My Categories</TITLE>
</HEAD>
<BODY>
<? print $display_block; ?>
</BODY>
</HTML>
=======

Showitem.php:

<?php
session_start();
//connect to database
$conn = mysql_connect("", "", "")
or die(mysql_error());
mysql_select_db("korczynski",$conn)  or die(mysql_error());

$display_block = "<h1>My Store - Item Detail</h1>";

//validate item
$get_item = "select c.cat_title, si.item_title,
si.item_price, si.item_desc, si.item_image, si.item_nr
from store_items as si left join store_categories
as c on c.id = si.cat_id where si.id = $_GET[item_id]";

$get_item_res = mysql_query($get_item)
or die (mysql_error());

if (mysql_num_rows($get_item_res) < 1) {
  //invalid item
  $display_block .= "<P><em>Invalid item selection.</em>
  </p>";
} else {
  //valid item, get info
  $cat_title = strtoupper(stripslashes(
  mysql_result($get_item_res,0,'cat_title')));
  $item_title = stripslashes(mysql_result($get_item_res,0,
  'item_title'));
  $item_price =
    mysql_result($get_item_res,0,'item_price');
  $item_desc = stripslashes(mysql_result($get_item_res,0,
  'item_desc'));
  $item_nr = stripslashes(mysql_result($get_item_res,0,'item_nr'));
  $item_image = mysql_result($get_item_res,0,
  'item_image');


  //make breadcrumb trail
  $display_block .= "<P><strong><em>You are viewing:</em>
  <br>
  <a href=\"seestore.php?cat_id=$cat_id\">$cat_title</a>
  &gt; $item_title</strong></p>

  <table cellpadding=3 cellspacing=3>
  <tr>

  <td valign=middle align=center><img src=\"images/$item_image\">
  </td>
  <td valign=middle><P><strong>Description:</strong><br>
  $item_desc</p><br>
  <P><strong>Varenr:</strong><br>
  $item_nr</p> <br>

  <P><strong>Price:</strong> \$$item_price</p>
  <form method=post action=\"addtocart.php\">";

  //get colors
  $get_colors = "select item_color from store_item_color where item_id ='" . $item_id ."' order by item_color";
  $get_colors_res = mysql_query($get_colors) or die(mysql_error());

  if (mysql_num_rows($get_colors_res) > 0) {
          $display_block .= "<P><strong>Available Colors:</strong>
          <select name=\"sel_item_color\">";
          while ($colors = mysql_fetch_array($get_colors_res)) {
            $item_color = $colors['item_color'];
            $display_block .= "<option value=\"$item_color\">$item_color</option>";
          }

          $display_block .= "</select>";
  }

  //get sizes
  $get_sizes = "select item_size from store_item_size where item_id ='" . $item_id ."' order by item_size";

  $get_sizes_res = mysql_query($get_sizes) or die(mysql_error());

  if (mysql_num_rows($get_sizes_res) > 0) {
          $display_block .= "<P><strong>Available Sizes:</strong>
          <select name=\"sel_item_size\">";
          while ($sizes = mysql_fetch_array($get_sizes_res)) {
            $item_size = $sizes['item_size'];
            $display_block .= "
            <option value=\"$item_size\">$item_size</option>";
          }

          $display_block .= "</select>";
  }
 


  $display_block .= "
  <P><strong>Select Quantity:</strong>
  <select name=\"sel_item_qty\">";

  for($i=1; $i<11; $i++) {
          $display_block .= "<option value=\"$i\">$i</option>";
  }

  $display_block .= "
  </select>
  <input type=\"hidden\" name=\"sel_item_id\" value=\"$_GET[item_id]\">
  <P><input type=\"submit\" name=\"submit\" value=\"Add to Cart\"></p>
  </form>
  </td>
  </tr>
  </table>";
}
?>
<HTML>
<HEAD>
<TITLE>My Store</TITLE>
</HEAD>
<BODY>
<? print $display_block; ?>
</BODY>
</HTML>
Avatar billede windcape Praktikant
31. december 2006 - 19:16 #1
Hvorfor bygger du ikke bare en session baseret webshop i stedet?
Avatar billede windcape Praktikant
31. december 2006 - 19:19 #2
Simpel udgave:

<?php

class Cart
{
    private $products;

    static function getInstance() {
        if(!isset($_SESSION['cart'])) {
            $_SESSION['cart'] = new Cart();
        }
        return $_SESSION['cart'];
    }
   
    private function __construct() {
    }
   
    public function addProduct($id,$quantity) {
        if(!isset($this->products[$id])) {
            $this->products[$id] = $quantity;
        } else {
            $this->products[$id] += $quantity;
        }
    }
   
    public function getProducts() {
        return $this->products;
    }
}

?>

og eksempel på brug:

<?php

require_once 'Cart.php';
session_start();

$cart = Cart::getInstance();
$cart->addProduct(1,15);
$cart->addProduct(7,2);
$cart->addProduct(23,1);

print_r($cart->getProducts());

?>
Avatar billede lesp Nybegynder
31. december 2006 - 19:23 #3
Kan du uddybe hvad du mener?
Avatar billede windcape Praktikant
31. december 2006 - 19:26 #4
Jeg vil mene at min kode uddyber hvad jeg mener.

Du bør altså IKKE bygge en webshop uden at have det fornødne kendskab til 'advanceret' PHP, eller ihvertfald regne med at blive bedt om at forstå det for at bygge en.

I din nuværende (meget dårlige) kode, ser det jo ud til at du gemmer produkterne i en database. Hvis du gemmer den i en session, ville det jo logisk nok , kun være pr. bruger.

Forresten skulle du tage at prøve at køre din kode under E_STRICT :-)
Avatar billede lesp Nybegynder
31. december 2006 - 19:28 #5
Kunne du eventuelt omskrive mine scripts til at gemme dem i en session?
Avatar billede windcape Praktikant
31. december 2006 - 19:32 #6
Kun hvis du vil betale mig 1000 kr. i timen :p

Jeg HAR allerede bygget webhops. Og i dag er det dig som bygger en, og hvis du agter at fortsætte må du jo lære det nødvendige PHP.

Og når det er sagt: lad være med at kode en webshop uden at kende til OOP,design-patterns og BRUG et template-system af en afart.
Avatar billede lesp Nybegynder
31. december 2006 - 19:36 #7
Okay. Men kan du så hjælpe mig med at bygge denne webshop om, for jeg ved det kan lade sig gøre at skrive den om med sessions?
Avatar billede simplus Nybegynder
31. december 2006 - 19:45 #8
kort sagt gør følgene:

udskift dine INSERT's med $dit_input = $_SESSION['navn'];
og udskift dine SELECT's med echo $_SESSION['navn'];

det er selvfølgelige ikke ligetil, men meget mere skal der ikke til.

Jeg vil dog give windcape ret i at OOP er en ganske stor fordel at kunne når man laver større app. - det er næsten et must :-)
Avatar billede lesp Nybegynder
31. december 2006 - 19:47 #9
I alle filer?
Avatar billede simplus Nybegynder
31. december 2006 - 19:50 #10
ikke nødvendigvis, måske kun der hvor fejlen opstår.

jeg har jo ikke styr på hvordan du har bygget det op, ja din kode står der, men der er jo 2000 linier :-)
Avatar billede windcape Praktikant
31. december 2006 - 19:55 #11
Personligt ville jeg slette alt din kode, og så brygge noget sammen ved hjælp af Zend Framework (http://framework.zend.com), og den class jeg selv skrev (i en advanceret udgave).
Avatar billede lesp Nybegynder
31. december 2006 - 20:01 #12
Den der med select? Kan du ikke lige fortælle mig hvor den skal ind?
Avatar billede simplus Nybegynder
31. december 2006 - 20:03 #13
det jeg mente var at istedet for at udskrive noget fra databasen, skal du udskrive din session! :-)
Avatar billede lesp Nybegynder
31. december 2006 - 20:05 #14
Det ved jeg. Men hvor skal jeg tage den ind fx?
Avatar billede simplus Nybegynder
31. december 2006 - 20:06 #15
der hvor du har en select der udskriver noget?
Avatar billede simplus Nybegynder
31. december 2006 - 20:07 #16
... men jeg mener dog ligesom windcape at du bør bruge et færdiglavet system, og vente med at lave det selv indtil du får lært lidt som OOP.
Avatar billede lesp Nybegynder
31. december 2006 - 20:12 #17
Og et færdigt system er det der Zend Framework?
Avatar billede simplus Nybegynder
31. december 2006 - 20:18 #18
Det ved jeg ikke, bruger ikke selv disse, men læs om det her: http://framework.zend.com/
Avatar billede lesp Nybegynder
31. december 2006 - 20:27 #19
Altså mit script er da godt nok. jeg HAR jo angivet en session men det er som om den ikke virker...
Avatar billede windcape Praktikant
01. januar 2007 - 00:33 #20
ZF er et framework, ikke et "script". Det bruges til at bygge ting med :p

"Altså mit script er da godt nok".

Nej, groft sagt har du kun en bunke rigtig grimt PHP kode, fuld af fejl. Der er overhovedet ingen mening i at forsøge at kode en webshop uden den fornødne erfaring.

Alt du vil opnå er at blive fortalt hvad jeg allerede har sagt :-) Det er en god udfordring, men jeg vil forslå dig at glemme den indtil du kan forstå det jeg har skrevet , og den kode jeg har skrevet (som faktisk er ultra simpel.. arrays og sessions burde være barnemad for enhver over hello-world stadiet).
Avatar billede radion Nybegynder
01. januar 2007 - 10:28 #21
til Windcape

"og den kode jeg har skrevet (som faktisk er ultra simpel.. arrays og sessions burde være barnemad for enhver over hello-world stadiet)."

jeg er enig i din holdning langt hen ad vejen, afhængigt hvad formålet med en webshop er.. hvis den skal sælges skal man sq have erfaring, hvis ikke er de da meget sjove, og man lærer en hel masse om at jonglere rundt med data :)

men, det er ikke alle PHP programmører der har sat sig ind i OoP, måske fordi PHP som grund ikke har lagt op til at være særligt Objekt orienteret.

Jeg har fx ikke sat mig specielt ind i OoP, mest fordi jeg har kunne klare mig uden, og skulle da lige bruge dobbelt tid på at kigge på din kode, for at finde ud af hvordan den gjorde ting :)

hvorfor mener du OoP skulle være en nødvendighed ?

\Radion - bare nysgerrig
Avatar billede windcape Praktikant
01. januar 2007 - 19:14 #22
radion:

"men, det er ikke alle PHP programmører der har sat sig ind i OoP, måske fordi PHP som grund ikke har lagt op til at være særligt Objekt orienteret."
>> Du har vist ikke lagt mærke til hvor PHPs udvikler team er ved at gøre PHP meget mere objekt orienteret. At bruge classes er noget man lærer i PHP, ligesom at bruge arrays. Og classes hører en webshop til.

"Jeg har fx ikke sat mig specielt ind i OoP, mest fordi jeg har kunne klare mig uden, og skulle da lige bruge dobbelt tid på at kigge på din kode, for at finde ud af hvordan den gjorde ting :)"
>> Faktisk er min kode knap nok OOP, de pakker bare 3 funktioner i et scope, og gør så du kan gemme/hente dataen fra en session meget nemt. Hvis koden var skrevet som forskellige funktioner skulle du bruge endnu mere tid på at finde ud af hvor de var defineret, og hvordan.

"hvorfor mener du OoP skulle være en nødvendighed ?"
>> OOP egner sig genialt til at strukturer størrere projekter (sjovt nok det der er meningen med OOP :p)

F.eks. har jeg alle mine moduler: nyheder,sider,galleri,etc. som klasse, og derfor har jeg bare kunne sætte en server op så jeg kunne arbejdet med dem som en webservice.

Oversat: Det tog mig 5minutter pga. min OOP at lave så at jeg kunne administrerer mine moduler fra en Firefox Extension :-) kunne også havde været en anden webside, eller et program.

I mange tilfælde benyttes OOP faktisk kun til at sætte flere funktioner i et scope (altså en kasse), men selv dette giver rigtig god struktur, og er meget nemmere at forstå.
Avatar billede lesp Nybegynder
04. januar 2007 - 19:41 #23
Godt nok guys. Nu tror jeg at jeg har forstaaet budskabet, men maaske kunne I hjaelpe mig med det jeg har lavet. Hvordan laver jeg en session med ip? Jeg ville gerne proeve at give en adgang til min database, og hvis han/hun ordner det faar han alle mine points her paa eksperten.
Avatar billede lesp Nybegynder
22. juni 2007 - 21:54 #24
Lukker
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

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging