Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Koszyk :|
noose
post 27.02.2004, 08:35:24
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 30.07.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Witam
Mam sobie napisany koszyk.
Niestety nie wyswietla on nic :? nie wiem czemu :? (bledow tez nie wywala :?)
[php:1:2bb8c0d822]<?php
session_start();
ini_set('display_errors','1');

class Koszyk
{
var $artykuly;

function dodaj($numer, $ilosc){

$this->artykuly["$numer"] += $ilosc;

}

function usun($numer, $ilosc){

if($this->artykuly["$numer"]>$ilosc)

$this->artykuly["$numer"]-=$ilosc;

else

$this->artykuly["$numer"]=0;

}

function wyswietl(){

while(list($k, $v) = each($this->artykuly))
if($v>0)
echo "Artykul nr $k - $v sztuk<br>";

}

}
if (!isset($_SESSION['koszyk']))
{
$koszyk = new Koszyk;
}
else
{
$koszyk = new Koszyk;
$koszyk1 = $_SESSION['koszyk'];
while (list($art, $ilosc) = each ($koszyk1))
{
while(list($a,$i) = each ($ilosc))
{
if ($a != null)
{
$koszyk->dodaj($a,$i);
echo("Artykul: $a został dodany<br>");
}
}
}
}
$akcja = $_GET["akcja"];
$co = $_GET["co"];
$ilosc = $_GET["ile"];
if ($akcja = "dodaj")
{
$koszyk->dodaj($co,$ilosc);
}

$_SESSION['koszyk'] = $koszyk;
while (list($art, $ilosc) = each ($koszyk1))
{
while(list($a,$i) = each ($ilosc))
{
$sql = "SELECT * FROM artykuly where id = '$a'";
$rez = mysql_query($sql);
include_once("../db.php");
while($w = mysql_fetch_array($rez))
{
$nazwa = $w["nazwa"];
echo("<a href = "?strona=koszyk&akcja=usun&co=$id&ile=1">Usuń z koszyka $nazwa</a><br>Masz $i sztuk $nazwa<br>");
}
}
}
$koszyk->wyswietl();
?>[/php:1:2bb8c0d822]
jakies sugestie :?:

edit:
wrzucilem na inny serwer i wyskakuje mi
Cytat
Warning: Variable passed to each() is not an array or object in /home/www/data/jaw.pl/www.hh.jaw.pl/public_html/praca/poprawka/koszyk/index.php on line 46
:?
Go to the top of the page
+Quote Post
zombie
post 27.02.2004, 09:44:47
Post #2





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dostałeś komunikat, że koszyk jest pusty. Funkcja each próbuje zostać wykonana na pustej tablicy. Zabezpiecz się jakimś if'em lub @each.


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
noose
post 27.02.2004, 12:02:00
Post #3





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 30.07.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


dodalem artykul do koszyka i wywalilo:
Cytat
Warning: Variable passed to each() is not an array or object in /home/www/data/jaw.pl/www.hh.jaw.pl/public_html/praca/poprawka/koszyk/index.php on line 46
Artykul: 9 został dodany
Artykul nr 9 - 1 sztuk


