![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 4.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Korzystam ze skryptu http://nettuts.com/javascript-ajax/build-a...-shopping-cart/.
Pod adresem http://www.nettuts.com/demos/01_ShoppingCart/index.html jest demo jak ten skrypt działa. Na moim hostingu i na localhost wyskakuje błąd: Warning: Invalid argument supplied for foreach() in line 13 To jest ten kod, miejsce z niedziałającą funkcja jest zakomentowane: CODE <?php include('shopping_cart.class.php'); session_start(); $Cart = new Shopping_Cart('shopping_cart'); if ( !empty($_GET['order_code']) && !empty($_GET['quantity']) ) { $quantity = $Cart->getItemQuantity($_GET['order_code'])+$_GET['quantity']; $Cart->setItemQuantity($_GET['order_code'], $quantity); } //***************************************************************************** //to jest ten foreach poniżej, który nie działa if ( !empty($_GET['quantity']) ) { foreach ( $_GET['quantity'] as $order_code=>$quantity ) { $Cart->setItemQuantity($order_code, $quantity); } } if ( !empty($_GET['remove']) ) { foreach ( $_GET['remove'] as $order_code ) { $Cart->setItemQuantity($order_code, 0); } } $Cart->save(); header('Location: cart.php'); ?> Na prezentowanym wczesniej linku powyżej ten skrypt działa i dobrze się ma. Na dwóch serwerach z których korzystam to nie chce chodzić. Dlaczego? Ten post edytował erix 21.01.2009, 22:00:07
Powód edycji: tagi
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 70 Dołączył: 13.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jak masz taki błąd
Kod [b]Warning[/b]: Invalid argument supplied for foreach() in line 13 to na 99,9% $_GET['quantity']nie jest tablicą. Może wersja PHP się nie zgadza na tych serwerach? z tego co pamiętam, to zmienne superglobalne sąod 4.2 albo 4.4 Ten post edytował EarthCitizen 21.01.2009, 19:19:48 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 4.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Na obu serwerach (tych moich) jest PHP 5. Nie wiem jak z tym nettutsem jest, ale podejrzewam, że też nie mniejsza.
$_GET['quantity'] nie jest faktycznie tablicą (jedna zmienna pobierana z pasku adresu), ale próbowałem obejśc to tak: Kod foreach ( $_GET['quantity'] as $order_code=>$quantity ) { $Cart->setItemQuantity($order_code, $quantity); } zamieniłem na: Kod $quantity=array($_GET['quantity']); $Cart->setItemQuantity($order_code, $quantity); ale wtedy sypie się całość. Ten post edytował homik 21.01.2009, 19:35:48 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 70 Dołączył: 13.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
No ale błąd to błąd...
Sprawdź sobie if(is_array($_GET['quantity'])) dla pewności |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Przyczyna nie leży w konfiguracji serwera, ale w skrypcie - w dobrym tonie jest sprawdzić, czy zmienna jest tablicą lub wymusić taki typ. W Twoim przypadku błąd nie występował dlatego, że pewnie serwer został tak skonfigurowany, aby nie wyświetlał błędów od warningów w dół włącznie.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 4.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc :-) is_array pomogło.
Trochę to trwało, bo w międzyczasie skrypt zaczął wywalać inne błędy, dopóki sie nie domyśliłem, że pasuje wyczyścić w przeglądarce tablicę sesji i ciasteczka :-) |
|
|
![]()
Post
#7
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
$_GET to tablica super globalna, $_GET['klucz'] to jest klucz w którym jest wartość.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 8.07.2025 - 09:40 |