Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 2448
Hei,
holder på å prøve å lære meg php oop, og det har gått ok greit. Men har støtt på et problem jeg har sett meg blind på. Håper noen codegenier her inne kunne se over for å finne feilen som gir:
"faen... firma existerer ikke tydeligvis...
Firmanavn:
Notice: Undefined variable: cdata in /Applications/XAMPP/xamppfiles/htdocs/utvikling/cprofile.php on line 22

Notice: Trying to get property of non-object in /Applications/XAMPP/xamppfiles/htdocs/utvikling/cprofile.php on line 22
Firma id:
Notice: Undefined variable: cdata in /Applications/XAMPP/xamppfiles/htdocs/utvikling/cprofile.php on line 23

Notice: Trying to get property of non-object in /Applications/XAMPP/xamppfiles/htdocs/utvikling/cprofile.php on line 23

"

Har echoet ut for å finne ut hvor det failer, og har markert det i koden.
Her er filene mine:

cprofile.php

Kode

<?php
require_once 'core/init.php';


if(!$cname = Input::get('company')) {
	//Redirect::to('index.php');
echo "$cname er best";

} else {
	$company = new Company($cname);
	if(!$company->existsCompany()) {
		echo 'faen... firma existerer ikke tydeligvis...';
		// DET ER TYDELIGVIS HER DET FAILER... NOE ER GALT MED ELSE STATMENTET MITT.... :(
		//Redirect::to(404);
	} else {
		$cdata = $company->dataCompany();
	}


?>

	<h3>Firmanavn:<?php echo escape($cdata->cname); ?></h3>
	<p>Firma id: <?php echo escape($cdata->cid); ?></p>
	<?php
}
Company.php

Kode

<?php
class Company {
	private $_db,
			$_cdata;
			


	public function updateCompany($fields = array(), $id = null) {

		if(!$id && $this->isLoggedIn()) {
			$id = $this->data()->id;
		}


		if(!$this->_db->update('companies', $id, $fields)) {
			throw new Exception('There was a problem updating the company.');
		}
	}
	

	public function createCompany($fields = array()) {
		if(!$this->_db->insert('companies', $fields)) {
			throw new Exception('There was a problem creating a new company.');

		}
	}

	public function findCompany($company = null) {
		if($company) {
			$field = (is_numeric($company)) ? 'id' : 'username';
			$data = $this->_db->get('companies', array($field, "=", $company));

			if($data->count()) {
				$this->_data = $data->first();
				return true;
			}
		}
		return false;
	}

	
	public function existsCompany() {
		return (!empty($this->_data)) ? true : false;

	}



	public function dataCompany() {
		return $this->_data;
	}

}
Tror det skal være all koden det er problem i, om jeg tar feil så kan jeg legge ut det som trengs. Databasen har feltene: cid, cname, cjoined

Håper noen her inne kan se over. tusen takk

Tablenavnet er forøvrig: companies

Fant noen feil selv, her er oppdatert Company.php (fremdles samme feilmelding)

Kode

<?php
class Company {
	private $_db,
			$_cdata;
			


	public function updateCompany($fields = array(), $id = null) {

		
		if(!$this->_db->update('companies', $id, $fields)) {
			throw new Exception('There was a problem updating the company.');
		}
	}
	

	public function createCompany($fields = array()) {
		if(!$this->_db->insert('companies', $fields)) {
			throw new Exception('There was a problem creating a new company.');

		}
	}

	public function findCompany($company = null) {
		if($company) {
			$field = (is_numeric($company)) ? 'id' : 'cname';
			$cdata = $this->_db->get('companies', array($field, "=", $company));

			if($cdata->count()) {
				$this->_cdata = $cdata->first();
				return true;
			}
		}
		return false;
	}

	
	public function existsCompany() {
		return (!empty($this->_cdata)) ? true : false;

	}



	public function dataCompany() {
		return $this->_cdata;
	}

}
Sist endret av SecondLife; 20. juni 2014 kl. 15:29. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Den første if'en din med Input::get tror jeg ikke skal ha !, eller så har du forveksla vilkårene der. Slik det står nå: hvis kallet IKKE returnerer $cname så skriver du ut $cname...
Hvor får $_cdata verdiene sine fra?

I Company.php så brukes funksjonen dataCompany() for å returnere data som er lagret i $_cdata, men så vidt jeg ser så blir aldri data lagret til den variabelen - bortsett fra i findCompany: $this->_cdata = $cdata->first();
Men denne funksjonen kjører så vidt jeg ser aldri.
$cdata blir kun satt om "else" treffer på begge if-setningene dine. Det som skjer er at noen av de ikke treffer og nederst har du:

