Fatal error: Call to a member function bouwScherm() on a non-object in /Applica

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul de Zwaan

Paul de Zwaan

07/06/2009 19:55:00
Quote Anchor link
Ik ben vandaag aan het uitproberen hoe het werkt met formuliertje oop en smarty.En zoals ik wel had verwacht wil het niet lukken :(

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
        
    }    
    
}

?>


Dit is de smarty die ik er bij gebruikt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
{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}


25 euro voor degene die het voor me oplost :)
 
PHP hulp

PHP hulp

18/11/2024 19:47:01
 
Jesper Diovo

Jesper Diovo

07/06/2009 20:08:00
Quote Anchor link
Van welke regel komt die foutmelding?

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
 
Paul de Zwaan

Paul de Zwaan

07/06/2009 20:21:00
Quote Anchor link
hij komt vanuit mijn controller:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();

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
 
Paul de Zwaan

Paul de Zwaan

08/06/2009 00:24:00
Quote Anchor link
ben er al achter nog bedankt
 

08/06/2009 00:58:00
Quote Anchor link
Vermeld dan ook even wat het was. Smarty vragen komen wel vaker langs.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.