Undefined offset: 2 geht mir auf die nerven?

Shorty1968

Erfahrenes Mitglied
Hallo ich bekomme seit längere Zeit schon folgende Fehlermeldung und ich bekomme sie einfach nicht weg.
Code:
Fatal error: PHP notice in file /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/data/message/bbcode/BBCodeParser.class.php (326): Undefined offset: 2

Information:

error message: PHP notice in file /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/data/message/bbcode/BBCodeParser.class.php (326): Undefined offset: 2
error code: 0
file: /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/system/WCF.class.php (281)
php version: 5.3.3-7+squeeze15
wcf version: 1.1.9 (Tempest)
date: Tue, 09 Apr 2013 05:34:38 +0000
request: /index.php?page=RMarketplaceEntry&entryID=3
referer: http://www.wbb-support.eu/portal.html
Stacktrace:

#0 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/data/message/bbcode/BBCodeParser.class.php(326): WCF::handleError(8, 'Undefined offse...', '/var/www/vhosts...', 326, Array)
#1 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/data/message/bbcode/BBCodeParser.class.php(66): BBCodeParser->buildParsedString()
#2 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/data/message/bbcode/MessageParser.class.php(87): BBCodeParser->parse('Hallo ich suche...')
#3 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/data/rmarketplace/mpEntry/MpEntry.class.php(361): MessageParser->parse('Hallo ich suche...', '1', '0', '1', false)
#4 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/templates/compiled/483_0_1_rmarketplaceEntry.php(66): MpEntry->getTextPreview()
#5 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/system/template/Template.class.php(267): include('/var/www/vhosts...')
#6 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/page/AbstractPage.class.php(100): Template->display('rmarketplaceEnt...')
#7 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/page/RMarketplaceEntryPage.class.php(168): AbstractPage->show()
#8 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/page/AbstractPage.class.php(46): RMarketplaceEntryPage->show()
#9 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/util/RequestHandler.class.php(64): AbstractPage->__construct()
#10 /var/www/vhosts/wbb-support.eu/httpdocs/wcf/lib/util/RequestHandler.class.php(92): RequestHandler->__construct('RMarketplaceEnt...', Array, 'page')
#11 /var/www/vhosts/wbb-support.eu/httpdocs/index.php(8): RequestHandler::handle(Array)
#12 {main}
Ich konnte bis jetzt nur heraus finden das sie von diesem Datei inhalt verursacht wird,aber nicht genau was und wie ich es beheben kann.
PHP:
<?php
// wcf imports
require_once(WCF_DIR.'lib/data/DatabaseObject.class.php');

class Definition extends DatabaseObject {
	protected $definition = null;
	
	public function __construct($definitionID, $row = null, $word = null) {
		// execute sql statement
		$sqlCondition = '';
		if ($definitionID !== null) {
			$sqlCondition = "definition.definitionID = ".intval($definitionID);
		}
		else if ($word !== null) {
			$sqlCondition = "definition.word = ".escapeString($word);
		}
		
		if (!empty($sqlCondition)) {
			// select definition
			$sql = "SELECT		definition.*
					FROM 		wcf".WCF_N."_definition definition
					WHERE 		".$sqlCondition;
			$row = WCF::getDB()->getFirstRow($sql);
			$row['formatedMessage'] = self::getFormattedMessage($row['description']);
		}
		if(isset($row['description'])) {
			$row['formatedMessage'] = self::getFormattedMessage($row['description']);
		}
		parent::__construct($row);
	}
	
	/**
	 * Returns the formatted message.
	 *
	 * @return	string
	 */
	public static function getFormattedMessage($text) {
		require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php');
		MessageParser::getInstance()->setOutputType('text/html');
		return MessageParser::getInstance()->parse($text, true, true, true, false);
	}
}
?>
 
Das in dem Code ist eine andere Datei,aber diese Verursacht den Fehler,wenn ich die selbe Datei aus einem Älteren Verzeichniss einspiele ist der Fehler weg.

Die Zeile 326 aus der Datei wcf/lib/data/message/bbcode/BBCodeParser.class.php sieht so aus:
PHP:
$buffer .= $this->textArray[$i];
Ich vermute mal das der Fehler in meinem Code hier:
PHP:
$sqlCondition = "definition.word = ".escapeString($word);
und hier liegt:
PHP:
/**
     * Returns the formatted message.
     *
     * @return    string
     */
    public static function getFormattedMessage($text) {
        require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php');
        MessageParser::getInstance()->setOutputType('text/html');
        return MessageParser::getInstance()->parse($text, true, true, true, false);
    }
