Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Invalid argument supplied for foreach(), Dlaczego na jednym serwerze działa, a na innym nie?
homik
post 21.01.2009, 18:31:02
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
Go to the top of the page
+Quote Post
EarthCitizen
post 21.01.2009, 19:18:56
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
Go to the top of the page
+Quote Post
homik
post 21.01.2009, 19:32: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
Go to the top of the page
+Quote Post
EarthCitizen
post 21.01.2009, 19:34:24
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
Go to the top of the page
+Quote Post
Pilsener
post 21.01.2009, 21:23:41
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.
Go to the top of the page
+Quote Post
homik
post 21.01.2009, 22:14:57
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 :-)
Go to the top of the page
+Quote Post
piotrooo89
post 21.01.2009, 23:00:20
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ść.


--------------------
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: 8.07.2025 - 09:40