Bei einigen Programmschnippseln ist es notwendig,
das bestimmte Daten im $_Request vorliegen. So zum Beispiel
immer mal wieder eine "page_id" und oder eine "section_id".
Nun kann man ja "einfach" mit
Code:
if (!is_set($_REQUEST['page_id'])) die();
nachsehen ob unser Wert überhaubt da ist, und wenn nicht ...abbrechen.
Aber is_set sagt uns nur, das etwas da ist, nicht was und vor allem nicht
wie.
In diesem kleinen Beispiel eben eine Zahl, kein String, bzw. Zeichenfolge.
Schön wäre es doch eine einfach Möglichkeit zu benutzen "mal gerade eben"
nachzusehen ob alle notwendigen Variablen da sind und auch in der
richtigen Form vorliegen. Die page_id könnte ja auch theoretisch "01" oder
" weiß_ich_als_hacker_nicht" halten. Und wenn wir die Vars zwingen, ala
$page_id = (integer) $_REQUEST['page_id'];
können wir unser blaues Wunder erleben, wenn die Werte mit " ", "0" oder einem einfachen Buchstaben anfangen.
Eine typische Aufgabe für eine Klasse (class), erweiterbar und auch ausserhalb von WB einsetzbar ...
Beispiel:
PHP-Code:
class HTML_validateRequest
{
/**
* Die eigentlichen Daten
*
* Form: assoziatives Array mit den Elementen
* name => type
*
* supported types are:
* 'int' = only numbers/integers whithout leading zero (0)
* 'str' = any string or chars, including numbers/integers
* 'hex' = hexadecimal lower cases
* 'HEX' = hexadecimal upper cases
*
*/
public $values = Array();
/**
* In welchem Modus soll validiert werden.
* Default ist 'strict'. Andere Werte sollen folgen.
*/
public $mod = 'strict';
/**
* Welche Seite soll aufgerufen werden, wenn ein Wert nicht valid ist?
* Default hier ist "login.php" - kann aber auch "index.html" sein, oder ...
*/
public $nextHTML = "login.php";
/**
* Constructor der Klasse
*/
public function __construct ( $aValues = Array() ) {
foreach($aValues as $aKey => $aType) {
$this->values[$aKey] = $aType;
}
}
/**
* Public Function um Wert anzufügen
*/
public function addValue ($aKey, $aType) {
$this->values[$aKey] = $aType;
}
/**
* Validieren aller Daten
*/
public function validate () {
foreach($this->values as $aKey => $aType) {
/**
* Schlüssel nicht im REQUEST vorhanden
*/
if (!isset($_REQUEST[$aKey]) ) {
$this->__jumpAndDie();
} else {
/**
* Schlüssel ist leer
*/
if ($_REQUEST[$aKey] == "") {
$this->__jumpAndDie();
} else {
switch ($aType) {
case 'int':
/**
* Nur Ziffern und Ziffernfolgen - darf nicht mit einer "0" (Null) anfangen
*
*/
if ( false == ereg("^[1-9|-][0-9]*$", $_REQUEST[$aKey]) ) {
$this->__jumpAndDie();
}
break;
case 'str':
if (false == ereg("[:alnum:]", $_REQUEST[$aKey]) ) {
$this->__jumpAndDie();
}
break;
case 'hex':
if ( false == ereg("^[a-f 0-9]*$", $_REQUEST[$aKey]) ) {
$this->__jumpAndDie();
}
break;
case 'HEX':
if ( false == ereg("^[A-F 0-9]*$", $_REQUEST[$aKey]) ) {
$this->__jumpAndDie();
}
break;
}
}
}
}
return true;
}
private function __jumpAndDie() {
header ("location: ".$this->nextHTML);
die();
}
}
So ... unsere Class ist eigentlich schon fertig, und benuzt werden kann sie z.B.
PHP-Code:
require WB_PATH."/engines/black_hawk/xValidateRequest.php";
$required_values = Array(
"page_id" => "int",
"section_id" => "int",
"pass" => "str"
);
$validator = new HTML_validateRequest($required_values);
$validator->nextHTML = WB_PATH."index.php";
$validator->validate();
/**
* So, hier können wir nun weitermachen
*/
So, und wenn was mit den Werten nicht stimmt, gehen wir halt wieder zu unsere Ausgangsseite zurück.
Im Attachment is die Orginaldatei: zum benutzen, ändern, erweitern, lernen, ... was auch immer.
Gruß
Aldus