Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak przerobić koszyk??
Forum PHP.pl > Forum > Gotowe rozwiązania
marekk
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
UŻYWAJ BBCODE !
MaxRipper
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
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
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.
Invision Power Board © 2001-2024 Invision Power Services, Inc.