Call to a member function Query() on a non-object in

Laut der Fehlermeldung versuchst du die Variable $sql aus der Klasse Transaction zu nutzen, deswegen wäre es schon gut wenn du Transaction posten würdest ;)
 
hier wäre die klasse transaction.php

PHP:
class Transaction {
		
		private $db;
		private $request;
		private $service;
		private $id;
		
		protected $providerDbTable = "zeiger";
		protected $transactionDbTable = "transaction";
		
		public function __construct($sql = NULL, $request) {
			
			$db = Database::getInstance();
			$this->db = $db;
			
			$this->request = $request;
			
			$this->chooseService();
			
			$this->saveTransaction();
			
			$this->execute();
		}
		
		private function getPriceForTransaction() {
			
			$stmt = $this->db->prepare("
				SELECT
				
// code entfernt

			");
			
			$stmt->bindValue(':user_id', $this->request->getUserId(), PDO::PARAM_INT);
			$stmt->bindValue(':land_id', (int)substr($this->request->getAgs(),0,2), PDO::PARAM_INT);
			
			$stmt->execute();
			$userEndPrice = $stmt->fetch(PDO::FETCH_ASSOC);
			
			return $userEndPrice['tarif'];
			
		}
		
		private function saveTransaction() {
			
			try
			{
				$this->db->beginTransaction();
				
				$stmt = $this->db->prepare("
					INSERT INTO

//code entfernt

				");
						
				$stmt->bindParam(':request_id', $this->request->getId());
				$stmt->bindParam(':created', date("c",time()));
				$stmt->bindParam(':service', $this->service);
				$stmt->bindParam(':price', $this->getPriceForTransaction());
				
				$stmt->execute();

				$this->id = $this->db->lastInsertId();
				
				$this->db->commit();
			}
			catch(PDOException $e)
			{
				$this->db->rollback();	
			}
		}
		
		private function chooseService() {
			$providerId = $this->request->getProviderId();
			
			$stmt = $this->db->prepare("
				SELECT

// code entfernt

			");
			
			$stmt->bindValue(':provider_id', (int)$providerId);
			$stmt->execute();
			$provider = $stmt->fetch(PDO::FETCH_ASSOC);

			$this->service = $provider['name'];
		}
		
		private function execute() {
			$serviceClass = $this->service."Service";
			
			if($this->service!="") {
				require_once(ZEM_ROOT.'/libs/services/'.$serviceClass.'.php');
				$service=new $serviceClass($this->sql, $this->id, $this->request);
			} else {
				//@TODO NO SERVICE
				$stmt = $this->db->prepare("
					UPDATE

//code entfernt

				");
				$stmt->bindParam(':timeout', 2);
				$stmt->bindParam(':zusatzinfo', 99);
				$stmt->bindParam(':ergebnis_status', '04');
				$stmt->bindValue(':id', $this->id);
				
				$stmt->execute();
			}
		}
		
	}

?>
 
Da findet sich auch schon der Fehler. Du hast in der Klasse Transactions keine Variable $sql definiert, versuchst aber auf diese zuzugreifen ;)
 
okay habe

private $sql;


und im construktor

$this->sql=$sql;

eingebaut...

jetzt ist der fehleraus der transaction.php weg

und habe noch folgende, jetzt wieder zurück in der ersten.

HTML:
<br />
<b>Notice</b>:  Undefined property:  Request::$getMassRequest in <b>/var/.....RService.php</b> on line <b>68</b><br />
<br />
<b>Notice</b>:  Undefined property:  Request::$getMassRequest in <b>/var/.....RService.php</b> on line <b>103</b><br />
<br />
<b>Fatal error</b>:  Call to a member function Query() on a non-object in <b>/var/.......RService.php</b> on line <b>111</b><br />
 
Undefined Property bedeutet, dass die Variable in der Klasse nicht definiert ist.
Call to a member function on a non-object bedeutet, dass bei $variable->funktion() $variable kein Objekt ist.

Mit dem was wir vorher geklärt haben solltest du jetzt dahinter kommen ;)
 
halt, habe noch gefunden, das "service" immer klein geschrieben wird, also im ersten fehler der transaction.php wo das SQL nicht vergeben war steht drüber das er den service haben möcht und dort habe ich mal "service" draus gemacht. qusi klein am anfang.

jetzt sind die genannten fehler weg und wir kommen wwieder zu trancaction.php:

HTML:
<b>Warning</b>:  Transaction::require_once(/var/.......Rservice.php) [<a href='function.Transaction-require-once'>function.Transaction-require-once</a>]: failed to open stream: No such file or directory in <b>/var/........./Transaction.php</b> on line <b>119</b><br />
<br />
<b>Fatal error</b>:  Transaction::require_once() [<a href='function.require'>function.require</a>]: Failed opening required '/var/........Rservice.php' (include_path='.:/usr/share/php:/usr/share/php/PEAR:/var/www/wid/htdocs/zem') in <b>/var/.........Transaction.php</b> on line <b>119</b><br />

also kommt der service an, aber die fehler hier sind komisch, die zeile 119 aus der transaction.php ist :

PHP:
if($this->service!="") {
				require_once(ZEM_ROOT.'/libs/services/'.$serviceClass.'.php'); // hier ist zeile 119
				$service=new $serviceClass($this->sql, $this->id, $this->request);
			} else { .......
 
Kleiner Tipp: Solche Fehlermeldungen kann man auch googeln bzw sich übersetzen lassen ;)

Die Datei die du includen willst existiert nicht.
 
Zurück