Versio

Uitgebreid contact formulier V2

Meestal hebben formulieren scripts die je hier ziet geen form herhaling. Daarom hebben we hier: Het contact formulier met form herhaling Versie 2.
De nieuwe versies heeft een aantal logische verbeteringen. Met dank voor alle reactie op het oude script. :)

Verbeteringen:
-echo() ipv print() omdat echo sneller is dan print
-de show_form functie word één keer uitgevoerd (vergelijk beide scripts maar)
-met radiobuttons selectere wie je mailt
-spamveilige radiobuttons
-onderwerpen
-betere controle op _GET en _POST
-betere email controle

Features
-Anti spam
-Makkelijke anti-spam controle
-Ip detectie
-Form herhaling
-Uitgebreide string-checking
-Email validatie/controle
-Datum in nederlands
-Tijd in ingestelde tijdzone
-Makkelijk in te stellen berichten
-Met radiobuttons selecteren wie je mailt
-Spamveilige radiobuttons
-Onderwerp selecteren

Installatie
Je hoeft alleen de bovenste variabelen wijzigen. Dit is een kaal formulier. Dat wil dus zeggen dat je je eigen design en stuff kan planten.
Je hebt echter wel enige kennis van php nodig om de array te begrijpen waar de emailadressen in staan.

Changlog:
09-11-05: Release

12-11-05: Grote bugfix

Gesponsorde koppelingen

BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  

PHP script bestanden

  1. uitgebreid-contact-formulier-v2

 

42 reacties op 'Uitgebreid contact formulier V2'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Steff   an
Steff an
8 jaar geleden
 
0 +1 -0 -1
leuk :P
Quote:
Warning: Invalid argument supplied for foreach() in /home/b2l1661/public_html/phphulp/ucf/mail2.php on line 234
.

In je voorbeeld.

Edit:
Is inmiddels verbeterd.
Eris
Eris
8 jaar geleden
 
0 +1 -0 -1
Warning: Invalid argument supplied for foreach() in /home/b2l1661/public_html/phphulp/ucf/mail2.php on line 234

In voorbeeld

(En volgende keer een de code ipv een link aub :)
Han eev
Han eev
8 jaar geleden
 
0 +1 -0 -1
1 van de velen!


8 jaar geleden
 
0 +1 -0 -1
@Eris+Steffan: Dat lag aan het highlight script ;)
Jelle Posthuma
Jelle Posthuma
8 jaar geleden
 
0 +1 -0 -1
Ik vind deze niet bepaald interessant... Is zo standaard.
PHP erik
PHP erik
8 jaar geleden
 
0 +1 -0 -1
De spambeveiliging is in de praktijk redelijk nutteloos. Hij beveiligt in de meeste gevallen wel tegen mensen die handmatig lopen te spammen, maar de spambots kunnen nog gewoon hun gang gaan op deze manier (zij accepteren namelijk geen cookies).
Legolas
Legolas
8 jaar geleden
 
0 +1 -0 -1
Doe je toch sessions :)


8 jaar geleden
 
0 +1 -0 -1
Onderwerp selecteren toegevoegt
Pieter Boussaer
Pieter Boussaer
8 jaar geleden
 
0 +1 -0 -1
Hallo

een goed script maar ik heb juist een probleem.
Ik heb het gekopieerd en juist de emails veranderd.
Maar het werkt niet http://kljzaffelare.funpic.de/contact.php als je op versturen klikt komt het formulier terug en zie je niet van bedankt voor je mailtje.

Wie kan me helpen

Alvast bedankt
Pieter


8 jaar geleden
 
0 +1 -0 -1
Bedankt voor alle reacties. Grote bugfix
Ja er was idd iets fout, een stomme maar toch, een fout.
Voor wie hem gebruikt; update je script.
Pieter Boussaer
Pieter Boussaer
8 jaar geleden
 
0 +1 -0 -1
ja sebastiaan het werkt perfect nu

Pieter
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


8 jaar geleden
 
