![]() |
![]() ![]() |
![]() |
![]()
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 :?
|
|
|
![]()
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!
|
|
|
![]()
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.... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 30.07.2003 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Nikt nie wie :?:
![]() |
|
|
![]()
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
![]() |
|
|
![]()
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
Dwie pętle? Czy to aby nie za dużo?// ... while (list($art, $ilosc) = each ($koszyk1)) { while(list($a,$i) = each ($ilosc)) { // ... ?>[/php:1:a9b4578c9d] ![]() 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ą... -------------------- |
|
|
![]()
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 :? |
|
|
![]()
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 ![]() Narka |
|
|
![]()
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 ![]() |
|
|
![]()
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
![]() ![]() [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 ![]() |
|
|
![]()
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
![]() [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ę ![]() |
|
|
![]()
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 ![]() |
|
|
![]()
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 :?: ![]() |
|
|
![]()
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
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 04:00 |