dedlfix: Neues Problem nach aufdröseln

Beitrag lesen

Tach!

$Hauptmenue = 0;

if (isset ($_GET['Hauptmenue']) && preg_match ("/^d{1,2}$/", $_GET['Hauptmenue']))
{
    $Hauptmenue = $_GET['Hauptmenue'];
}


> Hier könnte man dann noch die Inkonsistenz des Datentyps beseitigen, denn entweder steht in `$Hauptmenue`{:.language-php} eine Zahl (0) oder eine Zeichenkette mit dem Wert von `$_GET['Hauptmenue']`{:.language-php}  
  
Macht ja nichts, das ist PHP, da muss der Typ nicht unbedingt stimmen. Die Zahl wird sicher über einen Link oder ein Formular ins $\_GET gelangen, was heißt, dass sie als String irgendwo im HTML- oder Javascript-Code stehen muss. Eine Umwandlung nach Integer bringt an dieser Stelle keinen Vorteil.  
  

> Also falls der Wert von $Hauptmenue immer eine Zahl sein soll:  
>    ` $Hauptmenue = intval($_GET['Hauptmenue']);`{:.language-php}  
> Hiermit fängt man auch gleich invalide Werte ab (z.B. wenn jemand Dinge wie  
> .../Index.php?Hauptmenue=Hallo  
> übergibt),  
  
Kann ja nicht, weil der RegExp das nicht durchlassen würde.  
  

> denn intval() gibt bei ungültigen Werten 0 zurück, was hier praktischerweise genau der Vorgabe für `$Hauptmenue`{:.language-php} entspricht.  
> Das einzige, was dann noch zu testen wäre, ist der Bereichsgültigkeit der Zahl, denn ich vermute, daß  
> .../Index.php?Hauptmenue=36262822  
> oder  
> .../Index.php?Hauptmenue=-4711  
> tendenziell eher nicht gewünscht sind ;)  
  
Fängt ja auch der Rexexp ab. Aber man kann den alternativ auch weglassen und stattdessen intval() und eine Prüfung auf > 0 und < 100 nehmen.  
  
  
dedlfix.