0 +1 -0 -1
Ja het was een stomme bug.
parse_incoming() gaf geen waarde terug
en if ($IN['act'] == 'dosend') { moest if ($IN['act'] != 'dosend') { zijn


8 jaar geleden
 
0 +1 -0 -1
Kleine update.
Kaspar
Kaspar
8 jaar geleden
 
0 +1 -0 -1
Hallo Sebastiaan,

Ik probeer jouw script aan de praat te krijgen maar dat lukt niet. Het mailtje wordt verstuurd maar komt niet aan. De e-mailadressen zijn ingevuld, de onderwerpen gewijzigd en ik krijg geen foutmeldingen
G's


8 jaar geleden
 
0 +1 -0 -1
~Soms gebeurt dat. Niet altijd.
Tot nu toe heb ik geen problemen ondervonden op al mij hosts.
Maar ik had eerst wel AppServ op me PC staan, en daarmee
verzende hij geen e-mail. Toen had ik een Apache-php-mysql server
handmatig geïnstaleerd, en toen deed ie het.

Hoe en waarom weet ik niet.
Aka
aka
8 jaar geleden
 
0 +1 -0 -1
Je kan ook gewoon je koekjes uit zetten, kan je ook blijven verstuuren :P kun je niet iets doen met ip block voor 24 uur ??? en dat in een mysql databasje opslaan en klaar... (net zo iets als de bezoekers online op je site, ook een code op deze site)


8 jaar geleden
 
0 +1 -0 -1
Ja, IP-block is een optie, maar spambots en sommige mensen gebruiken proxy's waardoor hun ip constant wijzigt. En eigenlijk is een mail formulier met mysql db een beetje overdreven? Tenzij ik hem natuurlijk helemaal dynamisch maak. Maar kan je het dan nog een 'contact formulier' noemen ;) Nouja, goed idee voor de volgende versie. En dan douw ik er ook nog een velletje OOP eromheen :)
Jelmer rrrr
Jelmer rrrr
8 jaar geleden
 
0 +1 -0 -1
OOP er omheen? De vulling moet OOP zijn, de pakje eromheen niet ;)

En waneer denk je dat je contactformulier zo zwaar onder vuur komt te liggen? Hebben jullie dan geen goede profider die een fatsoenlijk spamfilter heeft, of gmail?


8 jaar geleden
 
0 +1 -0 -1
Heb Gmail. :)
Arthur
Arthur
8 jaar geleden
 
0 +1 -0 -1
Quote:
if ($SETTINGS['mime'] == "text/html") {
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";


Als ik de \n op het einde weg haal worden de headers wel juist meegestuurd. Met de \n op het einde erbij komt de Content-type en afzender gewoon in het e-mailtje zelf te staan.

Nu dit lijkt te werken heb ik als als probleem dat er naast het aangegeven afzenderadres ook root@mijnprovider.nl standaard mee verstuurd wordt.

Het enigste vreemde wat ik kan vinden is als ik naar de eigenschappen van de e-mail kijk is dat alles achter elkaar op 1 regel staat;
Quote:
MIME-Version: 1.0[]Content-type: text/html; charset=iso-8859-1[]From: www.website.nl <email@website.nl>


Weet iemand hoe deze beide problemen kan oplossen?
Kalle P
Kalle P
8 jaar geleden
 
0 +1 -0 -1
Wat wil je nou?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Arthur
Arthur
8 jaar geleden
 
0 +1 -0 -1
1. Als afzender wordt er naast het e-mail adres wat je ingeeft ook root@provider.nl meegestuurd. Dit wil ik weg hebben.

2. Doordat ik de \n moet weghalen wordt er in de header alles achter elkaar geschreven. Is dit op te lossen dat dit gewoon netjes onder elkaar weergegeven wordt? Als ik de \n laat staan worden de header niet meeverstuurd.


8 jaar geleden
 
0 +1 -0 -1
De headers zijn in hetzelfde formaat als op php.net, dus er zal niet veel mis mee zijn.
Dirk Kok
Dirk Kok
7 jaar geleden
 
0 +1 -0 -1
Dankje, super post.
Veel aan gehad!
Jesper Diovo
Jesper Diovo
7 jaar geleden
 
0 +1 -0 -1
Nooit gedacht dat het zo uitgebreid kon :P
Maar ziet er goed uit ;)
J orii
J orii
7 jaar geleden
 
0 +1 -0 -1
Ik krijg een fout melding :S

::::::::::::::::::::::::::::::::::::::::::::::::::::::
Er is een foutje opgetreden waardoor het email verzenden is mislukt...
::::::::::::::::::::::::::::::::::::::::::::::::::::::

Wat moet ik er mee?
Peter Wessels
Peter Wessels
6 jaar geleden
 
0 +1 -0 -1
@arthur,
Ik denk dat je iets aan moet passen in je php.ini,
Moet je maar kijken onder mail functie.
Youri hanssens
youri hanssens
6 jaar geleden
 
0 +1 -0 -1
Ik heb dezelfde melding als jori

