Fatal error: Call to a member function bouwScherm() on a non-object in /Applica
ik krijg de volgende foutmelding in de controller waarbij de fout ontstaat in de klasse
berichtdetailscherm. Al vraag ik mijn bericht op met de get word er netjes met smarty een bericht getoont plus daaronder de reactie mogelijkheid op het bericht. Zodra ik op submit druk beginnen de problemen. Het bericht word wel opgeslagen maar ik krijg gelijk de bovenstaande foutmelding.
Toch al druk ik dan 1 x op enter laad hij vervolgens het artikel wel? Hmmm Vreemd
Zou het kunnen dat er een conflict ontstaat tussen de post en de get. en hoe zou ik dit dan op moet lossen. ik ben er al bijna heel de dag mee bezig en nu zo'n beetje einde raad! Misschien dat er een ervaren programmeur aanwezig die mij kan vertellen hoe ik dit moet oplossen?
BerichtDetailScherm.class.php
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?php
/**
* $RCSfile: BerichtDetailScherm.class.php,v $
* Author: $Author: P.F.de Zwaan $
* Date: $Date: 2009/06/03 $
* @package Fishguppy Weblog Frontend
*/
/**
* BerichtDetailScherm
*/
class BerichtDetailScherm extends Scherm {
protected $m_aValidatieResultaat;
public function __construct() {
parent::__construct('Vangstbericht');
}
/**
* handlePagina handel tonen van artikel met bepaald id af
* @return object Scherm
*/
public function handlePagina() {
// standaard wordt dit scherm getoond
$oResult = $this;
$this->m_aData['actie'] = '';
$this->m_aData['melding'] = '';
// als POST-request, dan aanpassen of nieuw
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$oValidator = InputValidator::instantiate();
$this->m_aData['actie'] = 'opslaan';
$this->m_aData['opgeslagen'] = false;
$oValidator->addValidation('id', InputValidator::SCOPE_POST, InputValidator::TYPE_INT, TRUE);
$oValidator->addValidation('naam', InputValidator::SCOPE_POST, InputValidator::TYPE_ALPHATEXT, true);
$oValidator->addValidation('email', InputValidator::SCOPE_POST, InputValidator::TYPE_EMAIL, false);
$oValidator->addValidation('reactie', InputValidator::SCOPE_POST, InputValidator::TYPE_ALPHATEXT, true);
$oResult = $oValidator->ValidateAll();
$this->m_aValidatieResultaat = $oValidator->getResult();
if ($oResult == InputValidator::RESULT_OK) {
$oReacties = new Reacties();
$nID=$oValidator->getValue('id', InputValidator::SCOPE_POST);
$oReacties->setId($nID);
$sNaam=$oValidator->getValue('naam', InputValidator::SCOPE_POST);
$oReacties->setNaam($sNaam);
$sEmail=$oValidator->getValue('email', InputValidator::SCOPE_POST);
$oReacties->setEmail($sEmail);
$sReactie=$oValidator->getValue('reactie', InputValidator::SCOPE_POST);
$oReacties->setReactie($sReactie);
$ip=Reacties::bepaalIP();
$oReacties->setIp($ip);
if ($oReacties->slaOp()){
$this->m_aData['opgeslagen'] = true;
}
}
return $oResult;
}
try {
$oValidator = InputValidator::instantiate();
$nResult = $oValidator->validate('id', InputValidator::SCOPE_ANY, InputValidator::TYPE_INT, true);
if (($nResult == InputValidator::RESULT_OK) || ($nResult == InputValidator::RESULT_CONVERTABLE)) {
$nId = intVal($oValidator->getValue('id', InputValidator::SCOPE_ANY));
$oArtikel = new Artikel();
if ($oArtikel->laadGegevens($nId)) {
$this->m_aData['artikel'] = $oArtikel->getGegevens();
$this->m_sTitel = $oArtikel->getTitel();
$oReacties=new ReactiesLijst();
$oReacties->genereerReactiesBerichten($nId);
$this->m_aData['reacties'] = $oReacties->getReactiesBerichtenAlsArray();
} else {
throw new IllegalValueException('bericht/artikel met id '.$nId.' niet geladen');
}
} else {
throw new IllegalValueException('fout artikel id');
}
} catch (WeblogException $e) {
$e->log();
// terug naar laatste pagina
if (Registry::exists('Gebruiker')) {
$oGebruiker = Registry::get('Gebruiker');
$oResult = SchermFactory::genereerSchermObject($oGebruiker->getLaatstePagina());
} else {
$oResult = SchermFactory::genereerSchermObject(SchermFactory::HOMEPAGE);
}
}
return $oResult;
}
/**
* bouwScherm verzamelt de gegevens voor het importscherm
*/
public function bouwScherm() {
$this->m_sTemplate = 'berichtdetail.tpl';
// initialiseer alle formuliervelden
$this->m_aData['velden'] = array();
$this->m_aData['velden']['id'] = array('tekst' => 'id', 'waarde' => '', 'resultaat' => true, 'verplicht' => true);
$this->m_aData['velden']['naam'] = array('tekst' => 'naam', 'waarde' => '', 'resultaat' => true, 'verplicht' => true);
$this->m_aData['velden']['email'] = array('tekst' => 'email', 'waarde' => '', 'resultaat' => true, 'verplicht' => false);
$this->m_aData['velden']['reactie'] = array('tekst' => 'reactie', 'waarde' => '', 'resultaat' => true, 'verplicht' => true);
if ($this->m_aData['actie'] == 'opslaan') {
if ($this->m_aData['opgeslagen']) {
// geef melding dat bericht is verstuurd
$this->m_aData['melding'] = 'De reactie is toegevoegd.';
} else {
// fouten in gegevens, toon formulier opnieuw met ingevulde gegevens
$this->m_aData['melding'] = 'Niet alle gegevens zijn correct ingevuld.';
}
}
$oValidator = InputValidator::instantiate();
// geef aan welke velden er niet correct waren
$aValidatieResultaat = $this->m_aValidatieResultaat;
$this->m_aData['velden']['id']['waarde'] = $oValidator->getValue('id', InputValidator::SCOPE_POST);
$this->m_aData['velden']['id']['resultaat'] = (($aValidatieResultaat['id']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['id']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$this->m_aData['velden']['naam']['waarde'] = $oValidator->getValue('naam', InputValidator::SCOPE_POST);
$this->m_aData['velden']['naam']['resultaat'] = (($aValidatieResultaat['naam']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['naam']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$this->m_aData['velden']['email']['waarde'] = $oValidator->getValue('email', InputValidator::SCOPE_POST);
$this->m_aData['velden']['email']['resultaat'] =(($aValidatieResultaat['email']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['email']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$this->m_aData['velden']['reactie']['waarde'] = $oValidator->getValue('reactie', InputValidator::SCOPE_POST);
$this->m_aData['velden']['reactie']['resultaat'] = (($aValidatieResultaat['reactie']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['reactie']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$oCatLijst = new CategorieLijst();
try{
$oCatLijst->genereer();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['categories'] = $oCatLijst->getGegevensAlsArray();
$this->m_aData['catlink'] = SchermFactory::genereerLink(SchermFactory::CATEGORIE_PAGINA);
$oArchiefLijst= new Artikellijst();
try{
$oArchiefLijst->genereerArchiefLijst();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['archieven'] = $oArchiefLijst->getGegevensVoorAchievenArray();
$this->m_aData['archieflink'] = SchermFactory::genereerLink(SchermFactory::ARCHIEF_PAGINA);
$oTitelsLijst=new ArtikelLijst();
try{
$oTitelsLijst->genereerLaatsteTitelsLijst();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['laatstetitels']= $oTitelsLijst->getLaatsteTitelsAlsArray();
$this->m_aData['titelslink'] = SchermFactory::genereerLink(SchermFactory::BERICHT_DETAIL);
$oLaatsteReactie=new ReactiesLijst();
try{
$oLaatsteReactie->genereerLaatsteReacties();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['laatstereactie']=$oLaatsteReactie->getReactiesBerichtenAlsArray();
$this->m_aData['hoofdpaginalink'] = SchermFactory::genereerLink(SchermFactory::BERICHT_DETAIL);
return true;
}
}
?>
/**
* $RCSfile: BerichtDetailScherm.class.php,v $
* Author: $Author: P.F.de Zwaan $
* Date: $Date: 2009/06/03 $
* @package Fishguppy Weblog Frontend
*/
/**
* BerichtDetailScherm
*/
class BerichtDetailScherm extends Scherm {
protected $m_aValidatieResultaat;
public function __construct() {
parent::__construct('Vangstbericht');
}
/**
* handlePagina handel tonen van artikel met bepaald id af
* @return object Scherm
*/
public function handlePagina() {
// standaard wordt dit scherm getoond
$oResult = $this;
$this->m_aData['actie'] = '';
$this->m_aData['melding'] = '';
// als POST-request, dan aanpassen of nieuw
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$oValidator = InputValidator::instantiate();
$this->m_aData['actie'] = 'opslaan';
$this->m_aData['opgeslagen'] = false;
$oValidator->addValidation('id', InputValidator::SCOPE_POST, InputValidator::TYPE_INT, TRUE);
$oValidator->addValidation('naam', InputValidator::SCOPE_POST, InputValidator::TYPE_ALPHATEXT, true);
$oValidator->addValidation('email', InputValidator::SCOPE_POST, InputValidator::TYPE_EMAIL, false);
$oValidator->addValidation('reactie', InputValidator::SCOPE_POST, InputValidator::TYPE_ALPHATEXT, true);
$oResult = $oValidator->ValidateAll();
$this->m_aValidatieResultaat = $oValidator->getResult();
if ($oResult == InputValidator::RESULT_OK) {
$oReacties = new Reacties();
$nID=$oValidator->getValue('id', InputValidator::SCOPE_POST);
$oReacties->setId($nID);
$sNaam=$oValidator->getValue('naam', InputValidator::SCOPE_POST);
$oReacties->setNaam($sNaam);
$sEmail=$oValidator->getValue('email', InputValidator::SCOPE_POST);
$oReacties->setEmail($sEmail);
$sReactie=$oValidator->getValue('reactie', InputValidator::SCOPE_POST);
$oReacties->setReactie($sReactie);
$ip=Reacties::bepaalIP();
$oReacties->setIp($ip);
if ($oReacties->slaOp()){
$this->m_aData['opgeslagen'] = true;
}
}
return $oResult;
}
try {
$oValidator = InputValidator::instantiate();
$nResult = $oValidator->validate('id', InputValidator::SCOPE_ANY, InputValidator::TYPE_INT, true);
if (($nResult == InputValidator::RESULT_OK) || ($nResult == InputValidator::RESULT_CONVERTABLE)) {
$nId = intVal($oValidator->getValue('id', InputValidator::SCOPE_ANY));
$oArtikel = new Artikel();
if ($oArtikel->laadGegevens($nId)) {
$this->m_aData['artikel'] = $oArtikel->getGegevens();
$this->m_sTitel = $oArtikel->getTitel();
$oReacties=new ReactiesLijst();
$oReacties->genereerReactiesBerichten($nId);
$this->m_aData['reacties'] = $oReacties->getReactiesBerichtenAlsArray();
} else {
throw new IllegalValueException('bericht/artikel met id '.$nId.' niet geladen');
}
} else {
throw new IllegalValueException('fout artikel id');
}
} catch (WeblogException $e) {
$e->log();
// terug naar laatste pagina
if (Registry::exists('Gebruiker')) {
$oGebruiker = Registry::get('Gebruiker');
$oResult = SchermFactory::genereerSchermObject($oGebruiker->getLaatstePagina());
} else {
$oResult = SchermFactory::genereerSchermObject(SchermFactory::HOMEPAGE);
}
}
return $oResult;
}
/**
* bouwScherm verzamelt de gegevens voor het importscherm
*/
public function bouwScherm() {
$this->m_sTemplate = 'berichtdetail.tpl';
// initialiseer alle formuliervelden
$this->m_aData['velden'] = array();
$this->m_aData['velden']['id'] = array('tekst' => 'id', 'waarde' => '', 'resultaat' => true, 'verplicht' => true);
$this->m_aData['velden']['naam'] = array('tekst' => 'naam', 'waarde' => '', 'resultaat' => true, 'verplicht' => true);
$this->m_aData['velden']['email'] = array('tekst' => 'email', 'waarde' => '', 'resultaat' => true, 'verplicht' => false);
$this->m_aData['velden']['reactie'] = array('tekst' => 'reactie', 'waarde' => '', 'resultaat' => true, 'verplicht' => true);
if ($this->m_aData['actie'] == 'opslaan') {
if ($this->m_aData['opgeslagen']) {
// geef melding dat bericht is verstuurd
$this->m_aData['melding'] = 'De reactie is toegevoegd.';
} else {
// fouten in gegevens, toon formulier opnieuw met ingevulde gegevens
$this->m_aData['melding'] = 'Niet alle gegevens zijn correct ingevuld.';
}
}
$oValidator = InputValidator::instantiate();
// geef aan welke velden er niet correct waren
$aValidatieResultaat = $this->m_aValidatieResultaat;
$this->m_aData['velden']['id']['waarde'] = $oValidator->getValue('id', InputValidator::SCOPE_POST);
$this->m_aData['velden']['id']['resultaat'] = (($aValidatieResultaat['id']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['id']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$this->m_aData['velden']['naam']['waarde'] = $oValidator->getValue('naam', InputValidator::SCOPE_POST);
$this->m_aData['velden']['naam']['resultaat'] = (($aValidatieResultaat['naam']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['naam']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$this->m_aData['velden']['email']['waarde'] = $oValidator->getValue('email', InputValidator::SCOPE_POST);
$this->m_aData['velden']['email']['resultaat'] =(($aValidatieResultaat['email']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['email']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$this->m_aData['velden']['reactie']['waarde'] = $oValidator->getValue('reactie', InputValidator::SCOPE_POST);
$this->m_aData['velden']['reactie']['resultaat'] = (($aValidatieResultaat['reactie']['result'] == InputValidator::RESULT_OK) ||($aValidatieResultaat['reactie']['result'] == InputValidator::RESULT_CONVERTABLE)) ? true : false;
$oCatLijst = new CategorieLijst();
try{
$oCatLijst->genereer();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['categories'] = $oCatLijst->getGegevensAlsArray();
$this->m_aData['catlink'] = SchermFactory::genereerLink(SchermFactory::CATEGORIE_PAGINA);
$oArchiefLijst= new Artikellijst();
try{
$oArchiefLijst->genereerArchiefLijst();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['archieven'] = $oArchiefLijst->getGegevensVoorAchievenArray();
$this->m_aData['archieflink'] = SchermFactory::genereerLink(SchermFactory::ARCHIEF_PAGINA);
$oTitelsLijst=new ArtikelLijst();
try{
$oTitelsLijst->genereerLaatsteTitelsLijst();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['laatstetitels']= $oTitelsLijst->getLaatsteTitelsAlsArray();
$this->m_aData['titelslink'] = SchermFactory::genereerLink(SchermFactory::BERICHT_DETAIL);
$oLaatsteReactie=new ReactiesLijst();
try{
$oLaatsteReactie->genereerLaatsteReacties();
}
catch (weblogexception $e){
$e->log();
}
$this->m_aData['laatstereactie']=$oLaatsteReactie->getReactiesBerichtenAlsArray();
$this->m_aData['hoofdpaginalink'] = SchermFactory::genereerLink(SchermFactory::BERICHT_DETAIL);
return true;
}
}
?>
Dit is de smarty die ik er bij gebruikt:
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
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
{if (isset($aData.melding) && strlen($aData.melding) > 0) }
<div class="error">{$aData.melding}</div>
{/if}
{if !(isset($aData.opgeslagen) && ($aData.opgeslagen)) }
{if isset($aData.velden)}
<form method="POST" action="{$aData.hoofdpaginalink}">
<table><tr><td>
<input type="hidden" name="id" value="{$aData.artikel.id}"></td></tr><tr>
<td>
{if $aData.velden.naam.resultaat}
{assign var="sClass" value="normaal"}
{else}
{assign var="sClass" value="error"}
{/if}
<span class="{$sClass}"> <strong>Naam(Verplicht):</span></strong></td></tr><tr><td> <input type="text" name="naam" value="{$aData.velden.naam.waarde}" size="40" maxlength="25">
</td></tr><tr>
<td>
<strong>Email:(Niet getoond bij de reactie)</strong>
</td></tr><tr><td>
<input type="text" name="email" value="{$aData.velden.email.waarde}" size="40" maxlength="50">
</td></tr><tr>
<td valign="top">
{if $aData.velden.reactie.resultaat}
{assign var="sClass" value="normaal"}
{else}
{assign var="sClass" value="error"}
{/if}
<span class="{$sClass}"><strong>Reactie(Verplicht):</strong></span>
</td></tr><tr><td>
<textarea name="reactie" rows="15" cols="45"></textarea>
</td></tr><tr>
<td><input type="submit" name="submit" value="verzend"></td>
</tr></table>
</form>
{/if}{/if}
<div class="error">{$aData.melding}</div>
{/if}
{if !(isset($aData.opgeslagen) && ($aData.opgeslagen)) }
{if isset($aData.velden)}
<form method="POST" action="{$aData.hoofdpaginalink}">
<table><tr><td>
<input type="hidden" name="id" value="{$aData.artikel.id}"></td></tr><tr>
<td>
{if $aData.velden.naam.resultaat}
{assign var="sClass" value="normaal"}
{else}
{assign var="sClass" value="error"}
{/if}
<span class="{$sClass}"> <strong>Naam(Verplicht):</span></strong></td></tr><tr><td> <input type="text" name="naam" value="{$aData.velden.naam.waarde}" size="40" maxlength="25">
</td></tr><tr>
<td>
<strong>Email:(Niet getoond bij de reactie)</strong>
</td></tr><tr><td>
<input type="text" name="email" value="{$aData.velden.email.waarde}" size="40" maxlength="50">
</td></tr><tr>
<td valign="top">
{if $aData.velden.reactie.resultaat}
{assign var="sClass" value="normaal"}
{else}
{assign var="sClass" value="error"}
{/if}
<span class="{$sClass}"><strong>Reactie(Verplicht):</strong></span>
</td></tr><tr><td>
<textarea name="reactie" rows="15" cols="45"></textarea>
</td></tr><tr>
<td><input type="submit" name="submit" value="verzend"></td>
</tr></table>
</form>
{/if}{/if}
25 euro voor degene die het voor me oplost :)
Edit: het is volgens mij helemaal geen moeilijke error. Het is alleen dat je even moet weten waar 'ie vandaan komt.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if (is_object($oScherm)) {
// handel eventuele input af
$oScherm = $oScherm->handlePagina();
// bouw het scherm met de juiste informatie en toon het
$oScherm->bouwScherm();
$oScherm->toon();
// handel eventuele input af
$oScherm = $oScherm->handlePagina();
// bouw het scherm met de juiste informatie en toon het
$oScherm->bouwScherm();
$oScherm->toon();
regel $oScherm->bouwscherm(); dus bouwscherm in Berichtdetailscherm.
Ik zou het echt heel fijn vinden om de oplossing te weten zodat ik verder kan met andere formuliertjes!
Dit is de foutmelding:
Fatal error: Call to a member function bouwScherm() on a non-object in /Applications/MAMP/htdocs/masterclass_php/test4000/eindopdracht/weblog/classes/Controller.class.php on line 71
Alvast bedankt!!!
Gewijzigd op 01/01/1970 01:00:00 door Paul de Zwaan
ben er al achter nog bedankt
Vermeld dan ook even wat het was. Smarty vragen komen wel vaker langs.