zreszta... projekt macie tutaj : http://www.hh.jaw.pl/praca/poprawka/?strona=koszyk aby cos dodac, trzeba wejsc do "oferta" i tam sobie cos wybrac....
Go to the top of the page
+Quote Post
noose
post 1.03.2004, 06:12:29
Post #4





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 30.07.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Nikt nie wie :?: sad.gif
Go to the top of the page
+Quote Post
splatch
post 1.03.2004, 13:08:31
Post #5





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wiesz też miałem coś takiego, ale postanowiłem to rozwiązać w inny sposób (wiem że to nie na temat). Gdy chcesz dodać cośdo kosza to sprawdzam czy produkt o podanym id istnieje, jesli tak to dodaję. Następnie przy wyświetlaniu pobieram ceny itp. produktu. Dodatkowo tabela użytkownika ma pole, w którym sumuję wartość produktów. Jeśli użytkownik jest zalogowany to używam jego id, a jeśli jest to gość do używam ip bez kropek. Myślę, że taka opcja jest w miarę. Ja zrezygnowałem z klasy, bo ciężko mi było dostosować ją do szablonów. Oczywiście teraz już by mi się udało smile.gif.
Go to the top of the page
+Quote Post
scanner
post 1.03.2004, 14:13:40
Post #6





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Cytat
[php:1:a9b4578c9d]<?php
// ...
while (list($art, $ilosc) = each ($koszyk1))
{
while(list($a,$i) = each ($ilosc))
{
// ...
?>[/php:1:a9b4578c9d]
Dwie pętle? Czy to aby nie za dużo?questionmark.gif Co masz w zmiennej $ilosc ? Jeśli ilość sztuk danego towaru, to druga petla p[asuje tutaj jak swini siodło...
Zresztą wystarczy przeczytać komunikat błędu... Przeczytać i zrozumieć...

Dodatkowo:[php:1:a9b4578c9d]<?php
foreach($koszyk1 as $art => $ilosc)
{
?>[/php:1:a9b4578c9d]jest konstrukcją czytelniejszą i chyba nieco szybszą...


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
noose
post 1.03.2004, 21:58:17
Post #7





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 30.07.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


dwie petle sa po to, ze
print_r($koszyk);
Cytat
koszyk Object ( [artykuly] => Array ( [15] => 1 ) )

a teraz to w ogole nawet do sesji nie zapisuje :?
Go to the top of the page
+Quote Post
Masterkiller
post 2.03.2004, 09:09:08
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.02.2004

Ostrzeżenie: (0%)
-----


Witam,
miałem podobny problem. Rozwiązanie jest banalne biggrin.gif Nie można do sesji pakować obiektów i dlatego koszyk nawet po dodaniu jest pusty. Aby to obejść należy koszyk przed wsadzeniem do sesji serializować a wyciągając go z sesji deserializujemy. Lece teraz do szkoły, jak wróce to podrzuce kawałek kody.

Narka
Go to the top of the page
+Quote Post
Masterkiller
post 2.03.2004, 22:20:07
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.02.2004

Ostrzeżenie: (0%)
-----


a na początku skryptu umieszczamy:
Kod
if(isset($_SESSION['koszyk']))

     $koszyk=unserialize($_SESSION['koszyk']);

else

     $koszyk=new Koszyk(); //lub coś innego


a na końcu skryptu umieszczamy taki kawałek kodu:
Kod
$_SESSION['koszyk'] = serialize($koszyk);


Zmiana sesji na końcu skryptu nie jest najlepszym pomysłem więc trzeba jeszcze na początku skryptu włączyć buforowanie (ob_start()), a po poleceniu serializującym opróżniamy i zamykamy bufor.

Greetings biggrin.gif
Go to the top of the page
+Quote Post
noose
post 5.03.2004, 07:41:42
Post #10





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 30.07.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


nic mi nie wychodzilo wiec napisalem od nowa smile.gif wpadlem na pomysl jak to zrobic bez zadnych klas i tak dalej tongue.gif
[php:1:0ad50036e5]<?
session_start();
session_name("Koszyk");
$akcja = $_GET["akcja"];
if ($akcja != "usun_kosz")
{
$koszyk = $_SESSION["koszyk"];
$id = $_GET["id"];
$ilosc = $_GET["ilosc"];
if ($akcja == "dodaj")
{
$stara_ilosc = $koszyk[$id];
$koszyk[$id] = $ilosc + $stara_ilosc;
}
elseif ($akcja == "usun")
{
$stara_ilosc = $koszyk[$id];
if ($stara_ilosc - $ilosc <= 0)
{
$koszyk[$id] = null;
} else {
$koszyk[$id] = $stara_ilosc - $ilosc;
}
}
else
{
if ($koszyk != null)
{
foreach($koszyk as $id => $ilosc)
{
echo "Artykuł: ".$id." sztuk ".$ilosc." <br>";
}
}
else
{
echo "Koszyk pusty!";
}
}
$_SESSION["koszyk"] = $koszyk;
echo "<br> <a href = "?akcja=usun_kosz">Usun koszyk</a>";
}
else
{ session_destroy();
echo "Usuniety!";
}
?>[/php:1:0ad50036e5]
mam nadzieje, ze komus sie przyda smile.gif
Go to the top of the page
+Quote Post
MaxRipper
post 2.05.2004, 20:21:14
Post #11





Grupa: Zarejestrowani
Postów: 35
Pomógł: 2
Dołączył: 19.08.2003
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Ok panowie skrypt koszyka jest bardzo fajny ale... jak zwykle mam problem smile.gif. Otóż teraz chce zrobic podliczanie wartości wszystkich towarow (cena pobrana bedzie z bazy danych). Zupelnie nie wiem jak sie do tego zabrac do tej pory moj koszyk wyglada tak:

[php:1:9bfc220158]
<?php
session_register("koszyk"); // rejestrujemy sesje
$akcja = $_POST["akcja"];
if ($show != "usun_kosz")
{
$koszyk = $_SESSION["koszyk"];
$id = $_POST["spid"];
if ($_POST["ilosc"] == "")
{
$ilosc = 1;
} else {
$ilosc = $_POST["ilosc"];
}

if ($show == "koszyk")
{
$stara_ilosc = $koszyk[$id];
$koszyk[$id] = $ilosc + $stara_ilosc;
}
elseif ($akcja == "usun")
{
$stara_ilosc = $koszyk[$id];
if ($stara_ilosc - $ilosc <= 0)
{
$koszyk[$id] = null;
} else {
$koszyk[$id] = $stara_ilosc - $ilosc;
}
}
else
{
if ($koszyk != null)
{
foreach($koszyk as $id => $ilosc) ## wyświetlamy nazwy produktow z bazy oraz ich ilość ##
{
$zapytanie = "SELECT nazwa, id FROM produkty WHERE id='$id' ";
$wykonaj = mysql_query ($zapytanie);
$wiersz = mysql_fetch_array ($wykonaj);
$n=1;
$n++;
$cena['$n'] = 1;
$ilosctowaru['$n'] = $ilosc;
echo "<a href="index.php?show=produkty&id=$id&".SESID."">".$wiersz['nazwa']."</a><br> x ".$ilosc." szt.<br>";
}
echo "==============<br>
Suma: ";
## no i tu zonk - nie wiem jak zliczyc sume wszystkich produktow uwzgledniajac ilośc zamowionych sztuk czyli cos takiego jak cena*ilosc gdziecena jest pobierana z bazy :/ ##
for ($i=1; $i<=$n ; $i++) // tu coś kombinowalem ale nici :/
{
$dupa = "".$ilosctowaru['$n']."";
}

}
else
{
echo "Koszyk pusty!";
}
}
$_SESSION["koszyk"] = $koszyk;
echo "<br> <a href = "?show=usun_kosz">Usun koszyk</a>";
}
else
{ session_unregister("koszyk");
echo "Usuniety!";
}
?>[/php:1:9bfc220158]

Z gory dziekuję smile.gif
Go to the top of the page
+Quote Post
LeWaR
post 4.05.2004, 20:42:30
Post #12





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 22.04.2002
Skąd: Szubin

Ostrzeżenie: (0%)
-----


Może przedstawie swoją wersję koszyka:
[php:1:fc865bb9a1]<?php
class koszyk
{
/* tablica asocjacyjna zawierajaca stan koszyka */
/* klucz, to wartosc id produktu, wartosc to ilosc elementow */
var $zawartosc;
function dodaj($element, $ilosc)
{
$this->zawartosc[$element] += $ilosc;
}
function zmien($element, $ilosc)
{
if ($ilosc=="0")
{
unset($this->zawartosc[$element]);
}
else
{
$this->zawartosc[$element] = $ilosc;
}
}
function usun($element, $ilosc)
{
/*
if ($this->zawartosc[$element] > $ilosc)
$this->zawartosc[$element] -= $ilosc;
else
*/ unset($this->zawartosc[$element]);
}
function kasuj()
{
unset($this->zawartosc);
}
function stan()
{
return $this->zawartosc;
}
}

?>[/php:1:fc865bb9a1]

Obsługa:

[php:1:fc865bb9a1]<?php
if ($stan)
{ reset($stan);
$razem=0;
while (list($key, $value) = each($stan))
{
/* tu mamy do obróbki dane o towarze i ilości
}
}

?>[/php:1:fc865bb9a1]

A teraz moje:
[php:1:fc865bb9a1]<?php

# generowanie id zamówienia
if (!$id_kosz)
{
include('serial.php');
$id_kosz=$id_zamka;
session_register('id_kosz');
}

/* obsługa koszyka */
# jeśli nie ma koszyka, to utwórz..
if ($log_ok!="ok")
{
if (!$koszyk)
$koszyk = new koszyk;
#dodawanie do koszyka
if ($dodaj)
{
if (is_array($dodaj))
{
while (list($key, $value) = each($dodaj))
{
$koszyk->dodaj($key, $value);
}
}
else
{
$koszyk->dodaj($dodaj, 1); # zamiast 1 bylo $$dodaj
}
}
# zmiana ilości danego towaru
if ($zmien)
$koszyk->zmien($zmien, $$zmien);

# usuwanie z koszyka
if ($usun)
$koszyk->usun($usun, $$usun);
# kasowanie całego koszyka
if ($action == "kas_kosz")
{
$koszyk->kasuj();
}

# uporządkowanie stanu rzeczy
session_register("koszyk");
$stan = $koszyk->stan();
}


?>[/php:1:fc865bb9a1]

Myśle, że sie komuś przyda. Troche dużo, ale przeglądając kod ktoś sie nauczy biggrin.gif
Go to the top of the page
+Quote Post
noose
post 4.05.2004, 21:34:08
Post #13





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 30.07.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


[php:1:c9b9014fbf]<?php
$n=1;
$n++;
$cena['$n'] = 1;
$ilosctowaru['$n'] = $ilosc;
$suma = ($cena*$ilosc) + $suma; ### tutaj jest poprawka :]
echo "<a
href="index.php?show=produkty&id=$id&".SESID."">".$wiersz['nazwa']."</a><br> x
".$ilosc." szt.<br>";
}
echo "==============<br>
Suma: ". $suma." zł"; ### TUTAJ DRUGA
## no i tu zonk - nie wiem jak zliczyc sume wszystkich produktow uwzgledniajac ilośc
zamowionych sztuk czyli cos takiego jak cena*ilosc gdziecena jest pobierana z bazy
:/ ##?> [/php:1:c9b9014fbf]
moze w ten sposob :?: tongue.gif (tam gdzie jest ###)
Go to the top of the page
+Quote Post
MaxRipper
post 5.05.2004, 07:09:47
Post #14





Grupa: Zarejestrowani
Postów: 35
Pomógł: 2
Dołączył: 19.08.2003
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Dziekuję za zainteresowanie smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 04:00