::::::::::::::::::::::::::::::::::::::::::::::::::::::
Er is een foutje opgetreden waardoor het email verzenden is mislukt...
::::::::::::::::::::::::::::::::::::::::::::::::::::::

ik heb alleen maar email adres gewijzigd, waar kan dit aan liggen?
Ingmar
Ingmar
6 jaar geleden
 
0 +1 -0 -1
Warning: mail() [function.mail]: SAFE MODE Restriction in effect. The mail() command is not allowed. in /www/freehostingnow.com/i/n/g/ingmar89/htdocs/contact.php on line 409

wat is hieraan te doen?
TJVB tvb
TJVB tvb
6 jaar geleden
 
0 +1 -0 -1
Het enige wat je dan kunt doen is contact op te nemen met je hoster of je toch toestemming kunt krijgen om de functie mail() te gebruiken (en ze dat dan ook wijzigen)
Ingmar
Ingmar
6 jaar geleden
 
0 +1 -0 -1
Oke dank je ;)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Patrick de Jonge
Patrick de Jonge
6 jaar geleden
 
0 +1 -0 -1
Heb geprobeet deze script in me template te zetten maar lukt niet echt, ik krijg deze error

Warning: Cannot modify header information - headers already sent by (output started at /home/eagle/public_html/test/contact.php:11) in /home/eagle/public_html/test/includes/mail.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at /home/eagle/public_html/test/contact.php:11) in /home/eagle/public_html/test/includes/mail.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at /home/eagle/public_html/test/contact.php:11) in /home/eagle/public_html/test/includes/mail.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at /home/eagle/public_html/test/contact.php:11) in /home/eagle/public_html/test/includes/mail.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /home/eagle/public_html/test/contact.php:11) in /home/eagle/public_html/test/includes/mail.php on line 17

Heb de script in me website geinclude met deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include("includes/mail.php"); ?>


Kan iemand mij mischien helpen..?
Patrick de Jonge
Patrick de Jonge
6 jaar geleden
 
0 +1 -0 -1
Kan daar geen oplossing vinden, wel werkt de script op deze pagina http://www.dutcheagles.nl/test/includes/mail.php
Niek Weevers
Niek Weevers
6 jaar geleden
 
0 +1 -0 -1
Ik krijg de volgende melding:
Er is een foutje opgetreden waardoor het email verzenden is mislukt...
Hoe zou dat kunnen
Martijn VErdaasdonk
Martijn VErdaasdonk
5 jaar geleden
 
0 +1 -0 -1
ik zag regel 5 spelfoutje vertriouwlijk???

ben net aan het proberen ermee en viel gelijk op.

misschien ff aanpassen

gegroet

een persoon die respect heeft voor diegeen die heel dit php gebeuren snapt.
Raymond
raymond
5 jaar geleden
 
0 +1 -0 -1
Hoe kan je ervoor zorgen dat automatisch naar 2 e-mailadressen verstuurd wordt zonder dat stukje waar staat ontvangers??
Lyrix Lyrix
Lyrix Lyrix
3 jaar geleden
 
0 +1 -0 -1
Dit is een prima script, in grote lijnen precies wat ik zocht.
Ook de hmtl output naar email werkt prima.
De opmaak van de te ontvangen email is nu leuk op te maken.

Ik zou er nog een extra optie in hebben.
Is het mogelijk om de mail naar meerdere email adressen te sturen?
Bv dat de verzenden ook de mail ontvangt, en er nog een extra email te kiezen is uit een list menu?
Leon Vosmeijer
Leon Vosmeijer
3 jaar geleden
 
0 +1 -0 -1
Ik heb niet inhoudelijk naar je script gekeken, wat mij eigenlijk direct opvalt (en ook bij veel andere scripts op de website) is je error afhandeling, wat je momenteel zo doet:
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
<?php
// ...
$err = false;
        if (!checkstring($IN['naam'], $SETTINGS['naam_min'], $SETTINGS['naam_max'])) {
            $err = 'Geen naam ingevoerd of je naam is te kort of te lang.';
        }
elseif (!checkstring($IN['email'], $SETTINGS['email_min'], $SETTINGS['email_max'])) {
            $err = 'Geen email ingevoerd of je email is te kort of te lang.';
        }
elseif (!validate_email($IN['email']) && $SETTINGS['email_check'] == true) {
            $err = 'Ongeldig email adres ingevoerd.';
        }
elseif (!checkstring($IN['titel'], $SETTINGS['titel_min'], $SETTINGS['titel_max'])) {
            $err = 'Geen titel ingevoerd of je titel is te kort of te lang.';
        }
