I’m new to php and need some help with “GET” variables.
Here an extraction of my Code for index.php:
$array = array("section","view","sub","cat","point");
$i = 0;
$check = true;
foreach ($_GET as $position => $wert) {
if ($position != $array[$i]) {
//if GET doesnt exist in the array set check to false
$check = false;
break;
}
$i++;
}
//if GET variables exists
if ($check == true) {
if (isset($_GET['section'], $_GET['view'], $_GET['sub'], $_GET['cat'], $_GET['point'], $point[$_GET['point']])) {
$path = $path_dynamic.$_GET['section']."/".$_GET['view']."/".$_GET['sub']."/".$_GET['cat']."/".$point[$_GET['point']];
check($path);
} else if (isset($_GET['section'], $_GET['view'], $_GET['sub'], $_GET['cat'], $cat[$_GET['cat']])) {
$path = $path_dynamic.$_GET['section']."/".$_GET['view']."/".$_GET['sub']."/".$cat[$_GET['cat']];
check($path);
} else if (isset($_GET['section'], $_GET['view'], $_GET['sub'], $sub[$_GET['sub']])) {
$path = $path_dynamic.$_GET['section']."/".$_GET['view']."/".$sub[$_GET['sub']];
check($path);
} else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {
$path = $path_dynamic.$_GET['section']."/".$view[$_GET['view']];
check($path);
} else if (isset($_GET['section'], $section[$_GET['section']])) {
$path = $path_dynamic.$section[$_GET['section']];
check($path);
//if section isn't set
} else if (!isset($_GET['section'])) {
include ($path_dynamic.$section['news']);
}
} else {
echo "GET doesn't exist";
include ($path_static.$section['error']);
}
//check if GET exists
function check($path) {
if (file_exists($path)) {
echo "File imported<br />";
include ($path);
} else {
echo "GET set correct but file doens't exist";
include ('include/static/fehler.html');
}
}
Example of section.php (view, sub, cat and point is the same):
$section = array();
$section['error'] = 'fehler.html';
My problem is that if i set this link:
index.php?section=verein&view=vorstande
“vorstande” doesn’t exist in my view array. So the code checks for the section “verein” and include “verein”. But it should give an error.
So it seems that this code
} else if (isset($_GET['section'], $_GET['view'], $view[$_GET['view']])) {
is ignored and it jumps to
} else if (isset($_GET['section'], $section[$_GET['section']])) {
Also if I change my url to this:
index.php?section=vereine&view=vorstande
nothing happens. I even don’t know where the code is right now.
But if I change the url to this:
index.php?section=vereine&view=vorstand
everything works fine.
So “verein” and “vorstand” is defined by me. “vereine” and “vorstande” doens’t exist.
Any suggestions? Sry for comments in german. The echo only gives me a hint where the code is right now!
Link to my HP:
Edit:
– translated comments for better conversation
– deleted all “$…[$_GET[‘…’]]” structures to show the error I will get instead.
By “give an error” you mean
$check = false;?If in your $view the key
vorstandedoes not exist, this the whole condition will evaluate tofalseand next condition will be checked:Edit:
Your code:
Your requirement:
What actually happens:
If the
$_GET['view']does not exist in$view, the block which would callcheckis not executed. If you want it to be executed regardless, simply remove the conditionisset($view[$_GET['view']]):If you don’t like this approach, work on your cases. You have one case for
section isset AND view isset AND view is valid. The next case ignores theviewparameter. So if yourviewparameter is not valid, your code handles it like it was not set. The requirement though is to have a case forsection isset AND view isset AND view is invalid:This is of course pretty much redundant checking so just nest it to something like:
Alternate Example
If I understand you correctly, you have the following requirement: If the user passes a parameter
section,view,sub,catorpoint, you want that this value is also in your list of valid values. If it isn’t, you want to displayfehler.html.We now first ensure that if the parameter is set, it is also valid:
We then check all your combinations of parameters and build a
$pathIf now the initial
$checkfailed or we built an invalid$path, displayfehler.html