E-mail formulier generator

Door Martijn Wieringa, 20 jaar geleden, 41.541x bekeken

Voor mensen die graag een e-mail formulier op hun website willen, maar niet weten waar te beginnen heb ik een tool gemaakt die deze kan genereren.

Browse naar: http://www.php-solutions.nl/scripts/formulier-generator/

Definieer de velden die je in je formulier wilt tonen, en geef aan naar welk e-mailadres het formulier verzonden moet worden. Klik op de knop "Genereren" en er verschijnt een blok PHP code onderaan het scherm. Plak deze code in een .PHP file, en je script is klaar.

Je kunt de code natuurlijk waar nodig verder uitbreiden of teksten veranderen. Graag jullie feedback!

TODO:
- Optioneel CAPTCHA validatie in het formulier bouwen
- Input valideren op een bepaalde syntax

Voorbeeld: http://www.php-solutions.nl/scripts/formulier-generator/

Gesponsorde koppelingen

PHP script bestanden

  1. email-formulier-generator

 

Er zijn 26 reacties op 'Email formulier generator'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Maar waar is de code ?


20 jaar geleden
 
0 +1 -0 -1
Hmm... Ik weet het niet zo over dit script...
Je hebt een functie, maar die returnt '', dat lijkt mij niet de bedoeling. Die functie is sowieso een beetje vaag vind ik, want je hoeft helemaal niet foreach te doen. Je kunt gewoon met isset kijken of een waarde bestaat in een array...
Ook gooi je twee parameters naar een functie, die maar 1 parameter ontvangt, hoezo?
Verder controleer jij of een form is gesubmit door middel van een hidden input. Als je wilt controleren of een form is gepost moet je naar de REQUEST_METHOD kijken.
Misschien is je code ook nog eens gevoelig voor php mail injections
Martijn Wieringa
Martijn Wieringa
20 jaar geleden
 
0 +1 -0 -1
@Iltar
Zie: http://www.php-solutions.nl/scripts/formulier-generator/

@Karl:
Ik gebruik de getPost() functie om te voorkomen dat je steeds de regel moet uit typen. Plus kan ik op website niveau eenvoudig de 'stripslashes' verwijderen als de server de postdata niet slashed.

$x = (isset($_POST['x']) ? stripslashes($_POST['x']) : ''));
$x = getPost('x');

Over het algemeen is het returnen van een lege string precies wat ik zou willen als een veld niet bestaat in de $_POST

Wat je schrijft over de parameters klopt... foutje van mij :S

Wat betreft e-mail injection; Alle waarden worden netjes gecontroleerd/ge-escaped, dus Injection lijkt mij niet mogelijk.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Feitelijk post je hier geen script, maar een link naar een pagina die een script voor je maakt. Eigenlijk is dat niet de bedoeling denk ik. But who gives a f*, het is handig voor veel mensen, vooral voor beginners.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
if(isset($_POST['key']))
-->
if(isset($_POST[$key]))

(toch?)


20 jaar geleden
 
0 +1 -0 -1
Je hebt het script veranderd, dus nu slaat mijn verhaal nergens meer op.
Ook is je demoscript niet het script wat je hier post, want als ik onzin plaats in dat "E-mailadres afzender *" vakje krijg je: Vul a.u.b. een geldig e-mailadres in bij het veld "E-mailadres afzender".
De errors die je in dit script ziet staan zijn steeds: $sFormError = 'Vul a.u.b. alle verplichte velden in.'; }
Wat ook nog eens onhandig is...
Martijn Wieringa
Martijn Wieringa
20 jaar geleden
 
0 +1 -0 -1
@karl
Ik heb alleen de getPost() functie aangepast.

Voor de liefhebber hier het script dat het formulier genereerd:
http://www.php-solutions.nl/scripts/formulier-generator/formulier-generator.zip

Merk op dat die functie rust op enkele 'bibliotheken' die ik standaard gebruik in mijn PHP script.
Martijn Wieringa
Martijn Wieringa
20 jaar geleden
 
0 +1 -0 -1
@Erik
Quote:
if(isset($_POST['key']))
-->
if(isset($_POST[$key]))

(toch?)


you're right ;)
- SanThe -
- SanThe -
20 jaar geleden
 
0 +1 -0 -1
En hoe zit het met de email-injection?
Arian Stolwijk
Arian Stolwijk
20 jaar geleden
 
0 +1 -0 -1
Hoezo gebruik je LF, je kunt toch ook gewoon PHP_EOL gebruiken ? (en om hem php4 compitable te maken, kan je dus is_defined('PHP_EOL') gebruiken..)
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
PHP_EOL is afhankelijk van het besturingssysteem. Dus als je consistent wilt blijven met je linebreaks (wat ik me bij protocollen en email goed kan voorstellen) moet je juist geen PHP_EOL gebruiken. :)

Dus wat dat betreft is een eigen constante geen slechte keuze.
Martijn Wieringa
Martijn Wieringa
20 jaar geleden
 
0 +1 -0 -1
@SanThe

Van "Mail Injection" is alleen sprake bij het manipuleren van de e-mail headers.
Gezien de parameters "from", "to" en "subject" 'hard' in de code gedefinieerd worden is injection uitgesloten.
Arian Stolwijk
Arian Stolwijk
20 jaar geleden
 
0 +1 -0 -1
@ Jelmer, oke, dat wist ik nog niet of had ik nog niet helemaal bij stilgestaan ;)
- SanThe -
- SanThe -
20 jaar geleden
 
