Probleme mit SQL in PHP?

Shorty1968

Erfahrenes Mitglied
Hallo ich versuche eine erweiterung für mein wBB$ zu schreiben und habe mir dafür eine .php erstellt aber diese erzeugt Folgenden Fehler.
Code:
Fatal error: Class 'wbb\data\bot\autoreply\WCF' not found in /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/lib/data/bot/autoreply/BotAutoreplyRuleEditor.class.php on line 13
Der inhalt der PHP sieht so aus.
PHP:
<?php
namespace wbb\data\bot\autoreply;

use wbb\data\bot\autoreply\BotAutoreplyRule;

class BotAutoreplyRuleEditor extends BotAutoreplyRule {
	public static function create(array $data) {
		$sql = 'INSERT INTO wbb'.WCF_N.'_bot_autoreply_rule ($data) VALUES (?)';
		$statement = WCF::getDB()->prepareStatement($sql);
		$statement->execute(array(
	        $data
        )); 
		$ruleID = $statement->lastInsertId('wbb'.WCF_N.'_bot_autoreply_rule', 'ruleID');
		return new BotAutoreplyRuleEditor($ruleID);
	}
	
	public function update(array $data) {
		$sql = 'UPDATE wbb'.WCF_N.'_bot_autoreply_rule
			SET '.self::buildQueryString($data).'
			WHERE ruleID = ?';
		$statement = WCF::getDB()->prepareStatement($sql);
                $statement->execute(array(
	        $data
	        
        ));
		
		foreach ($data as $field => $value)
			$this->data[$field] = $value;
	}
	
	public function delete() {
               $sql = 'DELETE FROM wbb'.WCF_N.'_bot_autoreply_rule
	               WHERE ruleID = ?';
               $statement = WCF::getDB()->prepareStatement($sql);
               $statement->execute(array(
	       $ruleID
        ));
        
		$set = array();
		foreach ($data as $field => $value)
			$set[] = "`".$field."` = '".escapeString($value)."'";
		return implode(', ', $set);
	}
}
 
Und was ist deine Frage?
Mal abgesehen davon das die Fehlermeldung recht eindeutig ist, nähmlich das die aufgerufene Klasse nicht gefunden werden kann, ist zumindest für mich nicht klar ersichtlich wer hier was aufruft.
 
Die Klasse existiert ja auch nicht da kann sie nicht gefunden werden das ist es ja was mich verwundert.

