Fatal error: Call to a member function setError() on a non-object

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sebas V

Sebas V

21/09/2012 14:01:18
Quote Anchor link
Hallo,

Doelstelling van mijn code is:
- Validatie check of alle velden ingevuld zijn
- E-mail versturen naar admin
- Data toevoegen in Mysql database
- Gegevens tonen op Result.php

Ik heb problemen met mijn validatie en het tonen van gegevens op result.php

Iemand claimt mijn code gefixed te hebben, echter ik krijg de volgende foutmelding:
Fatal error: Call to a member function errors() on a non-object

Het gaat fout bij deze regel:
<span class="error">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $contact->errors('aanhef'); ?>
</span>

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
<?php
    
    require_once("php/db.php");                 /* Database Class */
    require_once('php/utils/is_email.php');     /* Email Validation Script */
    
    if(!empty($_POST['newcontact'])){
            $contact = new Contact();
    }
else{
            //header('Location: result.php');
    }
    
    /* Class Contact */
    class Contact
    {
            private $db;                        /* the database obj */
    
            //we have to init $errors array, as otherwise form will produce errors on missing array entry

            private $errors = array(            /* holds error messages */
                    'aanhef' => '',
                    'contactpersoon' => '',
                    'bedrijfsnaam' => '',
                    'email' => '',
                    'telefoon' => '',
                    'vraag1_antwoorden' => '',
                    'vraag2_antwoorden' => ''
            );
    
            private $has_errors;                /* number of errors in submitted form */
    
            public function __construct()
            {

                    $this->db = new DB();
                    if (!empty($_POST['newcontact'])) {
                            $this->processNewMessage();
                    }
            }

            public function processNewMessage()
            {

                    $aanhef             = $_POST['aanhef'];
                    $contactpersoon     = $_POST['contactpersoon'];
                    $bedrijfsnaam       = $_POST['bedrijfsnaam'];
                    $telefoon           = $_POST['telefoon'];
                    $email              = $_POST['email'];
                    $vraag1_antwoorden  = $_POST['vraag1_antwoorden'];
                    $vraag2_antwoorden  = $_POST['vraag2_antwoorden'];
    
                    /* Server Side Data Validation */
                    if (empty($aanhef)) {
                            $this->setError('aanhef', 'Vul uw aanhef in');
                    }

    
                    if (empty($contactpersoon)) {
                            $this->setError('contactpersoon', 'Vul uw contactpersoon in');
                    }

    
                    if (empty($bedrijfsnaam)) {
                            $this->setError('bedrijfsnaam', 'Vul uw bedrijfsnaam in');
                    }

    
                    if (empty($telefoon)) {
                            $this->setError('telefoon', 'Vul uw telefoon in');
                    }

    
                    if (empty($vraag1_antwoorden)) {
                            $this->setError('vraag1_antwoorden', 'Selecteer een antwoord a.u.b.');
                    }

    
                    if (empty($vraag2_antwoorden)) {
                            $this->setError('vraag2_antwoorden', 'Selecteer een antwoord a.u.b.');
                    }

    
                    if (empty($email)) {
                            $this->setError('email', 'Vul uw e-mail in');
                    }

    
                    /* No errors, insert in db
                    else*/

    
                    if(!$this->has_errors) {
                            if(($ret = $this->db->dbNewMessage($aanhef, $contactpersoon, $bedrijfsnaam, $email, $telefoon, $vraag1_antwoorden, $vraag2_antwoorden)) > '') {
                                    //$json = array('result'         => 1);
                                    if (SEND_EMAIL) {
                                            $this->sendEmail($aanhef,$contactpersoon,$bedrijfsnaam,$email,$telefoon,$vraag1_antwoorden,$vraag2_antwoorden);
                                            //This is for relocating to successful result page
                                            header('Location: result.php');
                                            exit;
                                    }
else {
                                            //This will need special treatment. You have to prepare an errorpage
                                            //for database-related issues.

    
                                            header("Location: database-error.html");
                                            exit;
                                    }
                            }
                    }
            }

    
            public function sendEmail($aanhef,$contactpersoon,$bedrijfsnaam,$email,$telefoon,$vraag1_antwoorden,$vraag2_antwoorden)
            {

            /* Just format the email text the way you want ... */
                    $message_body   = "<div style=\"font-size:12px; font-weight:normal;\">Hallo,<br><br>"
                    ."Het volgende bedrijf heeft zich zojuist aangemeld voor de Veiligheids Quiz:</div><br>"
                    ."<table cellpadding=\"1\" cellspacing=\"1\" width=\"550px\"><tr><td style=\"font-size:12px; color:#000000\">Bedrijfsnaam:</td><td style=\"font-size:12px; color:#000000\">".$bedrijfsnaam."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Aanhef:</td><td style=\"font-size:12px; color:#000000\">".$aanhef."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Contactpersoon:</td><td style=\"font-size:12px; color:#000000\">".$contactpersoon."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Telefoonnummer:</td><td style=\"font-size:12px; color:#000000\">".$telefoon."</td></tr><tr><td style=\"font-size:12px; color:#000000\">E-mail:</td><td style=\"font-size:12px; color:#000000\">".$email."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Antwoord vraag 1:</td><td style=\"font-size:12px; color:#000000\">".$vraag1_antwoorden."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Antwoord vraag 2:</td><td style=\"font-size:12px; color:#000000\">".$vraag2_antwoorden."</td></tr></table><br>";
    
                    // Geef GELDIGE adressen op
                    // Een korte benaming voor jouw website

    
                    $website_naam = 'Aanmelding Quiz';
                    // Jouw eigen geldige emailadres
                    $eigen_emailadres = 'MY MAIL';
                    // Een geldig emailadres voor errors
                    $error_emailadres = 'MY MAIL';
                    // De naam van de verzender
                    $naam_verzender = ''.$bedrijfsnaam.'';
                    // Het geldige emailadres van de afzender
                    $email_verzender = ''.$email.'';
                    // Een geldig emailadres of helemaal leeg laten
                    $bcc_emailadres = '';
                    // HTML mail? True/False
                    $html = true;
    
                    // De headers samenstellen
                    $headers     = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
                    $headers    .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . PHP_EOL;
                    $headers    .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
                    $headers    .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : '';
                    $headers    .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
                    $headers    .= 'X-Priority: Normal' . PHP_EOL;
                    $headers    .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
                    $headers    .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
    
                    mail(EMAIL_TO,MESSAGE_SUBJECT,$message_body,$headers);
            }

    
            public function setError($field, $errmsg)
            {

                    $this->has_errors     = true;
                    $this->errors[$field] = $errmsg;
            }

    
            public function errors($field)
            {

                    if (array_key_exists($field,$this->errors)){
                            return $this->errors[$field];
                    }

                  
                    return '';
            }
    };

    ?>

    
    <table width="675px" cellpadding="0" cellspacing="0">
    <form id="contact_form" method="post" action="">
    <label class="label_aanhef" for="aanhef_1"><input name="aanhef" id="aanhef_1" type="radio" value="Dhr." /> Dhr.</label><label class="label_aanhef" for="aanhef_2"><input name="aanhef" id="aanhef_2" type="radio"  value="Mevr." /> Mevr.</label>
    <span class="error"><?php echo $contact->errors('aanhef'); ?></span>
    
    <input id="contactpersoon" name="contactpersoon" maxlength="120" type="text" onFocus="window.scrollTo(0, 0);"/><span class="error"><?php echo $contact->errors('contactpersoon'); ?></span>
    <input id="bedrijfsnaam" name="bedrijfsnaam" maxlength="120" type="text" onFocus="window.scrollTo(0, 0);"/><span class="error"><?php echo $contact->errors('bedrijfsnaam'); ?></span>
    <input id="email" name="email" maxlength="120" type="text" onFocus="window.scrollTo(0, 0);"/><span class="error"><?php echo $contact->errors('email'); ?></span>
    <input id="telefoon" name="telefoon" maxlength="120" type="text" onFocus="window.scrollTo(0, 0);"/><span class="error"><?php echo $contact->errors('telefoon'); ?></span>
    
    
    <label class="label_radio" for="vraag1_A"><input name="vraag1_antwoorden" id="vraag1_A" value="A. Dat is helaas fout, het goede antwoord is: C) < 1 Ohm" type="radio" />A) Geen eis</label>
    <label class="label_radio" for="vraag1_B"><input name="vraag1_antwoorden" id="vraag1_B" value="B. Dat is helaas fout, het goede antwoord is: C) < 1 Ohm" type="radio"  />B) < 0,1 Ohm</label>
    <label class="label_radio" for="vraag1_C"><input name="vraag1_antwoorden" id="vraag1_C" value="C. Gefeliciteerd dat is het goede antwoord." type="radio"  />C) < 1 Ohm</label>
    <label class="label_radio" for="vraag1_D"><input name="vraag1_antwoorden" id="vraag1_D" value="D. Dat is helaas fout, het goede antwoord is: C) < 1 Ohm" type="radio" />D) < 10 Ohm</label>
    <span id="vraag1_antwoorden" class="foutmelding_quiz">
    <?php echo $contact->errors('vraag1_antwoorden'); ?>
    </span>
    
    <label class="label_radio" for="vraag2_A"><input name="vraag2_antwoorden" id="vraag2_A" value="A. Gefeliciteerd dat is het goede antwoord." type="radio" />A) Geen eis</label>
    <label class="label_radio" for="vraag2_B"><input name="vraag2_antwoorden" id="vraag2_B" value="B. Dat is helaas fout, het goede antwoord is: A)  Geen eis" type="radio" />B) < 0,1 Ohm</label>
    <label class="label_radio" for="vraag2_C"><input name="vraag2_antwoorden" id="vraag2_C" value="C. Dat is helaas fout, het goede antwoord is: A)  Geen eis" type="radio" />C) < 1 Ohm</label>
    <label class="label_radio" for="vraag2_D"><input name="vraag2_antwoorden" id="vraag2_D" value="D. Dat is helaas fout, het goede antwoord is: A)  Geen eis" type="radio" />D) < 10 Ohm</label>
    <span id="vraag2_antwoorden" class="foutmelding_quiz">
    <?php echo $contact->errors('vraag2_antwoorden'); ?>
    </span>
    <input class="button submit" type="submit" value="" /><input id="newcontact" name="newcontact" type="hidden" value="1"></input>
    </form>
