Autor Zpráva
jok1955
Profil
Zdravím všechny. Mám skript napsaný kdysi pro php 5 a teď tu zápasím s převodem na php 7.0

Warning: Invalid argument supplied for foreach() in

je k tomuto kodu
    foreach($_SESSION["post"] as $key => $val) {

    if(isset($FormFilterArray[$key]["alias"])):
      $keyalias = $FormFilterArray[$key]["alias"];   
    endif;
a tak dále... poradí někdo pls?
Keeehi
Profil
jok1955:
To nesouvisí s PHP 5 nebo 7. Kód je správně v obou verzích. Problém prostě je, že v proměnné $_SESSION["post"] nemáš uložené pole. Máš tedy něco špatně v logice aplikace, tento kód je ale správně.
jok1955
Profil
To mě také napadlo, ale ten kód na druhém počítači, kde mám php 5.6. normálně funguje !? Já jsem samouk a tak některé postupy neznám a jsem rád když to funguje...není chyba v nastavení té SESSION? POST je přece pole ... takže bych měl SESSION nejprve nějak deklarovat?
pcmanik
Profil
jok1955:
Keď si dáš var_dump($_SESSION["post"]); čo ti to ukáže?
jok1955
Profil
Je to NULL. Takže prázdné!? Jdu hledat ... psal jsem to totiž asi před 4 lety a od té doby se moje zájmy obrátily jinam...díky za pomoc a navedení...
Keeehi
Profil
jok1955:
není chyba v nastavení té SESSION? POST je přece pole
Ano, $_POST je pole. V $_SESSION["post"] může být teoreticky cokoli. Pokud tam chceš mít data z $_POST, musíš si je tam někdy uložit. $_SESSION["post"] = $_POST Což někde v kódu mít budeš, když ti to jinde funguje. Ale bude to v nějaké části, kterou kód na tvém počítači ještě neprošel. Až se tam jednou dostane, začne ti fungovat i tato část.

Jelikož, jak je vidět, se ale ve tvém návrhu může vyskytnout případ, že v $_SESSION["post"] není pole, je správné to v kódu kontrolovat.
if(is_array($_SESSION["post"])) {
    foreach($_SESSION["post"] as $key => $val) {
        if(isset($FormFilterArray[$key]["alias"])) {
            $keyalias = $FormFilterArray[$key]["alias"];   
        }
    }
}
jok1955
Profil
Vzhledem k tomu, že script je jen k vygenerování html kodu na lokale, přešel jsem na php 5.6 a funguje to. Nevím a nebudu se tím zabývat. Díky za rady. JoK

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: