Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

Handleiding verwerken data formulier

bewerkt ma 9 feb 2015 in Tutorials (Develop) Posts: 879
Op verzoek van een of meerdere members die graag een handleiding ter beschikking willen hebben over het verwerken van data met een contactformulier.

Hieronder een handleiding hoe je met een bestaand formulier de data kan verwerken met php code.
We gebruiken hiervoor een standaard eenvoudig contactformulier.

Onderstaand een eenvoudig contactformulier:

<form method="post" action="">
Naam: <br />
<input type="text" name="naam" />
<br /><br />
Achternaam:<br />
<input type="text" name="achternaam" />
<br /><br />
Adres:<br />
<input type="text" name="adres" />
<br /><br />
Woonplaats:<br />
<input type="text" name="woonplaats" />
<br /><br />
Email: <br />
<input type="text" name="email" />
Bericht:<br />
<textarea name="bericht" style="width: 300px; height: 150px;"></textarea>
<br /><br />
<input type="submit" value="Verzenden" />
</form>

Elk formulier zal er min of meer zo uitzien. Om de inputdata nu te verzenden met php zijn een aantal dingen belangrijk om op te merken:
In de eerste regel zien we dat we de post methode gebruiken om de data te verwerken. Daarnaast zien we een action die leeg is (kom ik later op terug).
De inputvelden:
Merk op dat elke input veld een name attribuut heeft die uniek is voor dat inputveld (mag niet 2 keer hetzelfde name attribuut gebruiken voor de inputvelden).
Welke naam je het name attr.geeft maakt niet uit, maak het echter zo logisch mogelijk voor jezelf.
Het laatste inputveld is de submit met daarin type="submit"; dit inputvleld kan niet ingevuld worden, vandaar type="submit ipv type="text" De value kun je natuurlijk zelf kiezen.
De form alsmede de inputvelden kunnen ook nog id's of classes bij zich hebben maar die zijn niet relevant voor het verwerken van de data.

Hoe nu de ingevulde data uitlezen met php code?
Als eerste gaan we de ingevulde velden uitlezen met php code. Dit doen we met $_POST, ook wel een superglobal genoemd.
We gaan nu de uitgelezen waarde van de inputvelden toekennen aan variabelen.
Dit doen we als volgt:

$Naam = $_POST['naam'];
Wat hierboven staat betekent: Aan de variable Naam ($Naam)ken je de inputwaarde van het inputveld met het attribuur naam toe.
zo doe je dat ook met de andere inputvelden:

$Achternaam = $_POST['achternaam'];
$Adres = $_POST['adres'];
$Woonplaats = $_POST['woonplaats'];
$Email = $_POST['email'];
$Bericht = $_POST['bericht'];
We hebben nu alle waarden van de inputvelden aan een variabele gekoppeld.

Vervolgens gaan we de body voor de email maken.
We willen graag een nette email maken waarin staat:
Naam: de waarde
Achternaam: de waarde
Adres: de waarde
Woonplaats: de waarde
Email: de waarde
Bericht: het bericht

Om dit netjes te krijgen voor de emailclient en om alle waardes toe te kennen aan een grote variabele ($body)maken we deze lijst:

$body = "";
$body .= "Naam: ";
$body .= $naam;
$body .= "\n";
$body .= "Onderwerp: ";
$body .= $onderwerp;
$body .= "\n";
$body .= "Email: ";
$body .= $email;
$body .= "\n";
$body .= "Bericht: ";
$body .= $bericht;
$body .= "\n";
Hierboven staat nu: de variabele $body krijgt de tekst "Naam" met daarachter de waarde wat bij naam ingevuld is en vervolgens een "\n"; wat een break betekent, (nieuwe regel)
Merk op dat vanaf de 2e $body een dot (glue zoals ze het noemen )staat. Dit betekent: de variabele $body krijgt nog meer gegevens aan zich toegekend. Na de eerste toekenning van een waarde moet er een . (dot )gebruikt worden om de andere waardes er ook aan toe te kennen. (glue betekent dus: lijm er aan vast)
De variabele $body heeft nu alle waardes van alle inputvelden bij zich + die van de textarea ( textarea is eigengelijk een gewoon inputveld met dien verstande dat hier meerdere regels in getypt kunnen worden).
Nu is de body voor de email klaar.
Maar een email moet ook een onderwerp hebben.
dit ondeerwerp kun je zelf bepalen bijv: Contactformulier.
We maken een variabele waarin de naam"Contactformulier" gekoppeld wordt aan die variabele:

