Fehler: Undefined variable ...

JamesT

Erfahrenes Mitglied
Kurze Frage,

bei meinem Script erhalte ich den Fehler

Notice: Undefined variable: id in /home/.../index.php on line 5

Ich poste mal Zeile 5-10 des Quellcodes:

PHP:
	if($id AND $do=="delete"){
		mysql_query("DELETE FROM
							drucker
						WHERE
							id=".$_GET['id']);
	}

Ich habe gelesen das ich da mit "f(!isset($wert))" was machen kann.

Nur weiss ich nicht wie.

Kann mir jemand abhilfe schaffen?

Vielen Dank und Grüße aus Bielefeld

JamesT
 
Ich hab das jetzt nach 5noopys tipp angepasst, und erhalte nun den Fehler "undefined index" anstatt "undefined variable"

BTW: Wenn ich error_reporting in der php ini ausmache, läuft das script. Aber ich möchte die Fehler gern weghaben, auch wenn Sie eigentlich nicht stören. :-)

Grüße

JamesT
 
Ihr habt immer das Problem das ihr scheinbar immer $_GET und $_POST unreflektiert einsetzt. Immer gleich in den Aufruf rein und dann wundern wo es kracht ...


Was spricht eigentlich gegen :
PHP:
$id=$_GET["id"]; 

//$id ist nun garantiert da wenn auch ggf als leere Variable

if (($do=="delete") and ($id <>"")){
    echo "machwas";
}
 
Also wenn man den Teil davor richtig programmiert hat, dann kann man $_GET und $_POST auch direkt in Aufrufe oder Sonstiges reinschreiben. Natürlich muss man sich dann sicher sein, dass die Variablen auch existieren!

Die Variante
PHP:
$id=$_GET["id"];  

//$id ist nun garantiert da wenn auch ggf als leere Variable 

if (($do=="delete") and ($id <>"")){ 
    echo "machwas"; 
}
ist natürlich auch möglich, aber ich persönlich bin kein Freund die $_GET und $_POST erst nochma einer anderen Variable zuzuordnen, wenn ich mir doch sicher bin, dass die aufjedenfall da sind. In meinen Augen doppelte Arbeit. Deswegen empfehle ich die Variante
PHP:
If (isset($_GET["id"]))
{ 
 Echo "Es komme was wolle";
}else{
 Echo "Keine Variable vorhanden";
}
Es wird überprüft ob es die Variable gibt und wenn ja - auch wenn sie einen leeren Wert enthält - kann ich sie benutzen.

Und um nochmal auf das Problem zurückzukommen, ich nehme stark an, dass entweder $id oder $do nicht existieren ;) Lass dir doch mal vor der Abfrage beide Variablen ausgeben mit
PHP:
echo $id."<br>".$do;
Dann kannst du sehn, wie die Werte sind und ggf bekommst du dann einen Fehler in Line 4 weil wirklich eine nicht existiert :D
 
Geschmackssache ich bezeichne sowas als klingonischen Programmierstil :)
Wenn du nachher Fehler suchst machst du dir mit so etwas nur das Leben schwer.
Da tipp ich lieber eine Zeile mehr und verbrate temporär ein paar Bytes Speicherplatz ;)
Und lesbarer / nachvollziehbarer werden solche Konstrukte auch nicht.
 
Ihr habt immer das Problem das ihr scheinbar immer $_GET und $_POST unreflektiert einsetzt. Immer gleich in den Aufruf rein und dann wundern wo es kracht ...
Wozu den Variablenwert zusätzlich in einer Variable speichern? Dadurch erhöht sich doch bloß der Speicherbedarf des Skriptes.

Ich versuche wenn möglich direkt mit den vordefinierten Variablen zu arbeiten. Und falls nicht, speichere ich nur den gefilterten/validierten Wert in einer zusätzlichen Variable, beispielsweise:
PHP:
if( isset($_GET['id']) && intval($_GET['id']) <= 0 ) {
	echo 'Falscher ID-Wert';
	$id = null;
} else {
	$id = intval($_GET['id']);
}

// …

if( !empty($id) ) {
	// gültiger ID-Wert
}
Dass in diesem Fall die ID nicht-numerisch ist, kann auf einen Angriff hindeuten und sollte deswegen sogar protokolliert werden.
 
Zurück