Gewijzigd op 21/09/2012 14:01:54 door Sebas V
 
PHP hulp

PHP hulp

09/12/2022 23:21:08
 
Mark Beets

Mark Beets

21/09/2012 14:17:52
Quote Anchor link
Hi,

Dat komt door dat het object Contact niet kan worden gevonden bij een leeg form.
Plaats regel 7 ook op 9. Dat is waarschijnlijk niet wat je wilt ;).

Kan je onder ander oplossen door if om de error berichten in het form.
Gewijzigd op 21/09/2012 14:19:36 door Mark Beets
 
Sebas V

Sebas V

21/09/2012 14:22:47
Quote Anchor link
Hee Mark,

bedankt voor je bericht! Met dat erbij is het idd voor nu even opgelost. Heb je een idee hoe ik deze gegevens mee kan nemen naar result.php zodat ze daar getoond worden?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Aanhef: <?php echo $_POST["aanhef"]; ?><br />
Contactpersoon: <?php echo $_POST["contactpersoon"]; ?><br />
Bedrijfsnaam: <?php echo $_POST["bedrijfsnaam"]; ?><br />
Telefoon: <?php echo $_POST["telefoon"]; ?><br />
E-mail: <?php echo $_POST["email"]; ?><br />
 
Mark Beets

Mark Beets

