formulier naar database schrijven en resultaten ophalen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart Crum

Bart Crum

01/03/2012 00:05:26
Quote Anchor link
Ten behoeve van een bruiloft wil ik een zgn. 'Save the data' pagina maken.
Op deze website zijn twee aspecten van belang. Enerzijds moeten de genodigden aangeven wie ze zijn (naam, adres, etc.) en met hoeveel ze komen. Ook kiezen ze 1 nummer uit 10 voor geselecteerde nummers. Het is van belang dat ik uiteindelijk gemakkelijk uit kan lezen welke nummers het meeste gekozen zijn. Ook wil ik alle adresgegevens en of de genodigde komt uit kunnen lezen.

Om dit te realiseren heb ik een tutorial gevolgd op internet, maar toch kom ik er niet volledig uit. Allereerst heb ik een MySQL query uitgevoerd om een tabel aan te maken. Dat heb ik als volgt gedaan:

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
CREATE TABLE bruiloft (
id INT(11) NOT NULL auto_increment,
voornaam VARCHAR(255) NOT NULL,
achternaam VARCHAR(255) NOT NULL,
adres VARCHAR(255) NOT NULL,
postcode VARCHAR(6) NOT NULL,
woonplaats VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
telefoonnr INT(10) NOT NULL,
aanwezig VARCHAR(255) NOT NULL,
personen INT(11) NOT NULL,
track VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);


Vervolgens heb ik een pagina aangemaakt met het formulier om de gegevens in te vullen en deze vervolgens naar het database te schrijven. Dit script is als volgt:

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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<?php
if(mysql_connect('localhost','',''))
  {

    mysql_select_db('db') or die(mysql_error());
  }

else
  {
    echo 'Kan geen verbinding maken met het database';
    exit;
  }



if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
  {

    $aFouten = array();
    if($_POST['voornaam'] == '')
      {

        $aFouten[] = 'Je hebt geen voornaam ingevuld';
      }

    if($_POST['achternaam'] == '')
      {

        $aFouten[] = 'Je hebt geen achternaam ingevuld';
      }

    if($_POST['adres'] == '')
      {

        $aFouten[] = 'Je hebt geen adres ingevuld';
      }
  
    if($_POST['postcode'] == '')
      {

        $aFouten[] = 'Je hebt geen postcode ingevuld';
      }
  
    if($_POST['woonplaats'] == '')
      {

        $aFouten[] = 'Je hebt geen woonplaats ingevuld';
      }

    if($_POST['email'] == '')
      {

        $aFouten[] = 'Je hebt geen e-mailadres ingevuld';
      }
  
    if($_POST['telefoonnr'] == '' || !is_numeric($_POST['telefoonnr']))
      {

        $aFouten[] = 'Je hebt geen telefoonnummer ingevuld';
      }
  
    if($_POST['aantal'] == '' || !is_numeric($_POST['aantal']))
      {

        $aFouten[] = 'Je hebt niet ingevuld met hoeveel personen je komt';
      }

      
        if(count($aFouten) != 0)
          {

            echo 'De volgende fouten zijn opgetreden: <br /><br />';
            for($Fi = 0; $Fi < count($aFouten); $Fi++)
              {

                echo $aFouten[$Fi].'<br />';
              }

            echo '<br />Klik <a href="javascript:history.go(-1);">hier</a> om terug te keren';
          }

        else
          {
          mysql_query("INSERT INTO bruiloft (voornaam,achternaam,adres,postcode,woonplaats,email,telefoonnr,aanwezig,personen,track) VALUES ('".addslashes($_POST['voornaam'])."','".addslashes($_POST['achternaam'])."','".addslashes($_POST['adres'])."''".addslashes($_POST['postcode'])."''".addslashes($_POST['woonplaats'])."''".addslashes($_POST['email'])."''".addslashes($_POST['telefoonnr'])."''".addslashes($_POST['aanwezig'])."''".addslashes($_POST['aantal'])."''".addslashes($_POST['track'])."')") or die (mysql_error());
          
          echo 'De gegevens zijn succesvol opgeslagen in de database';
          }
      
  }

