Elegante Lösung für "Notice: Undefined index"

Senshi86

Erfahrenes Mitglied
N'abend zusammen :)

Vorweg - ja ich weiß was das für ein Fehler ist, woher er kommt und wie ich ihn beheben kann.
Mir geht es momentan um eine elegante Lösung der ganzen Geschichte, bei der ich eigentlich nur zwei Möglichkeiten habe:
a) ignorieren und error reporting rauf setzen
b) wirklich was gegen tun

Punkt a) ist einfach aber eigentlich will ich mir schon nen guten Programmierstil angewöhnen, und dazu gehört eigentlich nicht Variablen abzurufen die nicht existieren, auch wenn PHP da sehr freizügig ist hat es wohl durchaus recht mit der Meldung.

Nun, eine anständige Lösung dafür zu finden bereitet mir momentan ein paar Kopfschmerzen, daher wollte ich mir ein paar Ideen dazu einholen.
Mit isset() kann ich zwar prüfen ob die Variable gesetzt ist, fehlt aber die Hälfte der Prüfungen drin die ich bräuchte. Ergebnis: Ich müsste mit isset() prüfen, wenn vorhanden die Variable bearbeiten (Leerzeichen entfernen, etc.) und dann wieder prüfen ob sie gefüllt ist, da sie ja nur Leerzeichen enthalten haben könnte.
Dann bin ich über empty() gestolpert. Dachte ich mir erst gut und schön, klingt doch mal super. Angefangen das zu übernehmen und mittendrin auf den Gedanken gekommen, was denn eigentlich mit Leerzeichen passiert. Ergebnis, Leerzeichen werden als nicht leer angenommen. Um dem Ganzen noch eins oben drauf zu setzen interpretiert es auch eine numerische oder alphanumerische 0 als leer. Passt also auch nicht.

Gut, hab ich mir gedacht, schau ich mal auf die php Seite bei empty() ob die da irgendwelche interessanten Lösungswege für haben. Haben sich welche das empty in ne eigene Funktion eingebettet und da zusätzliche Abfragen eingefügt. Hab ich dann mal prompt so übernommen. Problem nun: Bei der Übergabe der zu prüfenden Variablen bekomme ich jetzt wieder die gleiche Undefined index Nachricht wie vorher auch ...

Nun die große Quizfrage, gibt es eine Möglichkeit, eine Variable ohne den Undefined index Fehler an eine Funktion zu übergeben, die dann prüft ob die Variable gesetzt ist oder nicht?

Ich denke mir mal dafür muss es doch einen praxistauglichen Weg geben, ohne PHP Meldungen zu ignorieren aber auch ohne eine Variable doppelt und dreifach überprüfen zu müssen, was insbesondere bei vielen Eingabewerten etwas viel Code produzieren kann ...

Danke und Gruß
Marcel :)
 
@tobee: Ich glaub das wird die gleiche Menge Code produzieren wie auch vorher, da es ja eigentlich nichts anderes ist als ein isset auf Array ebene, trotzdem Danke für den Denkanstoß :)

@Sven: Das sieht mal sehr interessant aus, insbesondere die Möglichkeit eine Userfunktion für die Filterung aufzurufen, werd ich mir mal eingehend zu gemüte führen, vielen Dank für den Tip :)


Edit:
Funktioniert wunderbar :D

PHP:
<?php

error_reporting(8);

function mycallbackfunction ($var)
{
	if (isset($var))
	{
		$var = trim($var);
		if ($var == '')
		{
			return false;
		} else {
			return $var;
		}
	} else {
		return false;
	}
}

/**
*
* @param	$name	string	Name der zu prüfenden Variable
* @param	$type	int		1 = POST Variable, 2 = GET Variable
*
**/
function is_empty($name, $type)
{
	$args = array ('options' => 'mycallbackfunction');
	
	switch ($type)
	{
		case 1:
			return !filter_input(INPUT_POST, $name, FILTER_CALLBACK, $args);
			break;
		case 2:
			return !filter_input(INPUT_GET, $name, FILTER_CALLBACK, $args);
			break;
		default:
			return true;
			break;
	}
}

if (is_empty('id', 2))
{
	echo 'Kein Wert übergeben';
} else {
	echo $_GET['id'];
}

?>
 
Zuletzt bearbeitet:
Zurück