Seite 1 von 1

undefined index

Verfasst: 21.07.2006 18:04
von Martin Truckenbrodt
Hallo,
bin gerade dabei einen meiner MODs zum Üben schon einmal für phpBB3 umzuschreiben.
Bei phpBB3 ist ja das Error Reporting aktiviert.
Nun habe ich folgende Fehlermeldung:
[phpBB Debug] PHP Notice: in file /phpmn.php on line 228: Undefined index: 3
Der dazugehörige Code:

Code: Alles auswählen

	$link = append_sid("phpmn.$phpEx?edit=1&id=" . $newsid . "&topical=" . $status[$newsid]);
Ich habe schon fleißig gegoogelt und ein paar Standard Ressourcen durch gegrast und bin aber leider immer nur auf nicht funktionierende Webseiten gestoßen. :roll:

Wo liegt das Problem?

Das Abschalten des Reportings betrachte ich nicht als Lösung.

Danke und Gruß Martin

Verfasst: 21.07.2006 18:10
von BB-BF-BM
sowiet ich weiß, bedeutet "Undefined index", dass im Array dieser Index nicht auftaucht. In diesem Fall wäre der Index $newsid und das array $status[]

$status[3] existiert also nicht

Verfasst: 21.07.2006 18:13
von Martin Truckenbrodt
Hallo BB-BF-BM,

hhm! ??? :o

Wie löse ich das Problem?

Etwas weiter oben im Code habe ich schon

Code: Alles auswählen

$status = array();
stehen.

Gruß Martin

Verfasst: 21.07.2006 18:37
von MagMo
Hi,
Martin Truckenbrodt hat geschrieben:Wie löse ich das Problem?
Indem du dafür sorgst, dass es den Index 3 gibt oder $newsid den Wert eines existierenden Indexes hat. :grin:

So ganz ohne den entsprechenden Code kann man dir keine andere Lösung vorschlagen. Wenn du mit der Variale $status nichts weiter anstellst, dann hat dieses Array nur den existierenden Index Null.
Wichtig für eine sinnvollen Lösungsansatz deines Problems ist also: 1) welche Daten werden (wie) in dem Array gespeichert und 2) welcher Zusammenhang besteht zu $newsid.

Grüße
MagMo

Verfasst: 21.07.2006 18:45
von Martin Truckenbrodt
Hallo,
ich verstehe fast nur Bahnhof.
Ich bin mit http://www.php.net/manual/de/language.v ... riable.php vielleicht schon ein bißchen weiter. Aber mit Mitte 30 will es nicht mehr so leicht ins Hirn. Mir fehlt da leider wohl auch ziemlich viel Background.

Hier die komplette Datei: http://www.martin-truckenbrodt.com/down ... mn.php.txt

$newsid erhält als Wert nur Zahlen, ähnlich der forum_id oder anderen Werten des phpBB.

Gruß Martin

Verfasst: 21.07.2006 21:17
von Martin Truckenbrodt
Hallo MagMo,
ich bin mir jetzt schon mal ziemlich sicher, dass es an dem array() liegt.

Muß ich irgendwie für $status definieren, dass der Schlüssel $newsid immer eine Zahl ist, oder/und dass als Wert dafür immer ein Text kommt?

Ich stehe auf dem Schlauch. Hilfe!
[Nachtrag:]
Ich habe jetzt

Code: Alles auswählen

$status = range(1,1000);
nach

Code: Alles auswählen

$status = array();
eingefügt und die Meldung ist weg.
Kann man irgendwie definieren, dass es sich generell um Zahlen handelt ohne dass man sich auf einen Maximalwert festlegen muß?

Gruß Martin

Verfasst: 22.07.2006 09:38
von BB-BF-BM
angenommen, es existieren $status[0], $status[1] und $status[2].
Dann existiert unter anderem $status[3] nicht!
Das heißt, du musst dafür sorgen, dass $status[3] existsiert!

Code: Alles auswählen

while ($subscribe = $db->sql_fetchrow($result))
{
	extract($subscribe);
	$status[$members_newsid] = $members_mailpref;
};
In dem Code wird $status gefüllt;
Aber auch hier:

Code: Alles auswählen

	if (isset($status[$newsid]) && $status[$newsid] == "")
	{
		$status[$newsid] = '3'; 
		$statusview[$newsid] = $lang['L_PHPMN_NOTSUBSCRIBED'] ;
	}
	elseif (isset($status[$newsid]) && $status[$newsid] == "html")
	{
		$status[$newsid] = '1'; 
		$statusview[$newsid] = $lang['L_PHPMN_HTML'] ;
	}
	elseif (isset($status[$newsid]) && $status[$newsid] == "plain")
	{
		$status[$newsid] = '2'; 
		$statusview[$newsid] = $lang['L_PHPMN_PLAIN'] ;
	}
Wie es aussieht, soll die erste if-Abfrage einen Standardwert festlegen, wenn nichts genaueres definiert worden ist.
Wenn das stimmt, kannst du es ja mit

Code: Alles auswählen

	if ( !isset($status[$newsid]) || $status[$newsid] == "")
	{
		$status[$newsid] = '3'; 
		$statusview[$newsid] = $lang['L_PHPMN_NOTSUBSCRIBED'] ;
	}

Verfasst: 22.07.2006 13:45
von Martin Truckenbrodt
Hallo BB-BF-BM,

mit Deiner modifizierten Zeile funktioniert die Sache! Vielen Dank!

Ich denke, ich habe jetzt auch kapiert wo das Problem lag. Zukünftig werde ich beim Default Wert Setzen anders herum denken.

Ich habe die aktuelle Version der Datei ncohmal hochgeladen.

Jetzt muß ich nur noch schauen, wieso der Header nicht gealden wird, und das Template anpassen.

Danke und Gruß Martin