Fatal error: Call to a member function getEmail() on a non-object in
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?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;
}
}
?>
------------------------------------------------------------------------------
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;
}
}
?>
-----------------------------------------------------------------------------------
Let even op je code tags
Gewijzigd op 12/11/2010 10:43:37 door Justin S
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.
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.?
dit is de rest van de code;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 - \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;
{
$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 - \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;
Gewijzigd op 12/11/2010 11:14:07 door Coen Egberink
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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.
}
?>
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.
}
?>
Gewijzigd op 16/11/2010 21:29:08 door toby hinloopen