else
  {
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
    <head>
        <title>
            Mattijs &amp; Willemijn gaan trouwen! - 16 juni 2012
        </title>

        <meta http-equiv="content-type" content="application/xml; charset=utf-8" />
        <meta http-equiv="Author" content="bartcrum.com - Bart Crum" />
        <meta name="Language" content="NL" />
        <meta name="expires" content="never" />
        <meta name="security" content="PUBLIC" />
        <meta name="charset" content="ISO-8859-1" />
        <meta name="REVISIT-AFTER" content="1 DAY" />
        <meta name="distribution" content="Global" />
        <meta name="robots" content="ALL,INDEX,FOLLOW" />
        <meta name="publisher" content="http://www.bartcrum.com/mattijs&willemijn/" />
        <meta name="copyright" content="Copyright &copy;2012 - www.bartcrum.com" />
        <meta name="keywords" content="trouwen, mattijs kaak, willemijn olthoff, 16 juni, 2012, historisch museum, muziek, dans, openingsdans, amsterdam, 020, a'dam, " />
        <meta name="description" content="Welkom. Dit is de 'Save the Date' website voor de bruiloft van Mattijs en Willemijn. Ook wordt er van u gevraagd uw stem uit te brengen op een van de genoemde
                                            nummers voor de openingsdans. Bij voorbaat dank." />
        

        <!-- computerhulp.batrcrum.com, voor al uw computer problemen. -->
        
        <script type="text/javascript">
            <!--
            window.status="Copyright &copyright2012 - www.bartcrum.com"
            //-->
        </script>
        
        <link href="incl_styles.css" rel="stylesheet" type="text/css" />

    </head>

    <body>
    
        <div id="container">
            <div id="plaatje" align="center">
                <img src="" id="plaatje" />
            </div>
            
            <div id="form" align="center">
                <form method="POST" action=" <?=$_SERVER['PHP_SELF']?> ">
            
            <table border="0" width="100%">
                <tr>
                    <td width="45%">
                        Voornaam:
                    </td>
                    <td width="55%">
                        <input type="text" name="voornaam" id="voornaam" size="20" maxlength="30" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Achternaam:
                    </td>
                    <td width="55%">
                        <input type="text" name="achternaam" id="achternaam" size="25" maxlength="40" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Adres:
                    </td>
                    <td width="55%">
                        <input type="text" name="adres" id="adres" size="30" maxlength="50" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Postcode:
                    </td>
                    <td width="55%">
                        <input type="text" name="postcode" id="postcode" size="10" maxlength="6" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Woonplaats:
                    </td>
                    <td width="55%">
                        <input type="text" name="woonplaats" id="woonplaats" size="25" maxlength="45" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        E-mail:
                    </td>
                    <td width="55%">
                        <input type="text" name="email" id="email" size="25" maxlength="50" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Telefoonnummer:
                    </td>
                    <td width="55%">
                        <input type="text" name="telefoonnr" id="telefoonnr" size="20" maxlength="10" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Kom je naar de bruiloft op zaterdag 16 juni 2012?
                    </td>
                    <td width="55%">
                        <input type="radio" name="aanwezig" id="aanwezig" value="aanwezig" CHECKED /> Aanwezig
                        <input type="radio" name="afwezig" id="afwezig" value="afwezig" /> Afwezig
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Zo ja, met hoeveel personen in totaal?
                    </td>
                    <td width="55%">
                        <select name="aantal" id="aantal">
                            <option value="1">1 persoon</option>
                            <option value="2">2 personen</option>
                            <option value="3">3 personen</option>
                            <option value="4">4 personen</option>
                            <option value="5">5 personen</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Met welk nummer moeten we het feest openen?
                    </td>
                    <td width="55%">
                        <select name="track" id="track">
                            <option value="move like jagger">Maroon 5 ft. Christina Aguilera - Move Like Jagger</option>
                            <option value="sex on fire">Kings of Leon - Sex on Fire</option>
                            <option value="jetlag">Simple Plan ft. Natasha Bedingfield - Jetlag</option>
                            <option value="ice ice baby">Vanilla Ice - Ice Ice Baby</option>
                            <option value="in the air tonight">Phil Collings - In the air tonight</option>
                            <option value="bride in june">Seven Brides for Seven Brothers - Bride in June</option>
                            <option value="100 procent pure love">Crystal Waters - 100% pure love</option>
                            <option value="sing it back">Moloko - Sing it Back</option>
                            <option value="baby">Justin Bieber ft. Ludacris - Baby</option>
                            <option value="i follow rivers">Lukke Li - I follow rivers (The Magician Remix)</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                    </td>
                    <td width="55%">
                        <input type="reset" value="Beginwaarden" />
                        <input type="submit" value="Verzenden" />
                    </td>
                </tr>
            </table>
            </form>
<?
  }
