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í.
Od verze PHP 5.4 je již direktiva register_globals zcela odstraněna.
Řešení - 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í.
Dočasné řešení - zapněte register_globals
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.4 nebo novější
Požádejte tech. podporu o změnu PHP na verzi 5.3 a postupujte dle následujícího.
Pro PHP 5.3.x
Vytvořte pomocí FTP soubor s názvem .user.ini
a vložte do něj následující řádek
register_globals = 1
Pokud si s nastavením nevíte rady, neváhejte se obrátit na zákaznickou podporu ONEbit.cz. Rádi Vám pomůžeme.