Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Invalid argument supplied for foreach()
Forum PHP.pl > Forum > Przedszkole
homik
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?
EarthCitizen
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
homik
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ść.
EarthCitizen
No ale błąd to błąd...

Sprawdź sobie if(is_array($_GET['quantity'])) dla pewności
Pilsener
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.
homik
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 :-)
piotrooo89
$_GET to tablica super globalna, $_GET['klucz'] to jest klucz w którym jest wartość.
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-2025 Invision Power Services, Inc.