Undefined offset: 2 geht mir auf die nerven?

Zeilen davor:
PHP:
	/**
	 * Returns true, if $tag is allowed in open tags.
	 * 
	 * @param	array		$openTags		list of open tags
	 * @param	array		$tag
	 * @return	boolean
	 */
	protected function isAllowed($openTags, $tag, $closing = false) {
		foreach ($openTags as $openTag) {
			if ($closing && $openTag == $tag) continue;
			if ($this->definedTags[$openTag]['allowedChildren'] == 'all') continue;
			if ($this->definedTags[$openTag]['allowedChildren'] == 'none') return false;

			$arguments = explode('^', $this->definedTags[$openTag]['allowedChildren']);
			if (!empty($arguments[1])) $tags = explode(',', $arguments[1]);
			else $tags = array();
			
			if ($arguments[0] == 'none' && !in_array($tag, $tags)) return false;
			if ($arguments[0] == 'all' && in_array($tag, $tags)) return false;
		}
		
		return true;
	}
	
	/**
	 * Builds the parsed string.
	 */
	public function buildParsedString() {
		// reset parsed text
		$this->parsedText = '';
		
		// create text buffer
		$buffer =& $this->parsedText;
		
		// stack of buffered tags
		$bufferedTagStack = array();
		
		// loop through the tags
		$i = -1;
		
		foreach ($this->tagArray as $i => $tag) {
Zeilen danach:
PHP:
if ($tag['closing']) {
				// get buffered opening tag
				$openingTag = end($bufferedTagStack);
				
				// closing tag
				if ($openingTag && $openingTag['name'] == $tag['name']) {
					$hideBuffer = false;
					// insert buffered content as attribute value
					foreach ($this->definedTags[$tag['name']]['attributes'] as $attribute) {
						if ($attribute['useText'] && !isset($openingTag['attributes'][$attribute['attributeNo']])) {
							$openingTag['attributes'][$attribute['attributeNo']] = $buffer;
							$hideBuffer = true;
							break;
						}
					}
					
					// validate tag attributes again
					if ($this->isValidTag($openingTag)) {
						if ($this->definedTags[$tag['name']]['className']) {
							// get bbcode object
							$bbcodeObj = $this->getBBCodeObject($tag['name']);
							
							// build tag
							$parsedTag = $bbcodeObj->getParsedTag($openingTag, $buffer, $tag, $this);
						}
						else {
							// build tag
							$parsedTag = $this->buildOpeningTag($openingTag);
							$closingTag = $this->buildClosingTag($tag);
							if (!empty($closingTag) && $hideBuffer) $parsedTag .= $buffer.$closingTag;
						}
					}
					else {
						$parsedTag = $openingTag['source'].$buffer.$tag['source'];
					}
					
					// close current buffer
					array_pop($bufferedTagStack);
					
					// open previous buffer
					if (count($bufferedTagStack) > 0) {
						$bufferedTag =& $bufferedTagStack[count($bufferedTagStack) - 1];
						$buffer =& $bufferedTag['buffer'];
					}
					else {
						$buffer =& $this->parsedText;
					}
 
Das hatte ich gemacht stimmt villeicht etwas mit meinem var_dump() code nicht?
Code:
echo "<pre>Ausgabe von $i ".$i.":";
var_dump($1);
echo"</pre>";
 
Dann müssen wir den $this->tagArray mal unter dei Lupe nehmen.
Mach mach ein var_dump($this->tagArray) direkt vor dem foreach().

Sorry, aber ohen Debuggen sehe ich keine Weg das Problem zu finden da es kein offensichtliches Problem ist.
 
Ja beim wBB scheint es keinen debug zu geben.

Hier mal die ausgabe.
Code:
string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [1]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [2]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [3]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [4]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [5]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [6]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=3]" ["attributes"]=> array(1) { [0]=> string(1) "3" } } [7]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [8]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [9]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [10]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [11]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } }

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}

Ausgabe von this->tagArray Array:array(0) {
}
 
Leere Arrays. Ergo geht er in die Schleife 'foreach ($this->tagArray as $i => $tag) { ' gar nie rein
Darum gibt auch ein var_dump() innerhalb dieser Schleife nix aus. Nur komisch dass du auf einen Fehler innerhalb dieser Schleife kommst, wenn PHP dort gar nie durchgeht

Rein Anhnad der Fehlermeldung und den kleinen Codeschnipseln und deren var_dump() ausgaben wiederspricht sich alles.

Ein Code-Abschnitt wird nie besucht.
Trotzdem gibts darin ein Offset-Fehler .
Das wiederspricht sich total.

Sorry, ich kann die da im Moment nicht weiterhelfen.

Nachtrag:
Von was stammt diese abgehkte Ausgabe (Der Anfang fehlt)
Code:
        string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [1]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [2]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [3]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [4]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [5]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [6]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=3]" ["attributes"]=> array(1) { [0]=> string(1) "3" } } [7]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [8]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [9]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } [10]=> array(4) { ["name"]=> string(10) "definition" ["closing"]=> bool(false) ["source"]=> string(14) "[definition=1]" ["attributes"]=> array(1) { [0]=> string(1) "1" } } [11]=> array(3) { ["name"]=> string(10) "definition" ["closing"]=> bool(true) ["source"]=> string(13) "[/definition]" } }
 
Das muss aus dieser Datei stammen,den diese wird durch die andere mit benutzt.
Code:
<?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 ist das was ich auch schon erwähnt habe in der einen wird von array gesprochen und in dieser string.
 
Das habe ich noch nie gemacht ,das bekomme ich doch nicht hin.Gibt es keinen einfachenw eg so wie bei phpbb?

Ich hab es nun mal so versucht,aber das ergebniss , war eine weisse seite.
Code:
var_dump($this->textArray);    
    $this = textArray('$i');
var_dump($text);
    $i = -1;
        $this = textArray('$i');
 
PHP:
 $this = textArray('$i');

Ersten: Keine Ahnung warum du das aktuelle Objekt in dem der Code abläuft ersetzen willst. Macht keinen Sinn.

Zweitens: Musste es eher $this->textArray() heissen

Drittens: '$i' Bleibt ein String '$i'. Darin wird $i NIE durch den Wert von $i ersetzt.

Viertens: Falls textArray ein Array ist, dann solltest du mit [] zugreifen
PHP:
$this->textArray[$i];

Irgendwie gusselst du da glaub ziemlich Ziellos im Code herum und hoffst dabei über den Fehler (ev. ein Logikfehler im Programm) zu stolpern

Und zum Schluss.
Ich kann dir wirklich nicht helfen. ich habe da ein Puzzle mit 1000 Teilen. Davon sehe ich gerade 5 Teile. Darum kann ich dir nicht sagen ob ein Teil fehlt oder ob ein Teil vom falschen Puzzle ist.

Lerne Debuggen! Du kommst nicht umhin. Es gibt nun mal Fälle wo man nur noch im Code mit Werten herausfinden kann wo ein Fehler liegt. Ein Tutorial zum debuggen ohne Debugger hast du ja bereits verlinkt bekommen.

Ich für meinen Teil kann die nicht weiterhelfen. Und nein, ich will auch nicht dein Projekt debuggen.
 
Zurück