Kode

<h3>Firmanavn:<?php echo escape($cdata->cname); ?></h3>
som forventer at $cdata er satt.
▼ ... over en uke senere ... ▼
Takk alle sammen! Har tuklet med dette en stund men ikke løst problemet. Har kommet frem til at manglende constructor class i company.php er feilen. For når jeg da i det første else-statementet i cprofile.php skriver " $company = new Company($cname); " så krever det en constructor før jeg kan bruke excistsCompany. TROR jeg, slik jeg har forstått det, men jeg er noob så. Problemet mitt er at jeg ikke vet hvordan jeg skal få til en fungerene __constructor. Under har jeg oppdatert kode, og en construktor class som fungerer for user.php som er tilsvarende company.php..

Håper det jeg skriver ikke er bare vrøvl, if so, please tell me.

cprofile.php

Kode

<?php require_once 'core/init.php';

if(!$cname = Input::get('company')) {
	// Redirect::to('index.php');
	echo 'Intet firma valgt';
	
} else {
	$company = new Company($cname);
	echo var_dump($company). "<br>";
	if(!$company->exists()) {
		//Redirect::to(404);
		echo 'Firma existerer ikke';

	} else {
		$cdata = $company->data();
	}

	?>

	<h3><?php echo escape($cdata->cname); ?></h3>
	<p>Company id: <?php echo escape($cdata->cid); ?></p>
	<p>Joined: <?php echo escape($cdata->cjoined); ?></p>
	<?php

}

company.php

Kode

<?php
class Company {
	private $_db,
			$_data;


	public function __construct($company = null) {
		$this->_db = DB::getInstance();
			$this->find($company);
		
	}


			
	public function update($fields = array(), $id = null) {

			$id = $this->data()->id;
	
		if(!$this->_db->updateCompany('companies', $id, $fields)) {
			throw new Exception('There was a problem updating.');
		}
	}
	

	public function create($fields = array()) {
		if(!$this->_db->insert('companies', $fields)) {
			throw new Exception('There was a problem creating an account.');

		}
	}

	public function find($company = null) {
		if($company) {
			$field = (is_numeric($company)) ? 'cid' : 'cname';
			$cdata = $this->_db->get('companies', array($field, "=", $company));

			if($cdata->count()) {
				$this->_cdata = $cdata->first();
				return true;
			}
		}
		return false;
	}

	



	public function hasPermission($key) {
		$group = $this->_db->get('groups', array('id', '=', $this->data()->group));
			

		if($group->count()) {
			$permissions = json_decode($group->first()->permissions, true);
			
			if($permissions[$key] == true) {
				return true;

			}

		}	
		return false;		
	}	



	public function exists() {
		return (!empty($this->_cdata)) ? true : false;

	}

	

	public function data() {
		return $this->_cdata;
	}

	

}

Her er constructorclassen til user.php jeg må lage en tilsvarende, men ment for company.php, og da trenger jeg ikke dette med session og cookie, men jeg skjønner ikke helt hva som skjer i de forskjellige stedene i constructoren...

Kode

public function __construct($user = null) {
		$this->_db = DB::getInstance();

		$this->_sessionName = Config::get('session/session_name');
		$this->_cookieName = Config::get('remember/cookie_name');

		if(!$user) {
			if(Session::exists($this->_sessionName)) {
				$user = Session::get($this->_sessionName);
				
				if($this->find($user)) {
					$this->_isLoggedIn = true;

				} else {
				// process logout	
				}

			}
		} else {
			$this->find($user);
		}
	}
Håper dere forstår hva jeg mener. Personen som greier å leie hånden min gjennom dette slik at jeg kommer meg vidre, kan få 100 kroner overført til sin bankkonto eller 100 kr sendt til en selvvalgt veldedig organisasjon! (Håper dette ikke bryter mot reglene)
Hjelp en noob i å komme vidre med prosjektet sitt! :P tusen takk :bergenser:


BTW: var_dumpen gir følgende (jeg forstår det ikke helt) object(Company)#2 (2) { ["_db":"Company":private]=> object(DB)#3 (5) { ["_pdo":"DB":private]=> object(PDO)#4 (0) { } ["_query":"DB":private]=> object(PDOStatement)#5 (1) { ["queryString"]=> string(39) "SELECT * FROM companies WHERE cname = ?" } ["_error":"DB":private]=> bool(false) ["_results":"DB":private]=> array(0) { } ["_count":"DB":private]=> int(0) } ["_data":"Company":private]=> NULL }
Sist endret av Frenor; 29. juli 2014 kl. 00:29.