21/09/2012 14:44:13
Quote Anchor link
Sebas,

als je header location wilt behouden kan je met een session gaan werken.
Of je geeft een ID mee Result.php?id=123 en trekt de gegevens uit de database op die pagina. of zet alle gegevens die je nodig hebt op resultaat in de url result.php?aanfef=11&bedrijfsnaam=phphulp$telefoon=0102 etc.

Echt mooie oplossingen zijn het niet.

Ik zou dat header location er helemaal uit gooien en alles op de zelfde pagina houden.
Na het resultaat stop je het script.

Of je zet een if else om je hele form.
if error > toon error, elseif resultaat oke > toon resultaat, else toon form.

Gaat het script te groot worden, werk dan eventueel met include.
 
Sebas V

Sebas V

21/09/2012 14:59:59
Quote Anchor link
Hee Mark, ik wil graag mn opzet behouden omdat ik hier al zo lang mee zit te struggelen. Ik heb gekeken naar deze tutorial om te werken met sessions, maar het lukt me maar niet om de data te tonen op result.php

Tutorial:
http://www.html-form-guide.com/php-form/php-order-form.html

Zou je me misschien een voorzet kunnen geven hoe dit te doen?
 
Marvin H

Marvin H

21/09/2012 15:04:05
Quote Anchor link
Zet op beide PHP bestanden eerst session_start(); bovenaan je PHP file

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$_SESSION
["aanhef"] = $_POST["aanhef"];
$_SESSION["contactpersoon"] = $_POST["contactpersoon"];
$_SESSION["bedrijfsnaam"] = $_POST["bedrijfsnaam"];
$_SESSION["telefoon"] = $_POST["telefoon"];
$_SESSION["email"] = $_POST["email"];
?>