?>

            </div>
            
        </div>
    </body>
    </html>


Zodra ik een test uitvoer en gegevens invoer, krijg ik de volgende foutmelding:
"Column count doesn't match value count at row 1".

Maar als ik de kolommen en values tel in de opdracht INSERT, tel ik een gelijk aantal. Kunnen jullie helpen?
 
PHP hulp

PHP hulp

15/05/2024 17:06:00
 
Reshad F

Reshad F

01/03/2012 00:23:32
Quote Anchor link
zet even

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

echo mysql_error();

?>


na je INSERT bij die andere echo en probeer het nog een keer en vertel even wat je te zien krijgt

Toevoeging op 01/03/2012 00:25:30:

btw, je script is zo lek als een mandje!
geen goede foutafhandeling enz
Gewijzigd op 01/03/2012 00:26:36 door Reshad F
 
- SanThe -

- SanThe -

01/03/2012 02:31:48
Quote Anchor link
Addslashes() is geen beveiliging.
Verder heb je bij de INSERT minder velden dan dat je data hebt.
 
Bart Crum

Bart Crum

01/03/2012 12:03:12
Quote Anchor link
- SanThe - op 01/03/2012 02:31:48:
Addslashes() is geen beveiliging.
Verder heb je bij de INSERT minder velden dan dat je data hebt.


De genoemde error is inmiddels verholpen. Weer eens wat komma's vergeten. Ik heb echt nog veel te leren.

Kunnen jullie me advies geven over hoe ik dit script verbeter of wijzen op goede uitleg ergens op het internet? Ik ben een beginner en heb nog hulp nodig.
Want ik wil zeker weten dat de 'beveiliging' goed is.

Dus wat zijn de pijnpunten van het script vooral qua beveiliging. Ik wil ook graag iets van een cookie erin verwerken zodat mensen niet meerdere keren kunnen stemmen. Ook dacht ik aan Captcha om te voorkomen dat het wordt ingevuld door bots etc. Ook dacht ik aan emailadres validatie. Hoe doe ik dat?

Ik hoop dat jullie willen helpen. Dank!
Gewijzigd op 01/03/2012 13:03:40 door Bart Crum
 
- SanThe -

- SanThe -

01/03/2012 14:55:21
 
Bart Crum

Bart Crum

01/03/2012 15:39:46
Quote Anchor link
Ik ben me al de hele dag in aan het lezen in beveiliging. Emailvalidatie is gelukt inmiddels. In feite wil ik nog drie dingen realiseren.

1. Captcha, zodat bots minder gemakkelijk het formulier invullen.
2. Een vorm van beveiliging zodat genodigden of anderen het formulier slechts eenmaal in kunnen vullen.
3. Ik lees veel over mysql_real_escape_string. Ik begrijp dat ik het moet gebruiken. Maar hoe?

Hieronder mijn huidige code.
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
    <head>
        <title>
            Mattijs &amp; Willemijn gaan trouwen! - 16 juni 2012
        </title>

        <meta http-equiv="content-type" content="application/xml; charset=utf-8" />
        <meta http-equiv="Author" content="bartcrum.com - Bart Crum" />
        <meta name="Language" content="NL" />
        <meta name="expires" content="never" />
        <meta name="security" content="PUBLIC" />
        <meta name="charset" content="ISO-8859-1" />
        <meta name="REVISIT-AFTER" content="1 DAY" />
        <meta name="distribution" content="Global" />
        <meta name="robots" content="ALL,INDEX,FOLLOW" />
        <meta name="publisher" content="http://www.bartcrum.com/mattijs&willemijn/" />
        <meta name="copyright" content="Copyright &copy;2012 - www.bartcrum.com" />
        <meta name="keywords" content="trouwen, mattijs kaak, willemijn olthoff, 16 juni, 2012, historisch museum, muziek, dans, openingsdans, amsterdam, 020, a'dam, " />
        <meta name="description" content="Welkom. Dit is de 'Save the Date' website voor de bruiloft van Mattijs en Willemijn. Ook wordt er van u gevraagd uw stem uit te brengen op een van de genoemde
                                            nummers voor de openingsdans. Bij voorbaat dank." />
        

        <!-- computerhulp.batrcrum.com, voor al uw computer problemen. -->
        
        <script type="text/javascript">
            <!--
            window.status="Copyright &copyright2012 - www.bartcrum.com"
            //-->
        </script>
        
        <link href="incl_styles.css" rel="stylesheet" type="text/css" />

    </head>

