php5 Problem: Notice: Undefined variable: ... in c:\programme\e-novative\WAMP\www

Jabba-deHut

Grünschnabel
Hallo,
sorry erstmal das ich das hier Poste obwohl diese Frage bestimmt schon 1000000x beantwortet wurde, aber ich weiß nicht wonach ich suchen soll, bzw. sagen mir die Ergebnisse nichts da ich noch totaler newby in PHP bin (keine angst hab reichlich OOP, C/C++ HTML erfahrung ;) ).

Ich hab hier probehalber mal ein WAMP ( Windows Apache MySQL PHP) Server laufen, für eine mimi Homepage und um mit PHP herumzuexperimentieren.

Doch sobald ich ein fertiges PHP-Script (zb ein Gästebuch) einbinden will, bekomme ich immer die Fehlermeldung
"Notice: Undefined variable: "... "in c:\programme\e-novative\WAMP\www"...
meißt funktioniert aber trotzdem alles :rolleyes: doch mit 10 bis 20 dieser Fehlermeldungen auf einer Seite :(

Hier mal ein Beispiel (ganz unten ist der Link zum Quellcode) und meine phpInfo() (hoffe ich mache damit jetzt nicht jedem tür und tor auf ) :eek:

Kann mir da einer einen Tip geben, was ich falsch mache?
Sicherlich ist es nur eine Falsche Einstellung in der PHP.ini oder dergleichen, denn überall anders laufen die Sachen ja ;-]
Kann ich einfach "display_errors = off" setzen, falls keiner eine lösung hat, oder kann das unerwartete nebenwirkungen haben?
 
Die Fehlermeldung weist darauf hin, dass das Skript wahrscheinlich unsauber geschrieben ist. Hier ein Beispiel zur Verdeutlichung:
PHP:
<?php

	// Ist die Variable $test noch nicht gesetzt, wird zwar Nachfolgendes meist richtig interpretiert, verursacht aber eine Meldung.
	if( $test ) {
		…
	}

	// „Sauberer“ und damit besser ist es jedoch, zuerst zu prüfen, ob die Variable überhaupt existiert, wenn die Existenz nicht gewährleistet ist:
	if( isset($test) && $test ) {
		…
	}

?>
 
Das "Komische" ist ja aber das es quasi bei allen Scripten ist, die mir vor den Cursor kommen :( und ich glaub nicht das die alle so "unsauber" geschrieben sind ... ;)
 
Hallo!

Jabba-deHut hat gesagt.:
.....und ich glaub nicht das die alle so "unsauber" geschrieben sind ... ;)
Ich glaube es schon..... denn sonst würde die Notice (Nachricht..... sinngemäss wohl eher: Hinweis) ja erst garnicht auftauchen. ;)

Wenn Du von "allen" Scripten redest, gehe ich davon aus dass Du in diesen kein "error_reporting(E_ALL)" stehen hast?!
Wenn dem so ist, hat wohl jemand an der php.ini gedreht..... denn laut php.net ist Notice standardmässig deaktiviert.
Schau mal nach was phpinfo() bei error_reporting für eine Nummer ausspuckt.

Gruss Dr Dau
 
Dann werden auch die Skripte unsauber geschrieben sein.
Bei der Entwicklung sollte mit den striktesten Einstellungen gearbeitet werden. So sollten auch zur Fehleranalyse die Sensibilität ganz nach oben geschraubt werden (vgl. error_reporting()-Funktion), um wirklich alle Störstellen auffinden zu können.
 
Die URL zur phpinfo() hab ich oben mit geposted, der Wert vom error_reporting ist 4095.

Nun bin ich aber leider immer noch nicht schlauer :confused:
 
Hätte der Entwickler meinen Ratschlag gelesen und befolgt, würden die Meldungen wahrscheinlich nicht auftreten.

Ein Vorschlag zur Fehlerbeseitigung: Ersetze mal alle Instanzen der $page-Variable durch $_REQUEST['page']. Denn anscheinend wurde das Gästebuch von einem Unwissenden mit der aktivierten register_globals-Einstellung entwickelt – nicht besonders professionell.
 
Also wenn schon die "Sensibilität hochgeschraubt" ist/wird, dann bitte auch mit safe_mode=ON und register_globals=OFF.
Ausserdem können die register_long_arrays (seit PHP 5) deaktiviert sein/werden..... also auch hier auf die von Gumbo schon aufmerksam gemachten Superglobalen zurückgreifen.
Beim groben überfliegen sieht man gleich dass die Scripte mit den long_arrays nur so überschwemmt sind.

Also ich sehe 3 Möglichkeiten:
1. Das Script wegschmeissen.
2. Das Script entsprechend umschreiben.
3. Die "Sensibilität" von PHP runterschrauben.

Möglichkeit 3 geht natürlich auf die Sicherheit..... und wird dich ausserdem früher oder später wieder zum Punkt Null bringen (z.b. wenn Du mit dem Script von deiner "Entwicklerumgebung" zu einem Hoster umziehst und dieser nicht die Einstellungen hat die das Script benötigt).

@Gumbo, ist E_ALL nicht schon in E_STRICT enthalten?!
Dann müsste error_reporting ja 2048 Bit und nicht 4096 Bit haben.
E_ALL enhält ja auch alle darunter liegenden Konstanten.
Oder habe ich hier nur ein Verständnisproblem?!
 
Gumbo, ist E_ALL nicht schon in E_STRICT enthalten?!
Ja, denn gibt man die Werte der Konstanten aus, wird man sehen, dass E_ALL um eins kleiner ist als E_STRICT. Dass die error_reporting-Direktive einen so ungewöhnlichen Wert besitzt, ist weiter nichts besonderes, da jeder Ganzzahlwert erlaubt ist. 4095 würde jedoch auf dasselbe Ergebnis wie E_ALL beziehungsweise E_STRICT zurückgestuft.
 

Neue Beiträge

Zurück