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šší

  1. 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žší 

 

  1. 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))
  2. 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.




ONEbit.cz webhosting