<?php
if(mysql_connect('localhost','',''))
  {

    mysql_select_db('') or die(mysql_error());
  }

else
  {
    echo 'Kan geen verbinding maken met het database';
    exit;
  }


$email = addslashes($_POST['email']);
$postcode = addslashes($_POST['postcode']);  
$telefoonnr = addslashes($_POST['telefoonnr']);

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
  {

    $aFouten = array();
    if($_POST['voornaam'] == '')
      {

        $aFouten[] = 'Je hebt geen voornaam ingevuld';
      }

    if($_POST['achternaam'] == '')
      {

        $aFouten[] = 'Je hebt geen achternaam ingevuld';
      }

    if($_POST['adres'] == '')
      {

        $aFouten[] = 'Je hebt geen adres ingevuld';
      }
  
    if(!preg_match('~^[0-9]{4}?[a-z]{2}$~i', $postcode))
      {

        $aFouten[] = 'Je hebt geen geldige postcode ingevuld';
      }
  
    if($_POST['woonplaats'] == '')
      {

        $aFouten[] = 'Je hebt geen woonplaats ingevuld';
      }

    if(!preg_match('~^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9][a-z0-9\-]+\.([a-z]{2,6})$~i', $email))
        {

        $aFouten[] = 'Je hebt een ongeldig emailadres ingevuld';
        }
  
    if(!preg_match('~^[0-9]{10}?$~i', $telefoonnr))
      {

        $aFouten[] = 'Je hebt geen geldig telefoonnummer ingevuld';
      }
  
    if($_POST['aantal'] == '')
      {

        $aFouten[] = 'Je hebt niet ingevuld met hoeveel personen je komt';
      }
    
    if($_POST['track'] == '')
      {

        $aFouten[] = 'Je hebt nog geen openingsnummer gekozen!';
      }

      
        if(count($aFouten) != 0)
          {

            echo "<div id=\"fouten\">
                 De volgende fouten zijn opgetreden bij het invoeren van je gegevens:
                 <BR /><ul type=\"square\">"
;
            for($Fi = 0; $Fi < count($aFouten); $Fi++)
              {

                echo  "<li>".$aFouten[$Fi]."</li>";
              }

            echo "</ul>
                 <a href=\"javascript:history.go(-1);\" class=\"linkterug\">Klik hier om terug te keren en het formulier goed in te vullen.</a>
                 </div>"
;
          }

        else
          {
          mysql_query("INSERT INTO bruiloft (voornaam,achternaam,adres,postcode,woonplaats,email,telefoonnr,aanwezig,aantal,track) VALUES ('".addslashes($_POST['voornaam'])."','".addslashes($_POST['achternaam'])."','".addslashes($_POST['adres'])."','".addslashes($_POST['postcode'])."','".addslashes($_POST['woonplaats'])."','".addslashes($_POST['email'])."','".addslashes($_POST['telefoonnr'])."','".addslashes($_POST['aanwezig'])."','".addslashes($_POST['aantal'])."','".addslashes($_POST['track'])."')") or die (mysql_error());
          
          echo "<div id=\"dank\">
                Bedankt! De gegevens zijn succesvol opgeslagen in de database.
                <BR />
                We verheugen ons ontzettend op je/jullie komst. We zien elkaar op 16 juni!
                <BR />
                Liefs,
                <BR /><BR />
                Willemijn & Mattijs
                </div>"
;
          }
      
  }