$onderwerp = "Contactformulier";
Hierboven staat: ken de tekst Contactformulier toe aan de variabele $onderwerp
Waar moet de email naar toe gezonden worden?
Ook hier weer maken we een variabele met het emailadres erin waar de email naartoe gezonden dient te worden:
$ontvanger = "jouw@email.com";
En als laatste hebben we nog een zgn header nodig; daarin staat o.a. waar de email van afkomstig is ( anders wordt het al snel door een emailclient als spam gezien en dat willen we niet. Maar er staat ook in de MIME version en het Content-Type (welke soort data wordt verstuurd). Lees hier meer over: http://nl.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions. Deze waardes zijn belangrijk voor de emailclients zodat ze weten met welke soort data ze te maken hebben.

Alles op een rijtje hebben we nu:

// definieren variabelen
$ontvanger = 'jouw@email.com'; // HIEW JOUW EMAIL INVULLEN
$onderwerp = "Contactformulier"; // onderwerp wat in de email te zien is
$naam = $_POST['naam'];
$achternaam = $_POST['achternaam'];
$adres = $_POST['adres'];
$woonplaats = $_POST['woonplaats'];
$email = $_POST['email'];
$bericht = $_POST['bericht'];


// headers opmaken
$headers = 'MIME-Version: 1.0';
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= 'From: '.$email;


// body voor de email opmaken
$body = "";
$body .= "Naam: ";
$body .= $naam;
$body .= "\n";
$body .= "Achternaam: ";
$body .= $achternaam;
$body .= "\n";
$body .= "Adres: ";
$body .= $adres;
$body .= "\n";
$body .= "Woonplaats: ";
$body .= $woonplaats;
$body .= "\n";
$body .= "Email: ";
$body .= $email;
$body .= "\n";
$body .= "Bericht: ";
$body .= $bericht;
$body .= "\n";

Nu gaan we de email verzenden:
We gbruiken hiervoor het mail command.
Binnen het mail command hebben we 4 parameters: de ontvanger, het onderwerp de body en de headers, allen gescheiden met een komma.

mail($otnvanger, $onderwerp, $body, $headers);
Als we de email verzenden willen we graag weten of dat ook gelukt is en het is voor de klant ook prettig om te weten of zijn ingevulde formulier ook daadwerkelijk verstuurd is.
We doen hier een check op met een if/else loopje:
Allereerst maken we het mail command weer onderdeel van een variabele genaamd $formsent
Dit hoeft niet perse maar persoonlijk vind ik het overzichtelijker om dit even apart toe te kennen.

$formsent = mail($ontvanger, $onderwerp, $body, $headers);
Hierboven is het hele mailcommand met de parameters toegekend aan de variabele $formsent
Het loopje:

// echo's als email is verzonden
if ($formsent){
echo 'Uw bericht is successvol verstuurd!<br /><br />';
}
else{
echo 'Sorry, maar er is iets misgegaan met het versturen, probeer het later nog eens.';
}
De check vind plaats door de php server. Als de email succesvol de deur uit is geeft ie de melding : Uw bericht is successvol verstuurd!. Omdat het een echo is wordt deze tekst ook op de webpagina getoond. Als het door een of andere oorzaak is mislukt krijgt men de melding: Sorry, maar er is iets misgegaan met het versturen, probeer het later nog eens.
De inhoud van de echo's kun je natuurlijk zelf bepalen.

We hebben nu een alles klaar om de data uit te lezen, toe te kennen aan variabelen en die vlg mail command te verzenden.
Het enige wat me nu nog moeten bepalen is hoe deze php code wordt aangeroepen als je op de sumbit drukt van ons formulier (Verzendknop).
Daarin hebben we verschillende mogelijkheden. Dit bepalen we met de action in ons fomulier.
1. Willen we de verzending ( en de echos' ) laten geschieden op dezelfde pagina als het formulier staat? Dan blijft onze action leeg (action="") en zetten we de hele php code boven het formulier.
Wat nu belangrijk is is te checken of ons formulier op een html pagina staat (.html). Omdat er nu op dezelfde pagina php code staat moeten we de .html extensie vervangen door .php extensie; anders worst de php code neit uitgevoerd omdat de php server alleen maar pagina's met .php op het eind kan lezen.
We gebruiken hiervoor weer een if loopje. Waarom doen we dat?
Als we deze code (php en ons formulier) op een pagina zetten bijv.contact.php dan zullen er onmiddelijk een aantal errors op het beeld komen. Waarom? De php server zal beginnen met de php code en komt erachter dat de variabelen nog leeg zijn, immers we hebben nog niets ingevuld in de inputvelden. Daarom mag hij die code pas gaan lezen nadat we iets hebben ingevuld en op submit hebben gedrukt.
Dus:

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// hier de hele php code
} //afsluiten van de if loop

of

if($_POST['submit']) // als er submit heeft plaatsgevonden
{
// hele php code
} //afsluiten van de if loop

2. Een andere manier om de php code uit te voeren is de php code los te koppelen van ons formulier.
Hiervoor moeten we de action wel een waarde geven; nl: waar moet ie naartoe gezonden worden als er op submit is gedrukt?
Stel je wilt de php code alleen plaatsen in een bestand verwerk.php en je formulier wil je gewoon blijven houden in bijv. contact.html (dit mag nu .html heten omdat er geen php code meer in staat).
In de action zetten we nu: action="verwerk.php".
Als er nu op submit gedrukt wordt in ons formulier wordt de data doorgestuurd naar verwerk.php en de code in verwerk.php zal de data versturen. Bedenk wel dat de echo's dus uitgevoerd worden op de pagina verwerk.php die verschijnt na het submitten.

3. Nog een andere manier is een soort bedanktpagina te maken waarna je wordt doorgestuurd als de form succesvol verzonden is en een soort fout pgina als verzenden mislukt is.
Het maakt hiervoor niet uit of je methode 1 of 2 kiest hierboven maar ipv een echo stuur je de bezoeker door naar een andere pagina (afh of goed of fout is gegaan).

// doorsturen naar bedanktpagina
if ($formsent){
header('Location: bedankt.html');
}
else{
header('Location: mislukt.html');
}

De pagina's bedankt.html en lislukt.html kun je natuurlijk zelf maken.

Deze basis handleiding alvast gepost voor degenene die erom vroegen, wordt nog aangevuld met spamcheck, verplichte velden etc.
«1

Reacties

  • bewerkt di 10 feb 2015
    PMPosts: 117
    Helemaal goed en erg behulpzaam dat je dit wilt doen Nuet!
    Ik zit nu met dit contact-form:

    Hoe kan ik al het bovenstaande info erin verwerken dan? De vorig keer ging het wat simpeler toch?
    Volgens mij is bovenstaand echt totaal iets nieuws (op) bouwen right?
    Hoe kan ik dit bovenstaande hierin verwerken dan? Dan kan ik het vergelijken met die ander... is voor mij beter te volgen :-)

    Dank je wel alvast Nuet!

    Groet, Carlos!
  • bewerkt ma 9 feb 2015
    PMPosts: 879
    De pagina waar je contactformulier staat: http://a-vanreeven.nl/test/contact.html
    Deze pagina heeft de volgende form:

    <form id="contact-form-example" class="contact-form" method="post" action="sendmail.php" enctype="multipart/form-data">
    <div class="usermessagea"></div>
    <fieldset>
    <ul>
    <li class="text-field">
    <label for="name-example">
    <span class="label">Uw naam</span>
    </label>
    <div class="input-prepend"><span class="add-on"><i class="icon-user"></i></span><input type="text" name="name" id="name-example" class="required" value="" /></div>
    <div class="msg-error"></div>
    </li>
    <li class="text-field">
    <label for="email-example">
    <span class="label">Uw E-mailadres</span>
    </label>
    <div class="input-prepend"><span class="add-on"><i class="icon-envelope"></i></span><input type="text" name="email" id="email-example" class="required email-validate" value="" /></div>
    <div class="msg-error"></div>
    </li>
    <li class="textarea-field">
    <label for="message-example">
    <span class="label">Uw Bericht</span>
    </label>
    <div class="input-prepend"><span class="add-on"><i class="icon-pencil"></i></span><textarea name="message" id="message-example" rows="8" cols="30" class="required"></textarea></div>
    <div class="msg-error"></div>
    </li>
    <li class="submit-button">
    <input type="text" name="yiw_bot" id="yiw_bot" />
    <input type="hidden" name="action" value="sendmail" id="action" />
    <input type="hidden" name="id_form" value="example" />
    <input type="submit" name="sendemail" value="Zend bericht" class="sendmail alignright" />
    </li>
    </ul>
    </fieldset>
    </form>

    Kijk eens goed naar deze form en probeer eens zelf de variabelen te maken die bij de inputvelden horen.
    In je form zie je id's en classes maar die zijn alleen interessant voor de styling.
    Wat belangrijk is is de action: sendmail.php en de name attributen bij de inputvelden:

    <input type="text" name="name" id="name-example" class="required" value="" />
    <input type="text" name="email" id="email-example" class="required email-validate" value="" />
    <textarea name="message" id="message-example" rows="8" cols="30" class="required">
    <input type="submit" name="sendemail" value="Zend bericht" class="sendmail alignright" />
    Dit is alles wat je nodig hebt om de data af te handelen. Lees de handleiding eens rustig door en ga zelf eens stoeien met die materie. Als je ergens niet uitkomt hoor ik het wel.
  • PMPosts: 117
    Hallo Nuet,

    Dank je man! Nu 3 uur mee lopen stoeien. Ik ben eerlijk gezegd de draad een beetje kwijt. Ik snap er maar weinig van dat PhP gebeuren :o) Ik zie dat hij communiceert via t sendmail.php maar wat ik er (het contact pagina, html) boven moet zetten en eronder is mij even niet goed duidelijk. Ik begrijp ook dat ik de labels en input moet veranderen omdat niet elk contact formulier t zelfde is. Voorheen liet je mij zien dat ik er wat boven moest zetten om het PhP te laten communiceren... Ik hoor graag je hulp! Grt Carlos!
  • bewerkt di 10 feb 2015
    PMPosts: 879
    je hoeft de bovenstaande form niet te veranderen; die is goed zoals die is. Alleen je moet nu op basis van die form de php code gaan maken voor de afhandeling.
    Laten we stap voor stap beginnen:
    Als allereerst zien we dat de action="sendmail.php" is. Dit kunnen we zo laten staan, maar dat wil dan wel zeggen dat de php code in die sendmail.php moet komen.
    We kijken vervolgens naar de inputvelden en de name attributen hiervan.
    Dit zijn er 4 in jouw form:

    <input type="text" name="name" id="name-example" class="required" value="" />
    <input type="text" name="email" id="email-example" class="required email-validate" value="" />
    <textarea name="message" id="message-example" rows="8" cols="30" class="required">
    <input type="submit" name="sendemail" value="Zend bericht" class="sendmail alignright" />
    De 1e heeft name="name"; we maken vervolgens een variabele die dit veld uitleest:

    $naam = $_POST['name']; //lees: de variable met de naam $naam (zelf te kiezen) krijgt de waarde van het name attribuut "name"
    Dit doen we ook met de andere 2:

    $email = $_POST['email'];
    $bericht = $_POST['message'];
    De laatste is de submit, die hoeven we niet uit te lezen.
    Je onderwerp van de email wordt bijvoorbeeld: Contactformulier, dus:

    $onderwerp = 'Contactformulier';
    De ontvanger wordt bijv.carlos@carlos.com:

    $ontvanger = 'carlos@carlos.com';

    Dan nu de body opmaken voor de email:

    // body voor de email opmaken
    $body = "";
    $body .= "Naam: ";
    $body .= $naam;
    $body .= "\n";

    $body .= "Email: ";
    $body .= $email;
    $body .= "\n";

    $body .= "Bericht: ";
    $body .= $bericht;
    $body .= "\n";
    En de headers:

    // headers opmaken
    $headers = 'MIME-Version: 1.0';
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    $headers .= 'From: '.$email;
    Vervolgens de mail versturen met echo's:

    // email verzenden
    $formsent = mail($ontvanger, $onderwerp, $body, $headers);

    // echo's als email is verzonden
    if ($formsent){
    echo 'Uw bericht is successvol verstuurd!<br /><br />';
    }
    else{
    echo 'Sorry, maar er is iets misgegaan met het versturen, probeer het later nog eens.';
    }

    Als we ervoor kiezen dat deze code in sendmail.php moet komen (zoals de action in de form al weergeeft), zijn we klaar.
    De totale code van sendmail.php wordt dan:

    // uitlezen van de inputvelden
    $naam = $_POST['name'];
    $email = $_POST['email'];
    $bericht = $_POST['message'];

    // onderwerp email en ontvanger:
    $onderwerp = 'Contactformulier';
    $ontvanger = 'carlos@carlos.com';

    // headers
    $headers = 'MIME-Version: 1.0';
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    $headers .= 'From: '.$email;

    // body voor de email opmaken
    $body = "";
    $body .= "Naam: ";
    $body .= $naam;
    $body .= "\n";

    $body .= "Email: ";
    $body .= $email;
    $body .= "\n";

    $body .= "Bericht: ";
    $body .= $bericht;
    $body .= "\n";

    // email verzenden
    $formsent = mail($ontvanger, $onderwerp, $body, $headers);

    // de echo's
    if ($formsent){
    echo 'Uw bericht is successvol verstuurd!<br /><br />';
    }
    else{
    echo 'Sorry, maar er is iets misgegaan met het versturen, probeer het later nog eens.';
    }

    Het bestand sendmail.php moet je nu wel plaatsen in dezelfde map als waarin je contactformulier staat, wan de action gaat gelijk naar sendmail.php; als ie in een andere map staat moet je de action aanpassen van de form:
    action="pad/naar/sendmail.php"

    Dit is wel de meest basale vorm van data uit een contatcformulier verwerken. We hebben geen spamcheck , geen check op het emailveld of hier wel een geldig emailadres is ingevuld.
    Probeer dit maar eens eerst uit of het werkt.





  • Hallo Nuet,

    Dank je wel man! Echt top dit.
    Jou waarde voegt echt iets toe op dit forum!
    Ik ga er mee verder stoeien. Ik laat het je weten.
    Dank je nogmaals man!
    Gr, Carlos!
    nuetReneV
  • Beste Nuet,

    Ik heb er mee gestoeit. Ik had hetgeen wat jij had gemaakt in de sendmail.php gezet en dat werkte. Alleen kreeg ik na het zenden een witte pagina te zien met de verzend-gelukt boodschap. Ik wil het eigenlijk zo hebben, dat als ik verzonden heb, ik de boodschap dan zie in de huidige vormgeving/pagina. Hoe pak ik dit aan? Is dit veel extra werk? De vorige uitleg bij de andere website ging het wat simpeler toch? Ik hoor t wel. Thanks!
    Groet, Carlos!
  • bewerkt di 17 feb 2015
    PMPosts: 879
    het allermakkelijste is je sendmail.php terug includen direct boven je form:

    Dus in de pagina waar je form staat:


    <?php
    include ('sendmail.php');
    ?>
    <form id=.....clas=.....etc
    .........
    </form>
    Nu komt de echo van " Verzenden is gelukt blablabla."...direct boven de form tevoorschijn als je verzonden hebt.
    NB: de pagina waarin je form staat, (ik denk contact.html) moet je wel .php laten heten op het laatst en niet meer .html (bijv contact.php) en sendmail.php moet in dezelfde map staan als het bestand waarin je form staat.

  • bewerkt wo 18 feb 2015
    PMPosts: 117
    Hi Nuet,

    Dank je man. Zoals jij zegt toegevoegd en goed gezet.
    Alleen zie ik nu dit na verzenden?

    Not Found

    The requested URL /contact_success.html was not found on this server.

    Hij springt dus naar: contact_success.html die er volgens mij niet is?
    Iets in de JS? Volgens mij staat alles nu zo goed? verders?
    www.a-vanreeven.nl

    Dank je weer!
  • bewerkt wo 18 feb 2015
    PMPosts: 879
    Ja op de een of andere manier springt ie naar contact_success.html of naar contact_error.html na de submit. Kan niet 1-2-3 vinden waar dit in het javascript staat maar laat het gewoon zo staan. Wat je nu het beste kunt doen is een copie maken van je contact.php zonder de php code erin ( dus de include eruit halen) en die pagina noem je contact_success.html. In contact_success.html haal je de form weg en zet daar iets neer van "Uw bericht is successvol verzonden......" of iets dergelijks; gewoon in html tekst.
    Ditzelfde doe je ook met contact_error.html Kopieer contact.php nog eens zonder de php code en noem dit contact_error.html.. Verwijder hierin ook de form en zet op die plaats iets van "U heeft niet alle velden correct ingevuld..." want de javascript checkt de inputvelden en stuurt bij niet correct ingevulde velden je door naar die contact_error.html.
    Je kunt nu ook de echo's in sendmail.php weglaten omdat die geen functie meer hebben.
    Dus in sendmail.php dit weghalen:

    // de echo's
    if ($formsent){
    echo 'Uw bericht is successvol verstuurd!<br /><br />';
    }
    else{
    echo 'Sorry, maar er is iets misgegaan met het versturen, probeer het later nog eens.';
    }
  • Oke dank je! Dus ik maak van contact.php -> 2 kopies en de 1 noem ik contact_success.html en de ander noem ik contact_error.html
    Vervolgens haal ik in de 2 kopies de include weg, en zet ik in contact_success.html Uw bericht is succesvol verstuurd neer, en in contact_error.html zet ik "U heeft niet alle velden correct ingevuld..." neer?

    En dan haal ik in sendmail.php de bovenstaande echo's weg?

    Klopt het wat ik nu samenvat?

    Onwijs bedankt Nuet! Wordt weer erg gewaardeerd! Ik hoor het! Thanks!
    Gr, Carlos!
  • bewerkt wo 18 feb 2015
    PMPosts: 732
    Ik weet niet of je hier iets mee kunt doen.

    Er is een javascript controlle op legen velden met waarschuwing plus een soort van spam check.
    Zodra email succesvol is verzonden krijgen de input velden een andere kleur plus de submit button wordt disabled en krijgt een andere tekst zoals (bericht is verzonden).

    In de php action file is er tevens nog een spam check, indien men javascript disabled.

    index.php of index.html


    <!DOCTYPE html>
    <html>
    <head>

    <script type="text/javascript">
    $(document).ready(function(){

    $('#submit').click(function(e){
    e.preventDefault();
    var error = false;
    var email = $('#email').val();
    var name = $('#name').val();
    var poster = $('#poster').val();
    var message = $('#message').val();

    $('input, textarea').focus(function(){
    $(this).parent().find('.error').removeClass('active');
    });

    if(email == ''){
    var error = false;
    } else {
    var error = true;
    $('#submit').attr({'disabled':'true','value':'Geen spam toegestaan!'});
    }

    if(name == ''){
    var error = true;
    $('#name').parent().find('.error').addClass('active');
    }else{
    $('#name').parent().find('.error').removeClass('active');
    }

    if(poster.length == 0 || poster.indexOf('@') == '-1'){
    var error = true;
    $('#poster').parent().find('.error').addClass('active');
    }else{
    $('#poster').parent().find('.error').removeClass('active');
    }

    if(message == ''){
    var error = true;
    $('#message').parent().find('.error').addClass('active');
    }else{
    $('#message').parent().find('.error').removeClass('active');
    }

    if(error == false){
    $('#submit').attr({'disabled':'true','value':'Verzenden'});
    $.post("formular.php", $("#form").serialize(),function(result){
    if(result == 'verzonden'){
    $('#submit').attr({'disabled':'true','value':'Bericht is verzonden!'});
    $('#submit, .message').addClass('active');
    $('#name, #poster, #message').addClass('color');
    $('#name, #email, #poster, #message').attr({'disabled':'true'});
    }else{
    $('#submit').removeAttr('disabled').attr('value', 'Fout, probeer opnieuw!');
    }
    });
    }
    });
    });

    </script>
    <style>
    #email { display:none }
    input.color { border-color:red }
    </style>

    </head>
    <body>

    <form name="form" id="form" role="form">
    <input id="email" name="email" type="email" value="" placeholder="email">

    <input id="name" name="name" type="text" value="" placeholder="Uw naam">
    <div class="error"> Vermeld uw naam</div>

    <input id="poster" name="poster" type="text" value="" placeholder="E-mail adres">
    <div class="error"> Vermeld een geldig e-mail</div>

    <textarea id="message" name="message" placeholder="Vraag of opmerking"></textarea>
    <div class="error"> Vermeld een bericht</div>

    <input id="submit" type="submit" value="Verzenden">

    </form>

    </body>
    </html>

    formular.php


    <?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ( empty ( $_POST['email'] ) ) {
    $to = "jouw@emailadres.nl";
    $name = $_POST['name'];
    $poster = $_POST['poster'];
    $message = $_POST['message'];
    $from = stripslashes($name)."<".stripslashes($poster).">";
    $subject = "Contactformulier: $name";
    $body = 'Naam: ' . $name . "\r\n";
    $body .= 'E-mail: ' . $poster . "\r\n\r\n";
    $body .= 'Bericht: ' . "\r\n" . $message . "\r\n";
    $headers = "From: $from\n";
    if (@mail($to, $subject, $body, $headers)) {
    echo 'verzonden';
    } else {
    echo 'fout';
    }
    }
    }
    ?>
    nuet
    If it's not fun, you're not doing it right!
  • bewerkt wo 18 feb 2015
    PMPosts: 117
    Nuet ik krijg t maar niet voor elkaar? Kan jij mij helpen op afstand? of kan ik jou de bestanden sturen?
    Wat heb jij eventueel nodig?

    Ik krijg na verzenden nu dit te zien:

    // uitlezen van de inputvelden $naam = $_POST['name']; $email = $_POST['email']; $bericht = $_POST['message']; // onderwerp email en ontvanger: $onderwerp = 'Contactformulier'; $ontvanger = 'carlos@carlos.com'; // headers $headers = 'MIME-Version: 1.0'; $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; $headers .= 'From: '.$email; // body voor de email opmaken $body = ""; $body .= "Naam: "; $body .= $naam; $body .= "\n"; $body .= "Email: "; $body .= $email; $body .= "\n"; $body .= "Bericht: "; $body .= $bericht; $body .= "\n"; // email verzenden $formsent = mail($ontvanger, $onderwerp, $body, $headers); }

    Dit klopt denk ik niet, wat gaat er nu fout.
    Hoor het... ik heb bovenstaande stappen opgevolgd.
    Gr, Carlos!
  • PMPosts: 879
    Bovenstaande code, waar zie je die verschijnen, in contact_success.html?
  • Hi Nuet,

    Nee, na op verzenden geklikt te hebben verscijnt de code hier: --> sendmail.php
    Greetz
  • PMPosts: 879
    stuur me eens alle bestanden van je webpagina; zip ze in en post ze als bijlage
  • Ik had ze je al gestuurd, naar je gmail... :) Is dit ok?
  • bewerkt do 19 feb 2015
    PMPosts: 879
    Tja geen wonder dat de code als html gepresenteerd wordt; je had geen php openingstag en sluittag in sendmail.php. Een php bestand begint altijd met

    <?php // openingstag
    // hier de code
    ?>// sluittag

    en je had een bracket teveel onderaan "}"


    Jouw sendmail.php moet er zo uitzien:

    <?php
    // uitlezen van de inputvelden
    $naam = $_POST['name'];
    $email = $_POST['email'];
    $bericht = $_POST['message'];

    // onderwerp email en ontvanger:
    $onderwerp = 'Contactformulier';
    $ontvanger = 'jouw@email.com'; // HIER JOUW EMAIL INVULLEN

    // headers
    $headers = 'MIME-Version: 1.0';
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    $headers .= 'From: '.$email;

    // body voor de email opmaken
    $body = "";
    $body .= "Naam: ";
    $body .= $naam;
    $body .= "\n";

    $body .= "Email: ";
    $body .= $email;
    $body .= "\n";

    $body .= "Bericht: ";
    $body .= $bericht;
    $body .= "\n";

    // email verzenden
    $formsent = mail($ontvanger, $onderwerp, $body, $headers);
    ?>

    Als het goed is wordt je nu doorverwezen naar contact_success.html als je alle velden correct invult, anders naar contact_error.html

    Mocht het zo zijn dat ie op sendmail.php blijft hangen dan verwijzen we hem door naar de success pagina op de volgende manier:
    Onder de laatste regel van sendmail.php zet je de doorverwijzing; het laatste stukje ziet er dan zo uit::

    // email verzenden
    $formsent = mail($ontvanger, $onderwerp, $body, $headers);

    // doorverwijzen als email is verzonden / mislukt
    if ($formsent){
    header('Location: contact_success.html');
    }
    else{
    header('Location: contact_error.html');
    }

    ?>


  • Thanks Nuet, ik ga er weer mee aan de slag :) :)
  • PMPosts: 879
    TIP: Begin eens gewoon op een speelse manier met de basisbeginselen van php. Met deze link kun makkelijk de basisbeginselen van php oefenen op een leuke manier. http://www.codecademy.com
    Als je ingelogd bent kies dan voor PHP; er zijn ook nog andere dingen zoals javascript, jQuery, etc. wat je kunt keizen.
  • nuet schreef:: <?php // openingstag
    // hier de code
    ?>// sluittag
    h????l erg klein zeur puntje :P
    Maar na de php sluittag spreek je over html-comments, jou comment zal zichtbaar zijn in de html
    [/end flauwe opmerking]
    nuet
  • PMPosts: 879
    Hmmmmm ... je hebt gelijk :( moet dit zijn:


    <?php // openingstag
    // hier decode
    ?> <!-- sluittag -->

    Zeer pienter opgemerkt
    ;)

    BTW: op dit forum, alle .php bestanden hebben geen sluittag; enfin,dit is wel objectgeorienteerde code...
  • bewerkt do 19 feb 2015
    PMPosts: 415
    [offtopic continues, sorry..]
    Zelfs al spreek je over niet objects, dan nog hoef je php niet af te sluiten.

    Bv:
    index.php

    <?php
    include('eenBestand.php');
    ?><!--zelfs deze php sluittag mag weg als er niet meer code is-->

    eenBestand.php

    <?php
    echo 'woot ik mag meedoen'; /*let op geen sluittag*/

    index parsed wat je hoopt dat er geparsed werd..

    En vraag me niet waarom (I don't mind) maar het schijnt nog sneller te zijn ook als je je includes/requires/plugins niet afsluit!!
    nuet
  • Hallo Nuet,

    Ik heb jou een bericht gestuurd.... hoor het graag.
    Greetz! :)
  • PMPosts: 879
    Een klein dingetje ben je vergeten: in contact.php heb je de include vergeten weg te halen:

    Net boven je form:

    <?php
    include ('sendmail.php');
    ?>

    Die 3 regels moeten weg.
    Omdat er nu geen php code meer in staat mag je contact.php ook weer contact.html noemen, maar dat maakt niet veel uit. Kan allebei.
    carlos
  • bewerkt do 19 feb 2015
    PMPosts: 879
    @vinTage
    idd heb het nog even nagetrokken; php.net geeft hier ook melding van. Sluittag is niet verplicht tenzij er nog html achteraankomt. Als bestand alleen php code bevat is het zelfs aan te bevelen geen sluittag te gebruiken
    http://php.net/manual/en/language.basic-syntax.phptags.php
    ikke weer wat geleerd ;)
    carlos
  • bewerkt do 19 feb 2015
    PMPosts: 117
    Hi Nuet,

    Het is gelukt. T werkt volgens mij.
    En is een spamcheck en controle mogelijkheid moeilijk om er bij in te bouwen?
    Als ik nu poespas invul, of helemaal niets invul, dan verzend hij ook gewoon en gaat hij niet naar de error-pagina...
    Hoor het graag nog even, thanks. Wat mij betreft kan dit topic hierna op slot. :)
    Iedereen bedankt voor de medewerking!
    Greetz!
  • PMPosts: 879
    ja als je ff aangeeft wat je wil hebben; spamcheck, email validation check, verplichte velden? Zeg even wat je wilt hebben dan bouwen we het wel in
  • :o) Nou ja doe ze alle drie maar als dit natuurlijk kan voor jou? Zal top zijn.. :o)
    Thanks man!
  • bewerkt vr 20 feb 2015
    PMPosts: 879
    voor de email check maken we een functie aan eerst:

    // functie spamcheck
    function spamcheck($field)
    {
    $field=filter_var($field, FILTER_SANITIZE_EMAIL);
    if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }
    Deze gaan we later aanroepen. Deze checkt of er een geldig emailadres wordt gebruikt en dat er geen 2 of meer emailadressen worden ingevuld bij het emailveld.
    Voor de spamcheck gebruiken we een extra inputveld waarin de gebruiker een waarde moet invullen die gechecked wordt of die correct is.
    Bijvoorbeeld:

    <input name="ik-ben-een-persoon" type="text" value="achtentwintig" />
    Vervolgens vragen we de gebruiker: "type in het veld hieronder in letters het getal 28
    De check ziet er dan zo uit:

    // checken of een robot ons formulier bezoekt
    if($_POST['ik-ben-een-persoon'] != 'achtentwintig') {
    die();
    }
    Als er niets is ingevuld of iets anders dan achtentwintig loopt het script dood en wordt er niets verzonden.
    Als laatste de verplichte velden: we zullen ze alledrie verplicht maken en dat doen we op de meest eenvoudige manier door gewoon het veld required toe te voegen aan de inputvleden in je form:

    Hoe dit te realiseren:
    In je form voeg je bij elk inputveld de required regel toe en het extra veld voor de spamcheck; de inputvleden bij je form ( 2 input en 1 textarea) zien er nu dus zo uit:


    <input type="text" name="name" id="name-example" class="required" value="" required />
    <input type="text" name="email" id="email-example" class="required email-validate" value="" required />
    <textarea name="message" id="message-example" rows="8" cols="30" class="required" required></textarea>
    Nu ik dit zo bekijk vind er al een check op die velden plaats met javascript maar blijkbaar werkt die niet omdat je aangaf dat er toch een lege email verzonden kon worden? Voor het geval dat die niet werkt zijn dit dus de aangepaste inputvelden van je form.
    Nu het extra inputveld van de spamcheck:
    Zet deze li tag net boven je li class="submit-button" in je form:


    <li class="text-field">
    <label for="name-example">
    <span class="label">Vul hieronder in <b>letters</b> het getal <b>28</b> in</b></span>
    </label>
    <div class="input-prepend"><span class="add-on"><i class="icon-envelope"></i></span><input type="text" name="ik-ben-een-persoon" id="" class="" value="achtentwintig" /></div>
    <div class="msg-error"></div>
    </li>

    En nu de aangepaste sendmail.php:

    <?php

    // functie spamcheck
    function spamcheck($field)
    {
    $field=filter_var($field, FILTER_SANITIZE_EMAIL);

    if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }

    // uitlezen van de inputvelden
    $naam = $_POST['name'];
    $email = $_POST['email'];
    $bericht = $_POST['message'];

    // onderwerp email en ontvanger:
    $onderwerp = 'Contactformulier';
    $ontvanger = 'carlos@carlos.com'; // JOUW EMAIL INVULLEN

    // headers
    $headers = 'MIME-Version: 1.0';
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    $headers .= 'From: '.$email;

    // body voor de email opmaken
    $body = "";
    $body .= "Naam: ";
    $body .= $naam;
    $body .= "\n";

    $body .= "Email: ";
    $body .= $email;
    $body .= "\n";

    $body .= "Bericht: ";
    $body .= $bericht;
    $body .= "\n";

    // mailcheck, wordt later gechecked
    $mailcheck = spamcheck($_POST['email']);

    // checken of een robot ons formulier bezoekt
    if($_POST['ik-ben-een-persoon'] != 'achtentwintig') {
    header('Location: contact_error.html');
    die(); // niets meer uitvoeren!
    }
    //check of email geldig is en geldige input is geleverd
    elseif ($mailcheck==FALSE) {
    header('Location: contact_error.html');
    }
    else {
    // email verzenden
    $formsent = mail($ontvanger, $onderwerp, $body, $headers);
    }
    ?>

Login of Registreer om te reageren.