Troubles mit $_GET / $_REQUEST

Mik3e

Erfahrenes Mitglied
Hi zusammen,

Problem:
Aus Sicherheitsgründen und um einen sauberen Quellcode zu erhalten ist register_globals deaktiviert. Weiters ist das Error_Tracking auf ALL gestellt (inklusive e_notice).

Mein Problem ist nun, dass ich beim initialisieren (deklarieren) der Variablen (also z.B.: $_GET['TESTVARIABLE'] eine Error-Notice erhalten, wenn der Wert nicht gesetzt bzw. per Query übergeben wurde (ist normalerweise dann der Fall, wenn eine Site noch ohne Useraktion aufgerufen wird).

Habt Ihr eine Idee, wie man den notice-Error umgehen kann? Natürlich wäre eine Möglichkeit, den Array vorher zu prüfen. Ist aber nicht wirklich elegant...

Und das Umstellen der php-ini fällt sowieso flach (eh klar :) Wär sonst nur destruktiv...

Danke & Ciao,
Mike
 
setze einfach ein AT (@) vor die betreffende Zeile.
Bsp
PHP:
 @$_GET['TESTVARIABLE'] = "bla und suelz"; // oder was auch immer du machen willst

Das is zwar nich die schönste Variante, aber die einfachste und schnellste ;)
 
Das ist genauso destruktiv wie das deaktivieren von e_notice in der Ini :)
Ich suche keine Möglichkeit, die Notice auszublenden (@... ist mir klar), sondern eine, um die Variablen elegant zu initialisieren...

Sollte es hier keine vorgefertigte Funktion von PHP geben (die speziell für $_REQUEST Arrays gebaut ist), komme ich um eine eigene sowieso nicht rum...

Vielleicht hat ja jemand einen Tipp,
Ciao,
Mike
 
Also..
isset geht schon mal nicht, weil sich isset auf den Array bezieht, und nicht auf den Index. Und der Array existiert immer...

Ich versuche das ganze gerade in eine Klasse zu packen... Bin aber noch wenig erfolgreich. Die Klasse soll dann auch gleich das initialisiern übernehmen. Im Konstruktor werden einfach alle $_REQUEST Variablen eingelesen und in die entsprechende Variable gepackt..

Ich poste den Code, sobald ich ein brauchbares ergebnis habe :)
 
Ja.. Ich hätt schon ne elegante lösung..
Bei mir werden die Klassen (Objekte) über einen eigenen Classloader automatisch instanziert... Hab mir eine Klasse gebaut, die ebenfalls automatisch instanziert wird und mit der das einlesen der Variablen super-elegant wäre ;)

Mein Problem: Wie bekomme ich die Variablen aus der Klasse wieder retour? Return geht nicht, da sonst die Schleife abgebrochen wird. Global geht auch nicht, da ich die Variablennamen ja nicht kenne (können auf jeder site klarerweise verschieden sein).

Hier mal die Klasse:

PHP:
<?PHP
/********************************************************************
* $fileID: class_admin_initvar.php									*
* Version: 1.0														*
*																	*
* Description:														*
* Klasse zum Einlesen und Initialisieren von POST/GET Variablen		*
/********************************************************************/

class initvar
{
	// Konstruktor initvar: Setzt eine per POST/GET übergebene Variable
	//-------------------------------------------------------------------
	function initvar()
	{
		foreach($_REQUEST as $key => $value) {
			//echo $key."= ".$value."<br>";
			$$key=$value;
		}
	}
}
?>
 
Herrgott, das simpelste übersieht man mal wieder ;)
Die Funktion ist zwar noch nicht ganz sauber, aber funktioniert zumindest schon mal. (global gefällt mir noch nicht wirklich):

PHP:
<?PHP
/********************************************************************
* $fileID: class_admin_initvar.php									*
* Version: 1.0														*
*																	*
* Description:														*
* Klasse zum einlesen und initialisieren von POST/GET Variablen		*
/********************************************************************/

class initvar
{
	// Konstruktor initvar: Setzt eine per POST/GET übergebene Variable
	//-------------------------------------------------------------------
	function initvar()
	{
		foreach($_REQUEST as $key => $value) {
			global $$key;
			$$key=$value;
		}
	}
}
?>
 
Hi,
So, nun passt es.. Mir ist vorhin entgangen, dass ich mit dem Konstruktor eigentlich den Schutzmechanismus von register_globals=off aushebel ;)

Was ich auch spannend finde, ist, dass in_array NICHT funktioniert, [phpf]array_key_exists[/phpf] allerdings schon...!?

Hier die Initialisierung einer Variable:
PHP:
$userName=$initvar->getVariable('userName');
Und hier die zugehörige Klasse:
PHP:
/********************************************************************
* $fileID: class_admin_initvar.php									*
* Version: 1.0														*
*																	*
* Description:														*
* Klasse zum einlesen und initialisieren von POST/GET Variablen		*
/********************************************************************/

class initvar
{
	// getVariable: Setzt eine per POST/GET übergebene Variable
	//-------------------------------------------------------------------
	function getVariable($variable)
	{	
		if (array_key_exists($variable,$_REQUEST)) {
			return $_REQUEST[$variable];
		} else {
			return false;
		}
	}
}
 
Zurück