V PHP nefungují proměnné předávané z URL nebo formulářů
Příznaky
- parametry v URL se nepředávají do proměnných PHP - např. při zadání URL /soubor.php?menu=1 je v PHP prázdná proměnná $menu
- položky formuláře HTML (input) se nepředávají do proměnných PHP
Příčiny
- nastavení register_globals je vypnuto
Způsob předávání položek URL nebo formulářů pomocí lokálních proměnných pochází z PHP verze 4 a starší. Považuje se za zastaralý a již od vzniku PHP5 se obecně doporučuje používání výhradně tzv. superglobálních proměnných. Důvody jsou zejména bezpečnostní.
Ve verzi PHP6 již bude možnost zapnout register_globals zcela odstraněna, proto vývojáři PHP po celou dobu existence PHP5 programátory nabádají, aby již v kódu využívali výhradně superglobální proměnné.
Řešení 1 - používejte superglobální proměnné
Nejpoužívanějšími superglobálními proměnnými jsou:
- $_GET - obsahuje položky zaslané metodou GET (např. parametry v URL)
- $_POST - obsahuje položky zaslané metodou POST (např. parametry HTML formuláře s method="post")
- $_REQUEST - obsahuje položky obou proměnných $_GET i $_POST
Příklad použití:
<?php
#po zadani http://example.com/test.php?menu=3
#vypnute register_globals
echo $menu; //nevypise nic (promenna $menu neexistuje)
echo $_GET["menu"]; //vypise 3
#zapnute register_globals
echo $menu; //vypise 3
echo $_GET["menu"]; //vypise 3
?>
Superglobální proměnné jsou dostupné také uvnitř funkcí, aniž by bylo nutné v každé funkci volat např. global $menu;
Dokumentace
Seznam všech superglobálních proměnných naleznete v manuálových stránkách PHP, včetně praktických ukázek použití.
Řešení 2 - zapněte register_globals
Vzhledem k zastaralosti této funkce doporučujeme spíše 1. řešení. Pokud však vzhledem k okolnostem nastavení přece jen potřebujete, postupujte následovně.
Zjistěte nejprve v administraci, jakou verzi PHP používáte a pokračujte jednou z následujících možností:
Pro PHP 5.3.0 nebo vyšší
- Vytvořte pomocí FTP soubor s názvem .user.ini a vložte do něj následující řádek
register_globals = on
Pro PHP 5.2.x nebo nižší
- přihlaste se do administrace a přesvědčte se, že máte aktivovány soubory .htaccess (Služby → PHP → Aktivace .htaccess (mod_rewrite))
- prostřednictvím FTP vložte do souboru .htaccess následující
<IfModule mod_php5.c>
php_flag register_globals on
</IfModule>
Pokud si s nastavením nevíte rady, neváhejte se obrátit na technickou podporu ONEbit.cz. Rádi Vám pomůžeme.
Jakékoliv kopírování, publikování nebo šíření obsahu je výslovně zakázáno bez předchozího písemného souhlasu společnosti ONEsolution s.r.o.