marekk
8.06.2004, 12:11:11
Witam,
mam gotowy koszyk i wszystko odziała ok. ale jest to standardowy koszyk zamówieniowy (dostepny zreszta w roznych miejscach w sieci) tzn. w klasie koszyk przechowywane są tylko jakby 2 zmienne: id produktu i ilość zamówionego produktu. Ponizej schemat:
[php:1:b5544950b3]<?php
class koszyk
{
var $zawartosc;
function dodaj($element, $ilosc)
{
$this->zawartosc[$element] += $ilosc;
}
function liczba($element, $ilosc)
{
if (0 < $ilosc)
$this->zawartosc[$element] = $ilosc;
else
$this->zawartosc[$element] = 0;
}
function usun($element)
{
$this->zawartosc[$element] = 0;
}
function stan()
{
return $this->zawartosc;
}
}
session_start();
if (!$koszyk)
$koszyk = new koszyk;
if ($dod)
$koszyk->dodaj($dod,1);
if($poz)
while ($a=each($poz))
{
$koszyk->liczba($a[0],$a[1]);
}
session_register("koszyk");
...
?>
i przeliczanie:
<?
...
$stan = $koszyk->stan();
$suma=0;
if ($stan)
while (list($key, $value) = each($stan))
{
echo $key." - ".$value;
}
...
?>[/php:1:b5544950b3]
Mam pytanie - nie znalazłem tego nigdzie na forum (zreszta nie tylko na forum) - jak przerobic ten koszyk i przeliczanie abym mógł pamiętać przy kazdym zamówionym produkcie jeszcze 2 zmienne, np. rozmiar i kolor?? Rozmiar i kolor będa wybierane indywidualnie przy kazdym produkcie z roletki bądz wpisywane w pole tekstowe.
Puciek
8.06.2004, 13:11:33
UŻYWAJ BBCODE !
MaxRipper
10.06.2004, 12:03:24
No wlaśnie jak dodac np. trzecia zmienna oprocz id i ilości. Ja np kombinuje i mi nie wychodzi. Otóz podczas dodawania produktu mam dwa pola hidden - w jednym jest id produktu, a w drugim jego numer katalogowy (może to byc tez kolor, badz rozmiar). Wyglada to mniej wiecej tak:
Formularz dodawania produktu:
[php:1:46f7447a28]<?php
echo "<form name="formnormal" method="post" action="index.php?show=koszyk&menu=dodaj&".SESID."">
<input type="hidden" name="spid" value="".$wiersz['id'].""> // hiden z id produktu
<input type="hidden" name="spoid" value="$odcien_numer[$i]"> // hidden z kolorem
<center><input name="submitkoszyk" type="submit" value="Kup teraz" style="background: $bgcolor1;"></center></form>";
?>[/php:1:46f7447a28]
Po wyslaniu formularza dane powinny byc dodane do koszyka a wiec:
[php:1:46f7447a28]<?php
@session_register("koszyk");
if ($menu != "usun_kosz")
{
$koszyk = $_SESSION["koszyk"];
$id = $_POST["spid"];
$onr = $_POST["spoid"];
if ($_POST["ilosc"] == "")
{
$ilosc = 1;
} else {
$ilosc = $_POST["ilosc"];
}
if ($show == "koszyk")
{
if ($menu == "dodaj")
{
$stara_ilosc = $koszyk[$id];
$koszyk[$id] = $ilosc + $stara_ilosc;
$odcien .= $koszyk[$id]; // Tu coś kombinwalem :/
$odcien .= $onr;
} // itd..
?>[/php:1:46f7447a28]
Po dodaniu powinny byc wyświetlone:
[php:1:46f7447a28]<?php
foreach($koszyk as $id => $ilosc)
{
$count = 0;
$zapytanie = "SELECT nazwa, id, cena, promocja FROM produkty WHERE id='$id' ";
$wykonaj = mysql_query ($zapytanie);
$wiersz = mysql_fetch_array ($wykonaj);
if ($wiersz['promocja'] == NULL) { $fltPrice = "".$wiersz['cena'].""; } else { $fltPrice = "".$wiersz['promocja'].""; }
$arrProducts[$count++]['overall_price'] = $ilosc * $fltPrice;
echo "<a href="index.php?show=produkty&id=$id&".SESID."">".$wiersz['nazwa']."</a><br> x ".$ilosc." szt. (".$arrProducts['0']['overall_price']." PLN)<br>$odcien"; // tu nie wyswietla mi odcieniu
$fltOverall_price += $ilosc * $fltPrice;
}
echo "==============<br>
<div align=right>Suma: $fltOverall_price PLN</div>";
?>[/php:1:46f7447a28]
Pytanie jak zrobić aby dodac jeszce jedną zmiena do sesji koszyka - zmienna $odcien?
MaxRipper
10.06.2004, 17:01:00
Znalazlem źródlo problemu - jednak nadal nie umiem go rozwiazać.
Otoz nadal nie moge umieścić zmiennej z pola formularza hidden (o nazwie - 'spoid') w koszyku. Przypominam że zmienna $spoid zawiera dane odnośnie koloru produktu np. $spoid="czarny";.
W samym koszyku zauwazylem pewną prawidlowość otóż - przy wyświetlaniu produktow dodanych do koszyka uzywam funkcji:
[php:1:b8e784f102] foreach($koszyk as $id => $ilosc) {}[/php:1:b8e784f102]
Prawidlowością ktorą zauwazylem jest to że w tej funkcji moge operowac tylko zmiennymi w nią wpisanymi ($koszyk as $id => $ilosc), problem polega na tym ze nie moge umieścic jeszcze jednej zmiennej ($spoid) - rozwiazaloby to moj problem. Może ktos jednak wie jak to zrobić?
marekk
12.06.2004, 12:54:32
Hehe widzisz mamy dokładnie ten sam problem (tylko na innych przykładach), ja niestety nie wiem nadal jak go rozwiązać, próbowałem pododawać do tych standardowych funkcji koszyka dalsze zmienne np. dodaj($element, $cecha1, $ilosc) itp. i pozniej w koszyku przekliczac wg. 3 wartosci while (list($key, $wart, $value) = each($stan)) ... ale to też jakos nie działa poprawnie.
Wpadłem z kumplem co prawda na pewien inny pomysł aby jako $value czyli liczbe zamowionych pozycji traktowac jakis ciąg kilku zmiennych np. 010305 gdzie ostatnia wartosc po 0 to byłoby to własciwe $value a wczensiejsze np. kolor i rozmiar (ktore chce wlasnie uzyskac). Ale jeszcze tego nie realizowałem bo tak mysle, ze powinno byc jakies prostrze i bardziej naturalne ropzwiązanie.
Czy naprawde nikt nie przerabiał koszyka z kilkoma zmieniającymi sie zmiennymi?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.