elseif (!checkstring($IN['bericht'], $SETTINGS['bericht_min'], $SETTINGS['bericht_max'])) {
            $err = 'Geen bericht ingevoerd of je bericht is te kort of te lang.';
        }

        if ($err == false) {
            $datum = get_date($SETTINGS['timezone'], $SETTINGS['adjustment']);
            if (!sendmail($IN['naam'], $IN['email'], $IN['titel'], $IN['bericht'], $IN['ip'], $datum, $IN['to'], $IN['onderwerp'])) {
                echo $SETTINGS['no_email'];
            }
else {
                echo $SETTINGS['bericht_suc'];
                setcookie('sendmail', "yeah", $SETTINGS['expire_cookie']);
            }
        }
else {
            show_form($IN['naam'], $IN['email'], $IN['titel'], $IN['bericht'], $err, $IN['to'], $IN['onderwerp']);
        }

// ...
?>


Op deze manier krijgt de gebruiker fout voor fout te zien, terwijl de gebruiker dit natuurlijk ook gewoon in 1 keer kan (en wellicht wilt) zien.
Waarom maak je hier niet gewoon een errors array van en dat je deze direct terugstuurd naar je form:

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
<?php
// ...
$errors = array();
if (!checkstring($IN['naam'], $SETTINGS['naam_min'], $SETTINGS['naam_max'])) $errors['naam'] = 'melding';
if (!checkstring($IN['email'], $SETTINGS['email_min'], $SETTINGS['email_max'])) $errors['email'] = 'medling';
// ...
if (count($errors) == 0)
{

    // Geen errors gevonden, verwerk data
}
else
{
    // Alle foutmeldingen tegelijk terug sturen.
}
// ...
[/code]
Rashidi
Rashidi
3 jaar geleden
 
0 +1 -0 -1
Geweldig script en ik heb het net af en nu kom ik erachter dat het die niet doet

ik gebruik het op deze website:

http://www.landbrugnaarchinatv.com/contact.php