Weil es in der wcf/lib/data/message/bbcode/BBCodeParser.class.php um array geht und in der anderen Datei um string,aber wenn ich recht habe fehlt mir das wissen es zu beheben.
 
Lass dir mal $this->textArray und $i mit var_dump ausgeben. Dann schau ob ein Eintrag mit $i im Array exisitiert
 
Mit this->textArray: bekamm ich folgendes ergebniss:
Code:
Inhalt von this->textArray:

array(7) {
  [0]=>
  string(95) "Hallo ich suche ein Programmiere für Zwei Plugins und eine Erweiterung für das Kundenbereich "
  [1]=>
  string(6) "Plugin"
  [2]=>
  string(55) ",die Zwei Plugins sind denke ich für einen erfahrenen "
  [3]=>
  string(3) "wBB"
  [4]=>
  string(71) " Programmiere Kleine Plugins bei der Erweiterung fü das Kundenbereich "
  [5]=>
  string(6) "Plugin"
  [6]=>
  string(278) " denke ich mal wird es etwas aufwändiger.

Ich habe den Preis extra mit VB angegeben,weil ich denke das ein Programmiere das eher einschätzen kann was es Kostet allerdings hoffe ich das es da mein Finanzen auch begrenzt sind sich das ganze in einem erträglichen Rahmen hält."
}
Wenn ich aber unter:
Code:
// loop through the tags
		$i = -1;
da setze:
Code:
echo "Inhalt von i = -1;:<pre>";
                var_dump($i = -1;);
                echo "</pre>";
bekomme ich eine weisse seite.

Aber wenn ich das nun richtig sehe existiert im $i kein array oder?
 
$i ist ein index. eine Zahl. Die folgende Zeile ist eh was ganz komisches
PHP:
 var_dump($i = -1;);
Das ist eine Zuweisung. Zudem hat es ein ; zuviel.

Den Array sehen wir jetzt. also brauchen wir an dieser Stelle noch $i
PHP:
var_dump($1);

Achja, wenn $i -1 ist, dann geht das natrürlich nicht. Der kleinste Index im Array ist 0
 
Auch so bekomme ich nur eine weisse seite:
Code:
echo "<pre>Ausgabe von Total_expl_or ".$i = -1.":";
var_dump($1);
echo"</pre>";
Aber suchen wir den fehler nun nicht in der Falschen Datei die Zeile:
PHP:
$buffer .= $this->textArray[$i];
Steht in einem array und die Datei die es anspricht steht in einem string:
PHP:
$sqlCondition = "definition.word = ".escapeString($word);
und:
PHP:
/**
	 * Returns the formatted message.
	 *
	 * @return	string
	 */
	public static function getFormattedMessage($text) {
		require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php');
		MessageParser::getInstance()->setOutputType('text/html');
		return MessageParser::getInstance()->parse($text, true, true, true, false);
	}
Solten wir da nicht das string in array umwandeln?
 
Keine Ahnung was dein MessageParser so alles macht. Ob er der ein Array bildet oder ein Objekt etc.
Einen array haben wir ja, wie du Beitrag #5 bewiesen hast.

Ich sehe nur das du irgendwo $i auf -1 setzt. Später mit $i auf den array losgehst. Wenn da $i immer noch -1 ist, dann führt das garantiert zu einem Offsetfehler. Und genau einen solchen hast du ja.
Ein Array mit einem fortlaufenden Index hat niemalsnie den Index -1. Darum führt $this->textArray[-1]; zu einem Fehler.

Du bekommst eine leere Seite beim var_dump? Dann ist PHP nie an diesen Code-abschnitt gekommen. var_dump() gibt NIE nix aus. Mindestens ein NULL.
Ich seh ja auch nicht wo du den var_dump() eingebaut hast. Aber er sollte direkt vor der Zeile 326 stehen damit das $i geprüft wird das gleich anschliessend auf den Array losgelassen wird.
 
Ich gebe in zeile 323 direkt unter:
PHP:
$i = -1;
Folgendes ein:
PHP:
echo "<pre>Ausgabe von $i ".$i.":";
var_dump($1);
echo"</pre>";
und bekomme eine weisse seite?
 
Dan liegt das Problem auf Zeile 323.

Ne, im ernst. Poste mal 10 Zeilen davon und 10 Zeilen danach. Dann so fischen wir Helfenden im Dunkeln.
 
Zurück