else
  {
?>
    
    
    <body>
    
        <div id="container">
            <div id="plaatje" align="center">
                <img src="" id="plaatje" />
            </div>
            
            <div id="form" align="center">
                <form method="POST" action=" <?=$_SERVER['PHP_SELF']?> ">
            
            <table border="0" width="100%">
                <tr>
                    <td width="45%">
                        Voornaam:
                    </td>
                    <td width="55%">
                        <input type="text" name="voornaam" id="voornaam" size="20" maxlength="30" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Achternaam:
                    </td>
                    <td width="55%">
                        <input type="text" name="achternaam" id="achternaam" size="25" maxlength="40" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Adres:
                    </td>
                    <td width="55%">
                        <input type="text" name="adres" id="adres" size="30" maxlength="50" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Postcode:
                    </td>
                    <td width="55%">
                        <input type="text" name="postcode" id="postcode" size="10" maxlength="6" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Woonplaats:
                    </td>
                    <td width="55%">
                        <input type="text" name="woonplaats" id="woonplaats" size="25" maxlength="45" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        E-mail:
                    </td>
                    <td width="55%">
                        <input type="text" name="email" id="email" size="25" maxlength="50" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Telefoonnummer:
                    </td>
                    <td width="55%">
                        <input type="text" name="telefoonnr" id="telefoonnr" size="20" maxlength="10" />
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Kom je naar de bruiloft op zaterdag 16 juni 2012?
                    </td>
                    <td width="55%">
                        <input type="radio" name="aanwezig" id="aanwezig" value="aanwezig" CHECKED /> Aanwezig
                        <input type="radio" name="aanwezig" id="aanwezig" value="afwezig" /> Afwezig
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Zo ja, met hoeveel personen in totaal?
                    </td>
                    <td width="55%">
                        <select name="aantal" id="aantal">
                            <option value="" SELECTED>Maak een keuze</option>
                            <option value="1">1 persoon</option>
                            <option value="2">2 personen</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                        Met welk nummer moeten we het feest openen?
                    </td>
                    <td width="55%">
                        <select name="track" id="track">
                            <option value="" SELECTED>Maak een keuze</option>
                            <option value="move like jagger">Maroon 5 ft. Christina Aguilera - Move Like Jagger</option>
                            <option value="sex on fire">Kings of Leon - Sex on Fire</option>
                            <option value="jetlag">Simple Plan ft. Natasha Bedingfield - Jetlag</option>
                            <option value="fight for your right">Beastie Boys - Fight for your Right</option>
                            <option value="hold on">Wilson Phillips - Hold On</option>
                            <option value="bride in june">Seven Brides for Seven Brothers - Bride in June</option>
                            <option value="100 procent pure love">Crystal Waters - 100% pure love</option>
                            <option value="sing it back">Moloko - Sing it Back</option>
                            <option value="baby">Justin Bieber ft. Ludacris - Baby</option>
                            <option value="i follow rivers">Lukke Li - I follow rivers (The Magician Remix)</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td width="45%">
                    </td>
                    <td width="55%">
                        <input type="reset" value="Beginwaarden" />
                        <input type="submit" value="Verzenden" />
                    </td>
                </tr>
            </table>
            </form>
<?
  }
?>

            </div>
            
        </div>
    </body>
    </html>
 
Gerhard l

gerhard l

01/03/2012 15:44:53
Quote Anchor link
punt 1 = klik

punt 2 = in een database bijhouden wie wel en wie niet je form heeft ingevuld.

punt 3 = klik de links van SanThe eens aan..
Gewijzigd op 01/03/2012 15:46:12 door gerhard l
 
Bart Crum

Bart Crum

01/03/2012 16:29:48
Quote Anchor link
Ok. Dank. Ik heb reCAPTCHA toegevoegd. Dat is aardig gelukt. Behalve dat ik het formulier gewoon op kan sturen, zonder reCAPTCHA in te vullen. Hoe voorkom ik dat ik het formulier op kan sturen als reCAPTCHA niet is goedgekeurd?

Verder wil ik dus graag een beveiliging toevoegen zodat meerdere mensen niet meerdere keren het formulier in kunnen vullen. Nou is er net gesuggereerd dit te doen door een database bij te houden wie wel en niet iets hebben ingevuld. Maar ik wil liever filteren met een cookie. Aangezien men anders andere gegevens gebruikt toch?
Kan iemand concrete suggesties geven hoe dit te doen? Ik kom er met de huidige aanwijzingen niet uit..

Dank!

Toevoeging op 01/03/2012 17:27:00:

