Mam problem z koszykiem do mojej strony. Próbuję zrobić taki koszyk aby po przesłaniu mu linkiem 4 danych dodawał je do koszyka a później je wyświetlał.
Mam taki koszyk który po przesłaniu mu akcji i wartości np. "pid"=6 (product_id) i akcja "do"=Add (dodaj do koszyka), Dodaje określony produkt do koszyka.
Link wygląda tak: .....cart.php?pid=6&do=Add
Ten skrypt działa świetnie i po przekazaniu mu produktu id wyszukuje go w bazie i wyświetla pozostałe inf na temat tego produktu np. cena, nr_katalogowy, opis.
Ponieważ bedę kożystał z bazy danych oraz z plików tekstowych z cennikami próbowałem zrobić coś takiego :
W linku przekazywane są dane o id_produktu, nazwie, cenie, nr_katalogowym .....cart.php?pid=6&do=Add&nazwa=akumulator&nr_katalogowy=987654321&cena=98576
ale nie chce mi to działać, coś się dodaje do koszyka ale nie widać cen, nazwy, nr_kat ....
Czy ktoś mógłby rzucić na to okiem i napisać jak to przerobić żeby było dobrze.
Z góry dzięki za jakąkolwie pomoc. Ja spędziłem nad tym już całą niedzielę i nic konkretnego nie jestem w stanie wymyślić.
Oto skrypty które dodają przedmioty do koszyka na podstawie bazy danych
PLIK cart.php
Kod
<?php
require_once ("ShoppingCart.class"); // Dołączenie klasy.
session_start(); // Rozpoczęcie sesji.
if (isset ($HTTP_SESSION_VARS['cart'])) { // Jeżeli już rozpoczęto sesję(obiekt istnieje)...
$cart = $HTTP_SESSION_VARS['cart'];
} else {
$cart = new ShoppingCart();
}
switch ($HTTP_GET_VARS['do']) {
case "Add":
$cart->AddItem ($HTTP_GET_VARS[pid]);
$cart->DisplayCart();
break;
case "Drop":
$cart->DropItem ($HTTP_GET_VARS[pid]);
$cart->DisplayCart();
break;
case "Change":
foreach ($HTTP_POST_VARS[pid] as $key => $value) {
$cart->ChangeQuantity ($key, $value);
}
$cart->DisplayCart();
break;
case "Display":
$cart->DisplayCart();
break;
default:
$cart->DisplayCart();
break; // To samo co display.
}
session_register ('cart');
?>
require_once ("ShoppingCart.class"); // Dołączenie klasy.
session_start(); // Rozpoczęcie sesji.
if (isset ($HTTP_SESSION_VARS['cart'])) { // Jeżeli już rozpoczęto sesję(obiekt istnieje)...
$cart = $HTTP_SESSION_VARS['cart'];
} else {
$cart = new ShoppingCart();
}
switch ($HTTP_GET_VARS['do']) {
case "Add":
$cart->AddItem ($HTTP_GET_VARS[pid]);
$cart->DisplayCart();
break;
case "Drop":
$cart->DropItem ($HTTP_GET_VARS[pid]);
$cart->DisplayCart();
break;
case "Change":
foreach ($HTTP_POST_VARS[pid] as $key => $value) {
$cart->ChangeQuantity ($key, $value);
}
$cart->DisplayCart();
break;
case "Display":
$cart->DisplayCart();
break;
default:
$cart->DisplayCart();
break; // To samo co display.
}
session_register ('cart');
?>
PLIK ShoppingCart.class
Kod
<?php
class ShoppingCart {
var $items = array(); // jedyne pole (zmienna) wymagana przez ta klase jest tablica items
// Funkcja służąca do dodawania towaru do koszyka. Jezeli taki towar juz sie znajduje w koszyku to zwiekszamy o 1
function AddItem ($item) {
if ($this->items[$item]) {
$this->items[$item] = $this->items[$item] + 1;
} else {
$this->items[$item] = 1;
}
}
// Funkcja służąca do usuwania towaru z koszyka. Ustawiamy ilosc wybranej pozycji na 0
function DropItem ($item) {
$this->items[$item] = 0;
}
// Funkcja służąca do modyfikacji ilości. 2 argumenty jak 0 to usuwa produkt a jak liczba to podmienia wartosc
function ChangeQuantity ($item, $quantity) {
if ($quantity == 0) {
$this->DropItem($item);
} else {
$this->items[$item] = $quantity;
}
}
// Function wyświetlająca zawartość koszyka.
function DisplayCart () {
global $db_connection;
// Wyświetlenie tabeli i początek formularza.
echo '<form action="cart.php?do=Change" method="post">
<table>
<tr>
<td align="center"><b>Nazwa towaru</b></td>
<td align="center"><b>Rozmiar towaru</b></td>
<td align="center"><b>Odmiana towaru</b></td>
<td align="center"><b>Cena jednostkowa</b></td>
<td align="center"><b>Ilość</b></td>
<td align="center"><b>Kwota razem</b></td>
<td align="center"><b>Usuń</b></td>
</tr>
';
// Pętla dla wszystkich pozycji koszyka.
foreach ($this->items as $key => $value) {
$was_one = FALSE; // sztuczna zmienna
if ($value != 0) {
$was_one = TRUE;
$query = "select towary.towar_id, towary_nazwa.nazwa_towaru AS NAZWA, towary_rozmiar.rozmiar_towaru AS ROZMIAR, towary_odmiana.odmiana_towaru AS ODMIANA, towary.cena, towary.dostepny from towary, towary_nazwa, towary_rozmiar, towary_odmiana where towary.nazwa_id = towary_nazwa.towary_nazwa_id and towary.rozmiar_id = towary_rozmiar.towary_rozmiar_id and towary.odmiana_id = towary_odmiana.towary_odmiana_id and towary.towar_id = '$key'";
$db_query = mysql_query ($query, $db_connection) or die (mysql_error());
$row = mysql_fetch_array ($db_query);
$sub_total = sprintf ("%01.2f", ($value * $row[cena]));
$total += $sub_total;
echo " <tr>
<td align="center">$row[NAZWA]</td>
<td align="center">$row[ROZMIAR]</td>
<td align="center">$row[ODMIANA]</td>
<td align="center">$row[cena] PLN</td>
<td align="center"><input type="text" name="pid[$key]" size="2" maxsize="3" value="$value"></td>
<td align="center">$sub_total PLN</td>
<td align="center"><a href="cart.php?pid=$key&do=Drop">Usuń</a></td>
</tr>n";
}
}
// Uzupełnienie tabeli i formularza.
echo '<tr>
<td align="right" colspan="5">Razem</td>
<td align="center">';
printf ("%01.2f", $total);
echo ' PLN </td>
<td align="center"> </td>
</tr>
<input type="hidden" name="do" value="Change">
</table>
Aby uaktualnić ilości, należy zmienić wartości powyżej i kliknąć w tym miejscu <input type="submit" name="submit" value="Zmień ilości">
<input type="hidden" name="do" value="Change">
</form>';
if (!$was_one) {
echo '<br /><font color="#CC0000"><big>Twój koszyk jest pusty.</big></font>';
}
} // Koniec funkcji DisplayCart().
} // Koniec klasy.
?>
class ShoppingCart {
var $items = array(); // jedyne pole (zmienna) wymagana przez ta klase jest tablica items
// Funkcja służąca do dodawania towaru do koszyka. Jezeli taki towar juz sie znajduje w koszyku to zwiekszamy o 1
function AddItem ($item) {
if ($this->items[$item]) {
$this->items[$item] = $this->items[$item] + 1;
} else {
$this->items[$item] = 1;
}
}
// Funkcja służąca do usuwania towaru z koszyka. Ustawiamy ilosc wybranej pozycji na 0
function DropItem ($item) {
$this->items[$item] = 0;
}
// Funkcja służąca do modyfikacji ilości. 2 argumenty jak 0 to usuwa produkt a jak liczba to podmienia wartosc
function ChangeQuantity ($item, $quantity) {
if ($quantity == 0) {
$this->DropItem($item);
} else {
$this->items[$item] = $quantity;
}
}
// Function wyświetlająca zawartość koszyka.
function DisplayCart () {
global $db_connection;
// Wyświetlenie tabeli i początek formularza.
echo '<form action="cart.php?do=Change" method="post">
<table>
<tr>
<td align="center"><b>Nazwa towaru</b></td>
<td align="center"><b>Rozmiar towaru</b></td>
<td align="center"><b>Odmiana towaru</b></td>
<td align="center"><b>Cena jednostkowa</b></td>
<td align="center"><b>Ilość</b></td>
<td align="center"><b>Kwota razem</b></td>
<td align="center"><b>Usuń</b></td>
</tr>
';
// Pętla dla wszystkich pozycji koszyka.
foreach ($this->items as $key => $value) {
$was_one = FALSE; // sztuczna zmienna
if ($value != 0) {
$was_one = TRUE;
$query = "select towary.towar_id, towary_nazwa.nazwa_towaru AS NAZWA, towary_rozmiar.rozmiar_towaru AS ROZMIAR, towary_odmiana.odmiana_towaru AS ODMIANA, towary.cena, towary.dostepny from towary, towary_nazwa, towary_rozmiar, towary_odmiana where towary.nazwa_id = towary_nazwa.towary_nazwa_id and towary.rozmiar_id = towary_rozmiar.towary_rozmiar_id and towary.odmiana_id = towary_odmiana.towary_odmiana_id and towary.towar_id = '$key'";
$db_query = mysql_query ($query, $db_connection) or die (mysql_error());
$row = mysql_fetch_array ($db_query);
$sub_total = sprintf ("%01.2f", ($value * $row[cena]));
$total += $sub_total;
echo " <tr>
<td align="center">$row[NAZWA]</td>
<td align="center">$row[ROZMIAR]</td>
<td align="center">$row[ODMIANA]</td>
<td align="center">$row[cena] PLN</td>
<td align="center"><input type="text" name="pid[$key]" size="2" maxsize="3" value="$value"></td>
<td align="center">$sub_total PLN</td>
<td align="center"><a href="cart.php?pid=$key&do=Drop">Usuń</a></td>
</tr>n";
}
}
// Uzupełnienie tabeli i formularza.
echo '<tr>
<td align="right" colspan="5">Razem</td>
<td align="center">';
printf ("%01.2f", $total);
echo ' PLN </td>
<td align="center"> </td>
</tr>
<input type="hidden" name="do" value="Change">
</table>
Aby uaktualnić ilości, należy zmienić wartości powyżej i kliknąć w tym miejscu <input type="submit" name="submit" value="Zmień ilości">
<input type="hidden" name="do" value="Change">
</form>';
if (!$was_one) {
echo '<br /><font color="#CC0000"><big>Twój koszyk jest pusty.</big></font>';
}
} // Koniec funkcji DisplayCart().
} // Koniec klasy.
?>