Ich habe nun noch mal ein bischen rum getestet und nun bekomme ich.
Code:
Fatal error: Call to undefined function wbb\acp\form\BotAutoreplyRuleEditor() in /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/lib/acp/form/BotAutoreplyRuleAddForm.class.php on line 100
Zeile 100 sieht so aus.
PHP:
$this->rule = BotAutoreplyRuleEditor(array(
Der gesamte Teil sieht so aus.
PHP:
/**
	 * @see Form::save()
	 */
	public function save() {
		parent::save();
		
		$this->regexps = self::compileRegexps($this->search);
		
		$this->rule = BotAutoreplyRuleEditor(array(
		    'rule' => $this->BotAutoreplyRuleEditor,
			'title' => $this->title,
			'search' => $this->search,
			'regexps' => implode("\n", $this->regexps),
			'reply' => $this->reply,
			'userID' => $this->userID,
			'username' => $this->username,
			'trigger' => $this->trigger,
			'enableSmilies' => $this->enableSmilies,
			'enableHtml' => $this->enableHtml,
			'enableBBCodes' => $this->enableBBCodes,
			'showSignature' => $this->showSignature,
			'isActive' => 1
		));
		
		$this->saved();
		
		HeaderUtil::redirect(LinkHandler::getInstance()->getLink('BotAutoreplyOverview', array('application' => 'wbb', 'success' => 'deleted')));

		exit;
	}
wie kann ich das definieren?
 
Ich kenne mich ja noch nicht so gut aus,aber ich wüder nun mal Raten und sagen in diesem Teil und als Link in dem dazu gehörenden Template?
PHP:
 HeaderUtil::redirect(LinkHandler::getInstance()->getLink('BotAutoreplyOverview', array('application' => 'wbb', 'success' => 'deleted')));
Vielleicht ist das auch der Fehler und wegen meinem Unwissen ist sie noch nicht deklariert.
 
Ich geb mal pharisäerhaft zum Besten, dass evtl. nur das Schlüsselwort "new" in dieser Zeile fehlt:

PHP:
$this->rule = BotAutoreplyRuleEditor(array(

Also mal so abändern:

PHP:
$this->rule = new BotAutoreplyRuleEditor(array(
 
Danke das dachte ich auch und hatte es so versucht das ändert aber an der Fehlermeldung nichts,deshalb meine Frage hier den normal sollte es so gehen.
 
Kann mir bitte jemand sagen,was für ein Fehler mir diese Meldung sagen möchte?
Code:
Fatal error: Could not execute prepared statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ''' at line 2
Information:
id: 08f8876cd693ee8354cc90f9b5511a54d294521a
error message: Could not execute prepared statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ''' at line 2
error code: 42000
sql type: wcf\system\database\MySQLDatabase
sql error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ''' at line 2
sql error number: 42000
sql version: 5.1.72-2
sql query: SELECT	* FROM	wcf1_ WHERE	 = ?
sql query parameter 0:
file: /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/system/database/statement/PreparedStatement.class.php (100)
php version: 5.3.3-7+squeeze17
wcf version: 2.0.0 (Maelstrom)
date: Sun, 29 Dec 2013 09:18:40 +0000
request: /testforum/wbb4/acp/index.php/BotAutoreplyRuleAdd/?aebb30e6
referer: http://wbb-support.eu/testforum/wbb4/acp/index.php/BotAutoreplyRuleAdd/?aebb30e6
Stacktrace:
#0 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/data/DatabaseObject.class.php(65): wcf\system\database\statement\PreparedStatement->execute(Array)
#1 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/lib/data/bot/autoreply/BotAutoreplyRule.class.php(28): wcf\data\DatabaseObject->__construct(false)
#2 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/lib/acp/form/BotAutoreplyRuleAddForm.class.php(113): wbb\data\bot\autoreply\BotAutoreplyRule->__construct(Array)
#3 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/form/AbstractForm.class.php(63): wbb\acp\form\BotAutoreplyRuleAddForm->save()
#4 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/form/AbstractForm.class.php(114): wcf\form\AbstractForm->submit()
#5 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/page/AbstractPage.class.php(179): wcf\form\AbstractForm->readData()
#6 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/page/AbstractPage.class.php(86): wcf\page\AbstractPage->show()
#7 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/system/request/Request.class.php(58): wcf\page\AbstractPage->__run()
#8 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/wcf/lib/system/request/RequestHandler.class.php(106): wcf\system\request\Request->execute()
#9 /var/www/vhosts/wbb-support.eu/httpdocs/testforum/wbb4/acp/index.php(10): wcf\system\request\RequestHandler->handle('wbb', true)
#10 {main}
 
Es kann nicht sein, das sich die Fehlermeldung nicht ändert. Zwischen dem Aufrufen einer nicht existierenden (definierten) Funktion und dem erzeugen eines Objektes aus einer nicht existenten (oder auffindbaren) Klasse ist ein sehr großer Unterschied.

Fragen wir doch mal anders: Hast du einen Editor, der in Dateien suchen kann (z.B. Notepad++)? Dann such doch mal nach dem Definierer "BotAutoreplyRuleEditor" in allen Dateien unterhalb deiner "WBB-Installation".

Außerdem: Ist das dein Thread: http://www.woltlab.com/forum/index....n-der-php-Datei-für-das-WBB4-ändern/?pageNo=1

Wenn nicht, solltest du ihn mal lesen, vielleicht bringt es dich auf Ideen.
 
Kann mir bitte jemand sagen,was für ein Fehler mir diese Meldung sagen möchte?

Naja, das SQL ist falsch, das da "generiert" wird:

sql query: SELECT * FROM wcf1_ WHERE = ?

Da fehlt der Spaltenname in der WHERE-Clause. Dann fehlt evtl. auch der Tabellenname, den wcf1_ scheint mir ein Prefix zu sein.

Dann scheint auch das gebindetete Value nicht korrekt zu sein, denn 0 als Value sieht wie ein Initialwert aus.
 
Zurück