het geeft steeds de error dat het verzenden van de mail mislukt. :(

Alvast bedankt voor jullie hulp

dit is mijn 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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
<?php
////////////////////////////////////////////////
/// Contact formulier met formherhaling
/// Gemaakt door Sebazzz
/// xhtml compatible
///////////////////////////////////////////

//output buffering aanzetten om leuke errors te verhelpen/voorkomen

ob_start();

//headers alvast instellen

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");


/////////////////////////////////////////////////////
/// Variablen die ingesteld moeten worden
/////////////////////////////////////////////////////

// Maanden, hoef je eigen niks aan te wijzigen, tenzij je
// natuurlijk de maanden in het engels wil ontvangen

$SETTINGS['maanden']                       = array(
'01' => 'Januari',
'02' => 'Februari',
'03' => 'Maart',
'04' => 'April',
'05' => 'Mei',
'06' => 'Juni',
'07' => 'Juli',
'08' => 'Augustus',
'09' => 'September',
'10' => 'Oktober',
'11' => 'November',
'12' => 'December'
);

// email adres(sen) waar het naartoe moet
// naam_van_persoon => email adres

$SETTINGS['emails'] = array('drs. Linda Landbrug'        => 'lindalandbrug@hotmail.com',
                            'XiomaX Webdesign'       => 'rashidithebest@hotmail.com',);

//standaard persoon die aangekruist staat (email adres)
$SETTINGS['stdmail'] = 'drs. Linda Landbrug';

//onderwerpen gebruiken?
//true / false

$SETTINGS['do_onderwerpen'] = false;

//welke onderwerpen?
// id => onderwerp

$SETTINGS['onderwerpen'] = array(1  => 'Eigen verhaal',
                                 2  => 'Suggestie',
                                 3  => 'Vraag',
                                 4  => 'Fout gezien',
                                 );


//wat is het standaard onderwerp
// $SETTINGS['onderwerpen'][ id_van onderwerp ]

$SETTINGS['stdsub'] = $SETTINGS['onderwerpen'][1];

// html email of plain text? kies uit:
// text/html - text/plain

$SETTINGS['mime'] = 'text/html';

//datum formaat volgens php's date() functie
$SETTINGS['datum_formaat'] = 'd-m-Y H:i:s';

//tijdzone waar je in zit
$SETTINGS['timezone'] = -5;

//STA, Server Time Adjustment in minuten. Zegt het al...
$SETTINGS['adjustment'] = 0;

//input: minimale en maximale string lengte van naam?
$SETTINGS['naam_min'] = 2;
$SETTINGS['naam_max'] = 100;

//input: minimale en maximale string lengte van titel?
$SETTINGS['titel_min'] = 4;
$SETTINGS['titel_max'] = 40;

//input: minimale en maximale string lengte van titel?
$SETTINGS['email_min'] = 4;
$SETTINGS['email_max'] = 40;

//input: minimale en maximale string lengte van bericht? maximale woord lengte?
$SETTINGS['bericht_min'] = 10;
$SETTINGS['bericht_max'] = 10000;
$SETTINGS['bericht_wmx'] = 50;

//bericht dat weergegeven wordt bovenaan het formulier, html ingeschakelt
//hoeft er niks? laat dan &nbsp; staan

$SETTINGS['bericht_top'] = '&nbsp;<p>Heeft u een vraag, suggestie of heeft u ergens een fout geziendan kunt u ons bereiken door onderstaand formulier intevullen. U kunt ook uw intregatie verhaal opsturen. Na goedkeuring plaatsen wij deze op de website</p>&nbsp;';

//bericht dat weergegeven wordt nadat het emailtje successvol is verzonden
$SETTINGS['bericht_suc']  = 'Bedankt voor het versturen van een e-mail.';
$SETTINGS['bericht_suc'] .= 'Indien nodig dan zult u zo snel mogelijk een antwoord krijgen<br />';
$SETTINGS['bericht_suc'] .= 'We gaan vertrouwelijk met uw informatie om ';
$SETTINGS['bericht_suc'] .= 'en zal nooit aan derden worden gegeven.';

//kijken voor een geldige email adres? true voor ja, false voor nee
$SETTINGS['email_check'] = false;

//foutmelding om te weergeven als het verzenden van
//de email niet is gelukt(dus als mail() FALSE geeft)
//html ingeschakelt

$SETTINGS['no_email'] = 'Er is een fout opgetreden waardoor het email verzenden is mislukt...';

//foutmelding om te weergeven als degene al een emailtje heeft verzonden. html ingeschakelt
$SETTINGS['error_spam'] = 'U kunt maar 1 keer per 12 uur een bericht sturen. Probeert u het later nog een keer.';

//tijd wanneer het koekje beschimmeld raakt ( in andere taal: cookie verloop tijd)
$SETTINGS['expire_cookie'] = time() + (3600 * 12); //verloopt na een dag


/// niks meer te editen

// error reporting goed zetten

error_reporting(E_ALL ^ E_NOTICE);
//////////////////////////////
/// functies defineeren
////////////////////////////


function parse_incoming() {
    ////////////////////////////////////////////////
    /// Deze functie geeft al het 'incoming' via
    /// _POST en _GET terug. _POST heeft voorrang,
    /// dus als een key in _GET al bestaat, wordt
    /// de key overgeschreven
    ////////////////////////////////////////////////
    /// array parse_incoming( void );


    $return = array();

    
    //eerst get,
    foreach ($_GET as $k => $v) {
        if (!is_array($v)) {
            $return[ $k ] = clean_value($v);
        }
    }

    
    //en dan post!
    foreach ($_POST as $k => $v) {
        if (!is_array($v)) {
            $return[ $k ] = clean_value($v);
        }
    }

    return $return;

}

function
clean_value($val) {
        global $site;
        
        if ($val == "")
        {

            return "";
        }

        
        $val = str_replace( "&#032;", " ", $val );

        $val = str_replace( chr(0xCA), "", $val );
        
        $val = str_replace( "&"            , "&amp;"         , $val );
        $val = str_replace( "<!--"         , "&#60;&#33;--"  , $val );
        $val = str_replace( "-->"          , "--&#62;"       , $val );
        $val = preg_replace( "/<script/i"  , "&#60;script"   , $val );
        $val = str_replace( ">"            , "&gt;"          , $val );
        $val = str_replace( "<"            , "&lt;"          , $val );
        $val = str_replace( "\""           , "&quot;"        , $val );
        $val = preg_replace( "/\n/"        , "<br>"          , $val );
        $val = preg_replace( "/\\\$/"      , "&#036;"        , $val );
        $val = preg_replace( "/\r/"        , ""              , $val );
        $val = str_replace( "!"            , "&#33;"         , $val );
        $val = str_replace( "'"            , "&#39;"         , $val );

        $val = preg_replace("/&amp;#([0-9]+);/s", "&#\\1;", $val );
        
        $val = stripslashes($val);
        
        $val = preg_replace( "/\\\(?!&amp;#|\?#)/", "&#092;", $val );
        
        return $val;
}

function
checkcookie() {
    ///////////////////////////////////////////////
    /// Deze functie kijkt voor een cookie,
    /// in dit geval of de gast al eens een
    /// mailtje heeft gestuurd.
    // geeft false voor ja, true voor nee
    ///////////////////////////////////////////////
    /// boolean checkcookie( void );


    if ($_COOKIE['sendmail'] == "yeah") {
        return false;
    }

    return true;
}


function
vervang_maand($datum) {
    //////////////////////////////////////////////////
    /// Deze functie gaat ervan uit dat $datum het
    /// volgende datum formaat gebruikt:
    /// d-m-Y H:i:xxxx
    /// d/m/Y H:i:xxxx
    /// d.m.y H:i:xxx
    /// Je zou natuurlijk strftime() kunnen gebruiken
    /// maar omdat we dan gebruik gaan maken van de
    /// ingebakken taalpakketten van php en het kan
    /// wel eens gebeuren dat men alleen engels
    /// in die versie heeft gestopt en dus nederlands
    /// niet ondersteund wordt.
    ////////////////////////////////////////////////
    /// string vervang_maand(string date);

    global $SETTINGS;
    list($dag, $maand, $rest) = split('[/.-]', $datum);
    foreach ($SETTINGS['maanden'] as $nummer => $naam) {
        $maand = str_replace ($nummer, $naam, $maand);
    }

    $temp_array = array( $dag, $maand, $rest);
    $datum = implode(" ", $temp_array);
    return $datum;
}

function
validate_email($input) {
    ///////////////////////////////////////
    /// Kijkt of $input een geldig
    /// email adres bevat
    /////////////////////////////////////
    /// boolean validate_email( string email );


    if (!preg_match("/^[A-Za-z0-9._\-]+\@[A-Za-z0-9._\-]+\.[A-Za-z]{2,4}$/",$input)) {
        return false;
    }

    return true;
}

function
checkstring($input, $minstrlen = 3, $maxstrlen = 10000, $maxwordlen = 300) {
    ////////////////////////////////
    /// Check $input string
    /// Geeft false als het niet goed is
    /// geeft true als de string $input
    /// oke is
    /////////////////////////////
    /// boolean checkstring(string input, [int minimaal tekens, [int maximaal tekens, [int maximaal woord lengte]]]);


    if (empty($input)) {
        return false;
    }

    if (strlen($input) < $minstrlen) {
        return false;
    }

    if (strlen($input) > $maxstrlen) {
        return false;
    }


    $temp_array = explode(" ", $input);
    foreach ($temp_array as $woord) {
        if (strlen($woord) > $maxwordlen) {
            return false;
        }
    }

    return true;
    
}

function
get_date($timezone = 1, $adjustment = 0) {
    ////////////////////////////////////////////////
    /// Verkrijg de datum en tijd van een tijdzone
    /////////////////////////////////////
    /// string get_date( [int timezone, [int adjustment]] );

    global $SETTINGS;
    $adjustment = $adjustment / 60;
    $date = gmdate($SETTINGS['datum_formaat'], time() + 3600*($adjustment + $timezone + date("I")));
    
    return $date;
}

function
show_form($naam = '', $email = '', $titel = '', $bericht = '', $error = false, $to = false, $onderwerp = false) {
    ///////////////////////////////////////////////
    /// Laat formulier zien. Error als opgegeven
    ////////////////////////////////////////////////
    /// void show_form( [string naam, [string email, [string titel, [string bericht, [string error]]]]] );

    global $SETTINGS;
    if ($error == false) {
        $header = $SETTINGS['bericht_top'];
    }
else {
        $header = '<span style="color:#FF0000;font-weight:bold;">'.$error.'</span>';
    }


    if ($to == false) {
        $to = $SETTINGS['stdmail'];
    }

    if ($onderwerp == false) {
        $onderwerp = $SETTINGS['stdsub'];
    }

    $t = $_SERVER['PHP_SELF'];
    $s = explode("/", $_SERVER['PHP_SELF']);
    $this_file = $s[ count($s) - 1 ];
    
    
 require("header.php");

echo ("<div id=\"main\" style=\"height:760px\"><div id=\"maintop\"><div id=\"maintopleft\"></div><div id=\"maintopcenter\"><h1>Contact</h1></div><div id=\"maintopright\"></div></div><div id=\"mainleftborder\"></div><div id=\"maincontent\">");
    
    echo '<form id="formie" name="contact" action="'.$this_file.'" method="post">';
    echo '<input type="hidden" name="ip" value="'.$_SERVER['REMOTE_ADDR'].'" />';
    echo '<input type="hidden" name="act" value="dosend" />';

    echo '<table width="800" id="contacttable">'; //hier kun je eventueel nog style info aan toevoegen

    echo '<tr><td colspan="2" align="center">'.$header.'</td></tr>
    
<tr><td align="left" valign="top"><span style="line-height:2em;">Ontvanger:</span></td><td align="left">'
;

foreach ($SETTINGS['emails'] as $name => $adres) {$name = htmlentities($name);echo '<input type="radio" name="to" value="'.str_replace('_', ' ', $name).'" id="'.str_replace('_', ' ', $name).'" ';if (strtolower($to) == strtolower($name)) {echo 'checked="checked" ';}echo '/><label for="'.str_replace('_', ' ', $name).'"> &nbsp; &nbsp;'.$name.'</label> &nbsp; &nbsp; &nbsp; &nbsp;';} print '</td></tr>
    
<tr><td align="left" valign="top"><span style="line-height:2em;">Naam:</span></td><td align="left"><div class="rounded"><input type="text" name="naam" value="'
.$naam.'" size="100" maxlength="'.$SETTINGS['naam_max'].'" /></div></td></tr>

<tr><td align="left" valign="top"><span style="line-height:2em;">E-mail:</span></td><td align="left"><div class="rounded"><input type="text" name="email" value="'
.$email.'" size="75" maxlength="'.$SETTINGS['email_max'].'" /></div></td></tr>';


if ($SETTINGS['do_onderwerpen'] == true) {print '<tr><td align="left" valign="top">Onderwerp:</td>';
        print '<td align="left"><select name="onderwerp">';
        foreach ($SETTINGS['onderwerpen'] as $id => $sub) {
            print '<option value="'.$id.'" ';
            if ($sub == $onderwerp) {
                print 'selected="selected"';
            }

            print '>'.htmlentities($sub).'</option>';
        }

        print '</select></td></tr>';
    }


echo '<tr><td align="left" valign="top"><span style="line-height:2em;">Titel:</span></td><td align="left"><div class="rounded"><input type="text" name="titel" value="'.$titel.'" size="100" maxlength="'.$SETTINGS['titel_max'].'" /></div></td></tr>';

echo '<tr><td align="left" valign="top"><span style="line-height:2em;">Bericht:</span></td><td align="left">
<textarea id="textareabg" name="bericht" cols="75" rows="20" wrap="soft">'
.$bericht.'</textarea></td></tr>';

echo '<tr><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td align="center" colspan="2"><input type="image" src="img/verzenden.png" width="163" height="50" border="0" alt="Klik om te verzenden" /></td></tr>';
    echo '</table></form>';
}

function
sendmail($naam, $email, $titel, $bericht, $ip, $datum, $to, $onderwerp) {
    //////////////////////////////////////////////
    /// Stuurt emaitje. Gebruikt de $SETTINGS var
    /// en geeft false als het niet lukt
    /////////////////////////////////////////////
    /// boolean sendmail( string naam, string email, string titel, string bericht, string ip);

    global $SETTINGS;
    $to  = $SETTINGS['emails'][ str_replace(' ', '_', $to) ];
    $sub = $SETTINGS['onderwerpen'][ $onderwerp ];

    $subject = "Mailtje van je website - ".$naam.": ".$titel;
    if ($SETTINGS['mime'] == "text/html") {
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

        $message  = "<html><head>";
        $message .= "</head><body>";
        $message .= "U heeft een bericht gekregen via de website www.landbrugnaarchinatv.com!<br /><br />";
        $message .= "<table>";
        $message .= "<tr><td>Naam:</td><td>".$naam."</td></tr>";
        $message .= "<tr><td>Email:</td><td><a href=\"mailto:".$email."\">".$email."</a></td></tr>";
        $message .= "<tr><td>Titel:</td><td>".$titel."</td></tr>";
        $message .= "<tr><td>Bericht:</td><td>".$bericht."</td></tr>";
        $message .= "<tr><td colspan=\"2\">&nbsp;</td></tr>";
        $message .= "<tr><td>Datum:</td><td>".vervang_maand($datum)."</td></tr>";
        $message .= "</table></body></html>";


    }
else {
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";

        $message  = "==============================================\n";
        $message .= "Emailtje van een gast van je website!\n";
        $message .= "==============================================\n";
        $message .= "\n";
        $message .= "Naam:\n";
        $message .= $naam."\n\n";
        $message .= "Email:\n";
        $message .= $email."\n\n";
        $message .= "Onderwerp:\n";
        $message .= $sub."\n\n";
        $message .= "Titel:\n";
        $message .= $titel."\n\n";
        $message .= "Bericht:\n";
        $message .= $bericht."\n\n";
        $message .= "\n";
        $message .= "Datum:\n";
        $message .= vervang_maand($datum)."\n\n";
        $message .= "Ip adres:\n";
        $message .= $ip."\n\n";

    }

    $headers .= "From: Php automailer <{$email}>\r\n";

    if (!mail($to, $subject, $message, $headers)) {
        return false;
    }

    return true;
}


///////////////////////////
/// En nu het script.....
///////////////////////////



$IN = parse_incoming();

if (checkcookie()) {
    if ($IN['act'] != 'dosend') {
        show_form();
    }
else {
        $err = false;
        if (!checkstring($IN['naam'], $SETTINGS['naam_min'], $SETTINGS['naam_max'])) {
            $err = 'U heeft geen naam ingevoerd.';
        }
elseif (!checkstring($IN['email'], $SETTINGS['email_min'], $SETTINGS['email_max'])) {
            $err = 'U heeft geen email ingevoerd of uw email is te kort of te lang.';
        }
elseif (!validate_email($IN['email']) && $SETTINGS['email_check'] == true) {
            $err = 'Ongeldig email adres ingevoerd.';
        }
elseif (!checkstring($IN['titel'], $SETTINGS['titel_min'], $SETTINGS['titel_max'])) {
            $err = 'U heeft geen titel ingevoerd of uw titel is te kort.';
        }
elseif (!checkstring($IN['bericht'], $SETTINGS['bericht_min'], $SETTINGS['bericht_max'])) {
            $err = 'U heeft geen bericht ingevoerd of uw bericht is te kort.';
        }

        if ($err == false) {
            $datum = get_date($SETTINGS['timezone'], $SETTINGS['adjustment']);
            if (!sendmail($IN['naam'], $IN['email'], $IN['titel'], $IN['bericht'], $IN['ip'], $datum, $IN['to'], $IN['onderwerp'])) { require("header.php");echo ("<div id=\"main\" style=\"height:760px\"><div id=\"maintop\"><div id=\"maintopleft\"></div><div id=\"maintopcenter\"><h1>Contact</h1></div><div id=\"maintopright\"></div></div><div id=\"mainleftborder\"></div><div id=\"maincontent\">");
                echo $SETTINGS['no_email']; echo ("<br/><br/>Onze excusses voor dit ongemak. U kunt ons ook direct mailen op het e-mail adress: lindalandbrug@hotmail.com <br/><br/><a href=\"contact.php\">Terug</a>");
            }
else {require("header.php");echo ("<div id=\"main\" style=\"height:760px\"><div id=\"maintop\"><div id=\"maintopleft\"></div><div id=\"maintopcenter\"><h1>Contact</h1></div><div id=\"maintopright\"></div></div><div id=\"mainleftborder\"></div><div id=\"maincontent\">");
                echo $SETTINGS['bericht_suc'];
                setcookie('sendmail', "yeah", $SETTINGS['expire_cookie']);
            }
        }
else {
            show_form($IN['naam'], $IN['email'], $IN['titel'], $IN['bericht'], $err, $IN['to'], $IN['onderwerp']);
        }
    }
}
else {
    echo $SETTINGS['error_spam'];
}


//laten we nu maar alles outputten, het is genoeg
//geweest voor deze keer en er komen toch
//geen headers meer ^^

ob_end_flush();
?>


</div>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php require("inc/footer.php"); ?>
Daniel Voogsgerd
Daniel Voogsgerd
2 jaar geleden
 
0 +1 -0 -1
Waarom gebruik je niet html_special_chars() ipv al die replaces?
Job Putters
Job Putters
1 jaar geleden
 
0 +1 -0 -1
Hij werkt!

Maar, kan ik het formulier ook laten verzenden door bijvoorbeeld Form@mijndomein.com ?

Zoja? hoe? :$

Grtz

Om te reageren heb je een account nodig en je moet ingelogd zijn.

  • Details
  • Door:
  • 8 jaar geleden
  • 3.239 x bekeken
  • Labels
  • Geen tags toegevoegd.
Get Adobe Flash player