GET Validator

Alice

Erfahrenes Mitglied
Hallo. :)

In einem PHP-Skript validiere ich die URL.

PHP:
   $Q_String1 = "do=add&del=link"; 

   if ($_SERVER['QUERY_STRING'] == $Q_String1)
   {
      echo "Alles Super!";
   }
      else
   {
      echo "Nicht ok!";
   }

Mit "festen" GET-Paramter ist das ganze kein Problem. Jedoch ist es manchmal erforderlich eine ID zu übergeben.

PHP:
   $Q_String2 = "do=add&del=link&id=****?"; 

   if ($_SERVER['QUERY_STRING'] == $Q_String2)
   {
      echo "Alles Super!";
   }
      else
   {
      echo "Nicht ok!";
   }

Wie könnte man das Problem lösen, ohne auf die Validierung zu verzichten und ohne den GET-Paramter in $Q_String2 einbauen zu müssen?
 
Ist gefährlich, den String so zu vergleichen. Wenn die Parameter mal in einer anderen Reihenfolge kommen, fällst du damit auf dem Kopf.

Besser über Arrays lösen
PHP:
//Regeln als Array speichern
$validations = array('do1'=> 'add', 'del' => 'link');
//Query-String in einen Array zerlegen
parse_str($_SERVER['QUERY_STRING'], $values);
//ggf die ID entfernen
if(isset($values['id'])) unset($values['id']);
//Die 2 Array vergleichen (Namen und Werte)
//wenn Parameter fehlen
$compare['missing'] = array_diff_assoc($validations, $values);
//Wenn zuviele Parameter übergeben sind
$compare['to_match'] = array_diff_assoc($values, $validations);

//Die Vergleiche auswerten
//Vermisste Parameter
if(count($compare['missing'])>0){
    echo "Folgende Parameter f:\n".print_r($compare['missing'], true);
}
//ungültige Parameter
if(count($compare['to_match'])>0){
    echo "Folgende Parameter sind zu viel:\n".print_r($compare['to_match'], true);
}
//Alles OK
if(count($compare['missing'])+count($compare['to_match'])===0){
    echo "Alles Super!";
}
 
Zurück