Wat er volgens mij misgaat is dat een gedeelte van de reCAPTCHA code op de verkeerde plek in het script staat. Ik heb het nu geplaatst voordat ik controleer op lege velden. Maar uiteindelijk wordt reCAPTCHA helemaal niet gecontroleerd. Kan iemand me uitleggen hoe ik dat wel realiseer?

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
require_once('recaptchalib.php');

// Get a key from https://www.google.com/recaptcha/admin/create
$publickey = "";
$privatekey = "";

# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;

# was there a reCAPTCHA response?
if ($_POST["recaptcha_response_field"]) {
        $resp = recaptcha_check_answer ($privatekey,
                                        $_SERVER["REMOTE_ADDR"],
                                        $_POST["recaptcha_challenge_field"],
                                        $_POST["recaptcha_response_field"]);

        if ($resp->is_valid) {
                echo "You got it!";
        } else {
                # set the error code so that we can display it
                $error = $resp->error;
        }
}  
  
$email = addslashes($_POST['email']);
$postcode = addslashes($_POST['postcode']);  
$telefoonnr = addslashes($_POST['telefoonnr']);

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
  {
    $aFouten = array();
    if($_POST['voornaam'] == '')
      {
        $aFouten[] = 'Je hebt geen voornaam ingevuld';
      }
    if($_POST['achternaam'] == '')
      {
        $aFouten[] = 'Je hebt geen achternaam ingevuld';
      }
    if($_POST['adres'] == '')
      {
        $aFouten[] = 'Je hebt geen adres ingevuld';
      }  
    if(!preg_match('~^[0-9]{4}?[a-z]{2}$~i', $postcode))
      {
        $aFouten[] = 'Je hebt geen geldige postcode ingevuld';
      }  
    if($_POST['woonplaats'] == '')
      {
        $aFouten[] = 'Je hebt geen woonplaats ingevuld';
      }
    if(!preg_match('~^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9][a-z0-9\-]+\.([a-z]{2,6})$~i', $email))
        {
        $aFouten[] = 'Je hebt een ongeldig emailadres ingevuld';
        }  
    if(!preg_match('~^[0-9]{10}?$~i', $telefoonnr))
      {
        $aFouten[] = 'Je hebt geen geldig telefoonnummer ingevuld';
      }  
    if($_POST['aantal'] == '')
      {
        $aFouten[] = 'Je hebt niet ingevuld met hoeveel personen je komt';
      }    
    if($_POST['track'] == '')
      {
        $aFouten[] = 'Je hebt nog geen openingsnummer gekozen!';
      }
      
        if(count($aFouten) != 0)
          {
            echo "<div id=\"fouten\">
                 De volgende fouten zijn opgetreden bij het invoeren van je gegevens:
                 <BR /><ul type=\"square\">";
            for($Fi = 0; $Fi < count($aFouten); $Fi++)
              {
                echo  "<li>".$aFouten[$Fi]."</li>";
              }
            echo "</ul>
                 <a href=\"javascript:history.go(-1);\" class=\"linkterug\">Klik hier om terug te keren en het formulier goed in te vullen.</a>
                 </div>";
          }
        else
          {
          mysql_query("INSERT INTO bruiloft (voornaam,achternaam,adres,postcode,woonplaats,email,telefoonnr,aanwezig,aantal,track) VALUES ('".mysql_real_escape_string($_POST['voornaam'])."','".mysql_real_escape_string($_POST['achternaam'])."','".mysql_real_escape_string($_POST['adres'])."','".mysql_real_escape_string($_POST['postcode'])."','".mysql_real_escape_string($_POST['woonplaats'])."','".mysql_real_escape_string($_POST['email'])."','".mysql_real_escape_string($_POST['telefoonnr'])."','".mysql_real_escape_string($_POST['aanwezig'])."','".mysql_real_escape_string($_POST['aantal'])."','".mysql_real_escape_string($_POST['track'])."')") or die (mysql_error());
          
          echo "<div id=\"dank\">
                Bedankt! De gegevens zijn succesvol opgeslagen in de database.
                <BR />
                We verheugen ons ontzettend op je/jullie komst. We zien elkaar op 16 juni!
                <BR />
                Liefs,
                <BR /><BR />
                Willemijn & Mattijs
                </div>";
          }
      
  }
else
  {
?>

Gewijzigd op 01/03/2012 17:22:29 door Bart Crum
 



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.