0 +1 -0 -1
@Pholeron: Email injection is ook mogelijk via subject en body.
Appz
Appz
20 jaar geleden
 
0 +1 -0 -1
ik vind hem leuk. thnx.
Wel jammer dat er geen email validator in zit (tis toch een emailformulier toch?)
Martijn Wieringa
Martijn Wieringa
20 jaar geleden
 
0 +1 -0 -1
@SanThe

De subject wordt 'hard' gedefinieerd, en is dus niet te manipuleren door de bezoeker die het formulier gaat invullen.

De inhoud is (bij mijn weten) alleen gevoelig voor 'injection' als in de header "Content-Type: multipart/mixed" gedefinieerd is. En dan moet de bezoeker ook de 'boundry' code weten.

Gezien deze code niet dergelijke headers definieerd lijkt mij dit dus geen enkel probleem.
Seti Soeparman
Seti Soeparman
16 jaar geleden
 
0 +1 -1 -1
@martijn wieringa

ik heb met jou formgenarator een simpel formuliertje gemaakt, maar nu wil ik er een postcode check en telefoonnummer check inmaken, nou heb ik die script al gevonden

Quote:
if (isset($_REQUEST['field_2']))
// Als telefoonnummer is ingevuld, ga verder

// controleer telefoonnummer

if(preg_match('/^[0-9]{2}-[0-9]{8}$/',$_REQUEST['field_2']) OR preg_match('/^[0-9]{3}-[0-9]{7}$/',$_REQUEST['field_2']) OR preg_match('/^[0-9]{4}-[0-9]{6}$/',$_REQUEST['telnr']) OR preg_match('/^[0-9]{10}$/',$_REQUEST['field_2']))
{

// controleer postcode
if (preg_match('/[0-9]{4}[ ]?[a-z]{2}/i', trim($_REQUEST['field_3'])))
{

// Verstuur email

// Haal het streepje weg, in de email, tussen het telefoonnummer
$field_2 = str_replace('-', '', $_REQUEST['field_2']);
// Haal de spatie weg tussen de cijfers en letters postcode
$field_3 = str_replace(' ', '', $_REQUEST['field_3']);



maar als ik die tussen het de codes inpak doet die het niet, kan jij me daarmee helpen?
Jasper DS
Jasper DS
16 jaar geleden
 
0 +1 -0 -1
misschien had je er even op kunnen letten dat dit script al 3 JAAR oud is!
Seti Soeparman
Seti Soeparman
16 jaar geleden
 
0 +1 -0 -1
maakt dat wat uit? hij werkt nog steeds..
Martijn Wieringa
Martijn Wieringa
16 jaar geleden
 
0 +1 -0 -1
Je kunt in het fragment waar de velden worden uitgelezen uit de $_POST variabele extra checks toevoegen.

Ste dat veld 'field_4' je postcode is, en 'field_6' je telefoonnummer, dan zou je de code zo kunnen aanpassen:

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
<?php

    // Process form
    if(empty($_POST['form']) == false)
    {

        $field_1 = getPost('field_1', true);
        if(strlen($field_1) == 0) { $sFormError = 'Vul a.u.b. alle verplichte velden in.'; }
        $field_2 = getPost('field_2', true);
        $field_3 = getPost('field_3', true);
        $field_4 = getPost('field_4', true);
        $field_5 = getPost('field_5', true);
        $field_6 = getPost('field_6', true);

        // Controleer postcode veld
        if(!isPostalcode($field_4)) { $sFormError .= ($sFormError ? '<br>' : '') . 'Vul a.u.b. een geldige postcode in.'; }

        // Controleer telefoonnummer veld
        if(!isPhonenumber($field_6)) { $sFormError .= ($sFormError ? '<br>' : '') . 'Vul a.u.b. eengeldig telefoonnummer in.'; }
    }


?>


Aan jou om vervolgens de controle functies uit te werken en beschikbaar te maken in het PHP script.

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
<?php

// Valideer postcode
function isPostalcode($sValue)
{

    return false;
}


// Valideer telefoonnummer
function isPhonenumber($sValue)
{

    return false;
}


?>
Seti Soeparman
Seti Soeparman
16 jaar geleden
 
0 +1 -0 -1
oke bedankt!

ga hier maar is mee aan de slag
Seti Soeparman
Seti Soeparman
16 jaar geleden
 
0 +1 -0 -1
het is gelukt!

bedankt!
Martijn Wieringa
Martijn Wieringa
16 jaar geleden
 
0 +1 -0 -1
Goed bezig, (y)
Ruud Steenhuisen
Ruud Steenhuisen
12 jaar geleden
 
0 +1 -0 -1
Ik heb hulp nodig met het herschriven of corrigeren van mijn PHP bestelformulier op mijn website. Ik kan niet programmeren en mijn programmeur heeft me in de steek gelaten. Wie kan me helpen?
Ozzie PHP
Ozzie PHP
12 jaar geleden
 
0 +1 -0 -1
Beste Ruud,

Zou je zo vriendelijk willen zijn om een nieuw topic op het forum te plaatsen? Je reageert nu namelijk op een tutorial van 8 jaar oud. Niet de juiste plek ;)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Johan de wit
johan de wit
12 jaar geleden
 
0 +1 -0 -1
Jammer dat deze script niet uptodate is.

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

Inhoudsopgave

  1. email-formulier-generator

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.