I am desiging a new website for my company and I am trying to implement switch navigation which is what I have used on all my sites in the past.
<?php
switch($x) {
default:
include("inc/main.php");
break;
case "products":
include("inc/products.php");
break;
}
?>
For some reason when I go to index.php?x=products nothing happens, it still displays inc/main.php, in other words it hasn't detected the X variable from the URL. Is this something to do with global variables?
You can use http://php.net/manual/es/function.extract.php to extract the variables if you want to do it, but keep in mind this lets any user set variables with the content they want in your script, which makes it as insecure as using register_globals
You should use $_GET to read out these variables. There is a deprecated function called register_globals, but I would definately not advise to use this, as it is a potential security risk.
Yes, your PHP configuration has correctly got
register_globals
turned off, because that's incredibly insecure.Just put:
at the top of your script.
You can also use
$_GET
if you specifically only want this to work for theGET
HTTP method. I've seen some people claim that$_REQUEST
is somehow insecure, but no evidence to back that up.It seems like your previous webhosts all used register_globals and your code relies on that. This is a dangerous setting and was rightfully removed in PHP 6.0! Use
switch($_GET['x']) {
instead.