Op je result kan je ze ophalen door:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Aanhef: <?php echo $_SESSION["aanhef"]; ?><br />
Contactpersoon: <?php echo $_SESSION["contactpersoon"]; ?><br />
Bedrijfsnaam: <?php echo $_SESSION["bedrijfsnaam"]; ?><br />
Telefoon: <?php echo $_SESSION["telefoon"]; ?><br />
E-mail: <?php echo $_SESSION["email"]; ?><br />
Gewijzigd op 21/09/2012 15:05:54 door Marvin H
 
Sebas V

Sebas V

21/09/2012 15:15:33
Quote Anchor link
Hee Marvin,

waar dien ik dit te plaatsen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$_SESSION
["aanhef"] = $_POST["aanhef"];
$_SESSION["contactpersoon"] = $_POST["contactpersoon"];
$_SESSION["bedrijfsnaam"] = $_POST["bedrijfsnaam"];
$_SESSION["telefoon"] = $_POST["telefoon"];
$_SESSION["email"] = $_POST["email"];
?>
 
Marvin H

Marvin H

21/09/2012 15:17:38
Quote Anchor link
@Sebas:

na regel 79 "if(!$this->has_errors) {" lijkt me een mooie locatie...
Dit is na je check of alle velden zijn gevult

Toevoeging op 21/09/2012 15:21:14:

By the way, haal op je result.php pagina de sessies wel weer leeg, anders blijven deze bestaan... misschien is dit niet handig als de bezoeker opnieuw naar je formulier gaat...

Helemaal onderaan je result.php zet je dan het volgende neer, zodat de sessies leeg zijn na verwerken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
session_destroy();
?>


Let wel, dit verwijderd alle sessies die je heb opgebouwd...
 
Sebas V

Sebas V

21/09/2012 15:22:11
Quote Anchor link
@Marvin; Het werkt man, je ben m'n held. Proost
 
Marvin H

Marvin H

21/09/2012 15:27:10
Quote Anchor link
Sebas V op 21/09/2012 15:22:11:
@Marvin; Het werkt man, je ben m'n held. Proost


your're welcome
 



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.