rex_request: GET, POST, SERVER, SESSION, COOKIE sicher auslesen
Verwende rex_request und zugehörige Funktionen statt direktem Zugriff auf Superglobals ($_GET, $_POST, $_SERVER, $_SESSION, $_COOKIE).
Wichtigste Funktionen
| Funktion | Zugriff auf | Signatur | Beispiel |
|---|---|---|---|
rex_get() |
$_GET |
rex_get($key, $type, $default) |
rex_get('page', 'int', 1) |
rex_post() |
$_POST |
rex_post($key, $type, $default) |
rex_post('name', 'string', '') |
rex_request() |
$_REQUEST |
rex_request($key, $type, $default) |
rex_request('id', 'int') |
rex_server() |
$_SERVER |
rex_server($key, $type, $default) |
rex_server('HTTP_HOST', 'string') |
rex_session() |
$_SESSION |
rex_session($key, $type, $default) |
rex_session('user_id', 'int') |
rex_set_session() |
$_SESSION |
rex_set_session($key, $value) |
rex_set_session('cart', $items) |
rex_unset_session() |
$_SESSION |
rex_unset_session($key) |
rex_unset_session('temp_data') |
rex_cookie() |
$_COOKIE |
rex_cookie($key, $type, $default) |
rex_cookie('consent', 'bool') |
rex_files() |
$_FILES |
rex_files($key, $type, $default) |
rex_files('upload', 'array') |
rex_env() |
$_ENV |
rex_env($key, $type, $default) |
rex_env('PATH', 'string') |
Erlaubte Typen
string, int, integer, bool, boolean, float, double, real, array, object
Whitelist-Validierung (REDAXO 5.17+)
// Nur explizit erlaubte Werte
$sort = rex_get('sort', ['name', 'date', 'price'], 'name');
$status = rex_post('status', ['active', 'inactive'], 'active');
$limit = rex_get('limit', [10, 20, 50], 10);
Zusätzliche Methoden
| Methode | Zweck |
|---|---|
rex_request_method() |
Liefert HTTP-Methode (GET, POST, PUT, DELETE) |
rex_request::isXmlHttpRequest() |
Prüft auf AJAX-Request |
rex_request::isPJAXRequest() |
Prüft auf PJAX-Request |
rex_request::isPJAXContainer($id) |
Prüft PJAX-Container-ID |
Praxisbeispiele
Paginierung mit Sortierung
$page = rex_get('page', 'int', 1);
$sort = rex_get('sort', ['name', 'date', 'price_asc', 'price_desc'], 'name');
$limit = rex_get('limit', [10, 20, 50], 20);
$sql = rex_sql::factory();
$sql->setQuery("SELECT * FROM products ORDER BY {$sort} LIMIT {$limit} OFFSET " . ($page - 1) * $limit);
Formulardaten sicher verarbeiten
if (rex_request_method() === 'POST') {
$name = rex_post('name', 'string');
$email = rex_post('email', 'string');
$status = rex_post('status', ['draft', 'published'], 'draft');
// XSS-Schutz bei Ausgabe
echo rex_escape($name);
}
AJAX-Request erkennen
if (rex_request::isXmlHttpRequest()) {
// JSON-Response für AJAX
header('Content-Type: application/json');
echo json_encode(['success' => true]);
exit;
}
Session im Frontend starten
// In boot.php des AddOns
if (rex::isFrontend()) {
rex_login::startSession();
}
// Session-Werte setzen/auslesen
rex_set_session('cart_items', $items);
$cart = rex_session('cart_items', 'array', []);
Domain aus Server-Variablen
$host = rex_server('HTTP_HOST', 'string', 'localhost');
$protocol = rex_server('HTTPS', 'string') ? 'https' : 'http';
$fullUrl = $protocol . '://' . $host . rex_server('REQUEST_URI', 'string');
File-Upload verarbeiten
if (rex_request_method() === 'POST') {
$file = rex_files('upload', 'array');
if (!empty($file['tmp_name'])) {
rex_mediapool::addMedia([
'file' => $file['tmp_name'],
'name' => $file['name'],
]);
}
}
Sicherheit
Immer rex_escape() bei HTML-Ausgabe verwenden:
$search = rex_get('q', 'string');
echo '<h1>Suche: ' . rex_escape($search) . '</h1>';