• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] Notice: Undefined offset: in array abfangen

Al-Pi

New member
Hallo zusammen,

in dem folgendem script erhalte ich in der for schleife Undefined offset notice wenn die anzahl der datensätze nicht so gross ist wie die Maximal erlaubte anzahl. wie könnte ich das abfangen.

Also ich möchte maximal 10 Meldungen erlauben, die 11 meldung löscht die erste, soweit klappt auch alles, nur wenn in der datenbank weniger als 10 meldungen vorhanden sind , erhalte ich Undefined offset notice.

PHP:
<?php
	//Daten sammeln
		$neueMeldungID = $_POST['id'];
		$neueMeldungGrund = $_POST['grund'];
		$neueMeldungDatum = date("d.m.Y");
 		$Meldung = file($meldungDB);
 		$anz = count ($Meldung);
		$maxMeldung = 10; //max. erwünschte meldungen 
		$newdata = ''; //notice Undefined variable abfangen
			
	//Neue Daten am Arrayanfang setzen
		array_unshift($Meldung, "$neueMeldungID|$neueMeldungGrund|$neueMeldungDatum\n");
		
	//zeilen prüfen
		for($i = 0; $i < $maxMeldung; $i++) 
		{
			$newdata .= $Meldung[$i]; //verursacht Undefined offset:
		}
		
	// Speichern
		$fp = fopen($meldungtDB, 'w+');
		flock($fp, 2) or die('Fehler');
		fwrite($fp, $newdata);
		fclose($fp);
?>
 
Zuletzt bearbeitet von einem Moderator:
AW: Notice: Undefined offset: in array abfangen

Mach in die Schleife noch eine If-Abfrage rein, sodass nur so viel gesetzt wird, wie auch Einträge im Array vorhanden sind.

- - - Aktualisiert - - -

So könnte das funktionieren:

PHP:
...
if (isset($Meldung[$i])) {
  ...
}
...
 
AW: Notice: Undefined offset: in array abfangen

ach nööööö, seit heute mittag google ich nach einer lösung... warum habe ich nicht vor 5 stunden gefragt?!

lieben dank, fehler meldungen sind weg
 
AW: Notice: Undefined offset: in array abfangen

ach nööööö, seit heute mittag google ich nach einer lösung... warum habe ich nicht vor 5 stunden gefragt?!

du hast ja gefragt, nur zunächst an der weniger guten Stelle, nämlich bei Google statt im besten deutschsprachigen JS-Forum. :)
 
@rico: ich finde die Lösung nicht besonders elegant. Zum einen wird die Schleife trotzdem 10 mal durchlaufen, auch wenn sie eigentlich nur z.B. ein einziges mal laufen müsste und zum Anderen finde ich isset() irgendwie unschön bei einem Array (ist aber Geschmackssache) - wofür gibt es denn die Funktion array_key_exists...

Ich würde ja einfach bei der Festlegung von $maxMeldung schon das Richtige reinschreiben:
PHP:
$anz = count ($Meldung);
$maxMeldung = min($anz, 10); //max. erwünschte meldungen

Man könnte aber auch mit array_slice() einfach nur die ersten 10 Elemente (oder weniger) extrahieren und dann mit implode() wieder einen langen String aus dem Array erzeugen. Fände ich persönlich einfacher zu lesen.
 
Zurück
Oben