Seite 1 von 1

Problem mit explode() und phpBB Debug

Verfasst: 07.04.2009 19:44
von Pionier
Hallo,

ich bastel gerade an einem kleinen Mod für das phpBB3.0.4
Im großen und ganzen sind auch alle Funktionen ok, abgesehen von einer Kleinigkeit.

Im Debug-Mode bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

[phpBB Debug] PHP Notice: in file /savekb.php on line 37: Undefined index: 1
[phpBB Debug] PHP Notice: in file /savekb.php on line 38: Undefined index: 2
[phpBB Debug] PHP Notice: in file /savekb.php on line 39: Undefined index: 3
Hier mal die betreffende Codestelle in meinem Mod:

Code: Alles auswählen

    $contents = file_get_contents("http://www.savekb.de/forenplugin/kb.php?uni=$savekb_uni&limit=$savekb_limit");

$lines = explode('<br>', $contents);

foreach($lines AS $line)
    {
        $datas = explode(';', $line); 

            $template->assign_block_vars('block_savekb', array(
                'ANGREIFER'       => $datas['0'], 
                'VERTEIDIGER'     => $datas['1'],
                'UNITS'           => $datas['2'],
                'LINK'            => $datas['3'] 
            ));
    }

 
Habe ich da einen gravierenden Fehler gemacht, oder was ist da falsch gelaufen?

Re: Problem mit explode() und phpBB Debug

Verfasst: 07.04.2009 20:48
von Dr.Death
Naja, da wird wohl ein Array Inhalt leer oder nicht definiert sein ( $datas['1'] bis $datas['3'] ).

Versuche vorher den Array Inhalt auf vorhanden sein zu prüfen:

Code: Alles auswählen

                'ANGREIFER'       => (isset($datas['0']) ? $datas['0'] : '',
                'VERTEIDIGER'     => (isset($datas['1']) ? $datas['1'] : '',
                'UNITS'           => (isset($datas['2']) ? $datas['2'] : '',
                'LINK'            => (isset($datas['3']) ? $datas['3'] : '', 

Re: Problem mit explode() und phpBB Debug

Verfasst: 07.04.2009 21:14
von Pionier
Vermutlich,

denn mit

Code: Alles auswählen

$savekb_uni = '05'; // gib hier die zweistellige nummer des gewünschten unis ein
$savekb_limit = '5'; // wieviele kbs sollen angezeigt werden - höchstens 10

$contents = file_get_contents("http://www.savekb.de/forenplugin/kb.php?uni=$savekb_uni&limit=$savekb_limit"); 
bekomme ich folgende Daten:

Code: Alles auswählen

Cyrano; Der 7 Zwerg; A:5.390.000 V:78.210.000; http://www.savekb.de/viewkb.php?kbid=3212682
Suche deut; Lillekopf; A:12.870.000 V:123.259.000; http://www.savekb.de/viewkb.php?kbid=3212300
m0d; belldandy; A:176.040.000 V:977.469.000; http://www.savekb.de/viewkb.php?kbid=3211522
Silent Hunter ; MrBrown ; A:2.310.000 V:101.277.000; http://www.savekb.de/viewkb.php?kbid=3207852
Amun Re ; Spencer ; A:99.340.000 V:1.136.339.000; http://www.savekb.de/viewkb.php?kbid=3205770
was ja auch richtig ist.

Aber in der Ausgabe werden mir 6 Zeilen erstellt.
siehe auch das Demo => http.allytools.de/phpBB3/

Re: Problem mit explode() und phpBB Debug

Verfasst: 07.04.2009 21:42
von Pyramide
Wenn du den Quellcode der Datei http://www.savekb.de/forenplugin/kb.php?uni=05&limit=5 anguckst, dann siehst du dass die "letzte" Zeile noch mit einem <br> aufhört, also die eigentlich letzte Zeile aus einem Leerstring besteht.

Am besten du prüfst z.B. mit count($datas) == 4 ob du die Daten im richtigen Format bekommst. Damit deckst du dann auch gleich den Fall ab, falls der Server mal Müll liefert anstatt der gewünschten Daten.

Re: Problem mit explode() und phpBB Debug

Verfasst: 08.04.2009 08:51
von Pionier
Pyramide hat geschrieben:Wenn du den Quellcode der Datei http://www.savekb.de/forenplugin/kb.php?uni=05&limit=5 anguckst, dann siehst du dass die "letzte" Zeile noch mit einem <br> aufhört, also die eigentlich letzte Zeile aus einem Leerstring besteht.
Das hatte ich noch nicht gemacht :oops:

Aber da nur das letzte <br> das Problem verursacht, lösche ich es mit folgender Codezeile

Code: Alles auswählen

$contents = preg_replace('/(?:<br ?\/?>|\s)*$/', '', $contents);  
Also sieht mein Code nun so aus:

Code: Alles auswählen

    $contents = file_get_contents("http://www.savekb.de/forenplugin/kb.php?uni=$savekb_uni&limit=$savekb_limit");

$contents = preg_replace('/(?:<br ?\/?>|\s)*$/', '', $contents); 

$lines = explode('<br>', $contents);

foreach($lines AS $line)
    {
        $datas = explode(';', $line); 

            $template->assign_block_vars('block_savekb', array(
                'ANGREIFER'       => $datas['0'], 
                'VERTEIDIGER'     => $datas['1'],
                'UNITS'           => $datas['2'],
                'LINK'            => $datas['3'] 
            ));
    }
 
Vielen Dank für die schnelle und kompetente Hilfe