Hallo,

Ik krijg de volgende foutmelding; "Fatal error: Call to a member function getEmail() on a non-object in"

Als ik deze met commentaar uitzet krijg ik dezelfde fout voor homepage, de eerste gaan dus wel goed...

Ik heb alles wel 100 keer nageken en voor email en homepage heb ik precies hetzelfde, kom er zelf dus niet meer uit :S hoop dat iemand me hier verder kan helpen..

onderstaand de oproepcode en classe

Ze worden aangeroepen in het volgende stukje code:


<?php
------------------------------------------------------------------------------
for ($i=0; $i<$aantalBerichten; $i++)
{
	$bericht	=	$berichten[$i];

	$id		=	$bericht->getId();
	$naam		=	$bericht->getNaam();
	$datum		=	$bericht->getDatum();
	$tijd		=	$bericht->getTijd();
	$bericht	=	$bericht->getBericht();
	$email		=	$bericht->getEmail();
	$homepage	=	$bericht->getHomepage();
rest....

-------------------------------------------------------------------------------



De classe die hierbij hoort is;
-----------------------------------------------------------------------
class Bericht extends basic
{
	private $naam;
	private $datum;
	private $tijd;
	private $bericht;
	private $email;
	private	$homepage;

	function getNaam()
	{
		return $this->naam;
	}

	function getDatum()
	{
		return $this->datum;
	}
	
	function getTijd()
	{
		return $this->tijd;
	}

	function getBericht()
	{
		return $this->bericht;
	}

	function getEmail()
	{
		return $this->email;
	}

	function getHomepage()
	{
		return $this->homepage;
	}

	function setNaam($naam)
	{
		$this->naam = $naam;
	}

	function setDatum($datum)
	{
		$this->datum = $datum;
	}

	function setTijd($tijd)
	{
		$this->tijd = $tijd;
	}

	function setBericht($bericht)
	{
		$this->bericht = $bericht;
	}

	function setEmail($email)
	{
		$this->email = $email;
	}

	function setHomepage($homepage)
	{
		$this->homepage = $homepage;
	}

	function select($id)
	{
		global $db;
		$query	=	"SELECT * FROM ".TABLE_GASTENBOEK." WHERE id=".$id;
		$result =	$db->query($query);

		if ($db->num_rows($result) == 1)
		{
			$row = $db->fetch_object($result);
			$this->id = $row->id; 
			$this->naam = $row->naam;
			$this->datum = $row->datum;
			$this->tijd = $row->tijd;
			$this->bericht = $row->bericht;
			$this->email = $row->email;
			$this->homepage = $row->homepage;
			return true;
		}else{
			return false;
		}
	}
?>

-----------------------------------------------------------------------------------

[modedit]Let even op je code tags[/code]
Vertaal de foutcode eens.

Call to a member function .. on a non object

Oftewel: je roept een functie aan op een object dat niet bestaat of geen object is.
Hoi Justin,

Ja zoiets dacht ik al, had google ook al bekeken...
Weet jij waar de fout zit dan?

Ik snap namelijk niet waarom hij bij de andere wel goed gaat en alleen bij email en homepage niet, terwijl deze op dezefde manier gemaakt zijn :S
Dat vind ik zo vaag....

Hoop dat jij mij de fout kunt vertellen..
Groetjes Coen
Ik denk dat het niet ligt aan de functie op zich, maar met wat je er vervolgens mee doet, echo je het resultaat o.i.d.?
Ja, dit zijn berichten voor een GB

dit is de rest van de code;


for ($i=0; $i<$aantalBerichten; $i++)
{
	$bericht	=	$berichten[$i];

	$id			=	$bericht->getId();
	$naam		=	$bericht->getNaam();
	$datum		=	$bericht->getDatum();
	$tijd		=	$bericht->getTijd();
	$bericht	=	$bericht->getBericht();
	$email		=	$bericht->getEmail();
	$homepage	=	$bericht->getHomepage();


	$gegevens	.=	"<div class=\"comment-post\" id=\"comment-".$id."\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t<div class=\"avatar\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t<img alt='' src='uploads/person.png' class='avatar avatar-64' height='64' width='64' />\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t</div>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t<div class=\"comment-area comment-area-right visitor\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t<div class=\"comment-area-top\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t<div class=\"comment-area-bottom\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t<p class=\"comment-postmeta\"><strong><cite>".$naam."</cite></strong> zei op ".$datum." om ".$tijd."</p>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t<div class=\"comment-text\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t\t".$bericht." ".$email." ".$homepage."\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"comment-remix-meta\">\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"replyto\" onclick=\"replyto('".$id."','".$naam."'); return false;\">Antwoord</a>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t\t\t&nbsp;-&nbsp;\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"quote\" onclick=\"quote('".$id."','".$naam."','".$bericht."'); return false;\">Quote</a>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t\t</div>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t\t</div>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t\t</div>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t\t</div>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t\t</div>\n";
		$gegevens	.=	"\t\t\t\t\t\t\t</div>\n\n";
	
}

$html	=	str_replace("<!-- berichten -->", $gegevens, $html);
$html	=	str_replace("<!-- aantalBerichten -->", $aantalBerichten, $html);

echo $html;

sow dan, jij houdt van tabs in je HTML :P

Overigens is je code de droom voor XSS.

Hoe dan ook; de fout kan aan 2 dingen liggen:
- Je array is kleiner dan $aantalBerichten, waardoor $berichten[$i] niet bestaat en NULL teruggeeft.
- Je array bevat op $i geen object.

Het is dan ook handig als je laat zien hoe je aan de $berichten-array komt en hoe je aan $aantalBerichten komt.

Optioneel kan je dit bovenin je loop zetten:

<?php
for(...) {
  if(!array_key_exists($i, $berichten)
  || !is_object($berichten[$i])
  || !($berichten[$i] instanceof Bericht)
    continue;
  // continue-keyword zorgt ervoor dat de for-loop 
  //direct naar de volgende gaat zonder de code eronder uit te voeren.
  
  // rest van je $berichten[$i] code hier.
}
?>
@Coen:
<?php
function tab($n = 1, $char = "\t") {
return str_repeat($char, $n);
}
?>
:D

Reageren