Beste,

Ik heb een contactformulier wat na veel zoekwerk nu eindelijk naar mijn mail verstuurd wordt. Echter krijg ik geen melding dat deze verstuurd is. Ook als ik een veld niet invul krijg ik daar geen melding van, het formulier wordt ook niet naar de mail gestuurd.

Ik ben nieuw met php en weet ook niet zo goed waar ik moet zoeken. De codes heb ik van een uitleg op internet gekopieerd, dus ik heb geen idee waarom het bij mij niet werkt.

Het formulier: (index3.html)

<form action="" method="post" id="myform">
    <div>
        <label for="name">Name:</label><br>
        <input type="text" id="name" name="name" />
    </div>
    <div>
        <label for="surname">Surname:</label><br>
        <input type="text" id="surname" name="surname" />
    </div>
    <div>
        <label for="companyname">Company Name:</label><br>
        <input type="text" id="companyname" name="companyname" />
    </div>
    <div>
        <label for="email">E-mail:</label><br>
        <input type="email" id="email" name="email" />
    </div>
    <div>
        <label for="bericht">Message:</label><br>
        <textarea id="bericht" name="bericht"></textarea>
    </div>
    <div class="button">
        <button type="submit" name="submit">Send your message</button>
    </div>
</form>


PHP: (formverzenden.php)
<?php 
if(isset($_POST['submit'])){
    $naar = "[email protected]";
    $onderwerp  = "Contactformulier";

    if(!empty($_POST['name'])){
          $name = $_POST['name']; 
    }else{
          die("U heeft geen voornaam ingevuld");
    }

    if(!empty($_POST['surname'])){
          $surname = $_POST['surname']; 
    }else{
          die("U heeft geen achternaam ingevuld");
    }
	
    if(!empty($_POST['companyname'])){
          $companyname = $_POST['companyname']; 
    }else{
          die("U heeft geen bedrijfsnaam ingevuld");
    }
	
    if(!empty($_POST['email'])){
           $email = $_POST['email']; 
     }else{
           die("U heeft geen emailadres ingevuld");
     }
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) // Als het email adres niet correct is
    {
        print '<p>Helaas, het email adres is niet correct!</p>';
        $fout = true;
    }
    if(!empty($_POST['bericht'])){
           $bericht = $_POST['bericht']; 
     }else{
           die("U heeft geen bericht geschreven");
     }
    $sjabloon = "
    Naam: {name} {surname}
    Bedrijf: {companyname}
    Email adres: {email}
    Bericht: {bericht}
     ";
    $message = str_replace("{name}", $name, $sjabloon);
    $message = str_replace("{surname}", $surname, $sjabloon);
    $message = str_replace("{companyname}", $companyname, $sjabloon);
    $message = str_replace("{email}", $email, $message);
    $bericht = nl2br($bericht);
    $message = str_replace("{bericht}", $bericht, $message);

    $headers  = 'MIME-Version: 1.0\r\n';
    $headers .= 'Content-type: text/html; charset=iso-8859-1\r\n';
    $headers .= 'To: <' .$naar. '>\r\n';
    $headers .= 'From: ' .$name. ' ' .$surname. ' <' .$email. '>\r\n';

    if(mail($naar, $onderwerp, $message, $headers)){
         echo "De mail is succesvol verzonden, u wordt teruggestuurd naar het formulier";
         ?>
         <script language="javascript">setTimeout('document.location.href = "index3.html"', 2000);</script>
         <?
    }else{
         die("De mail kon niet verzonden worden, probeer later nog eens.");
    }

}else{
    die('U heeft het formulier niet ingevuld');
}
?>


Dit staat in de <script> tags:

   $(document).ready(function(){
        $("#myform").validate({
            debug: false,
            submitHandler: function(form) {
                // do other stuff for a valid form
                $.post('formverzenden.php', $("#myform").serialize(), function(data) {
                    $('#results').html(data);
                });
            }
        });
    });


Ook zie ik dat in de mail die ik ontvang {name} en {surname} niet worden ingevuld, terwijl dit bij {email}, {companyname} en {bericht} wel gebeurd.
Kunnen jullie me hiermee helpen?
Zet na <?php eens dit neer:

error_reporting(E_ALL);
ini_set('display_errors',true);


Zie je dan foutmeldingen verschijnen?
Ik ontvang wel de mail maar krijg geen foutmeldingen.
Welke foutmeldingen krijg je niet? En bij welke invoer?
Elk veld is verplicht, alleen bij het email veld krijg ik een melding als er geen @ of . in staat. Bij de rest krijg ik geen melding als ik deze leeg laat. Het formulier wordt dan ook niet naar de mail verstuurd. En als ik wel alle velden vul wordt de mail verstuurd alleen krijg je dit op de site niet te zien.
$message = str_replace("{name}", $name, $sjabloon);
$message = str_replace("{surname}", $surname, $sjabloon);
$message = str_replace("{companyname}", $companyname, $sjabloon);
$message = str_replace("{email}", $email, $message);


Je start altijd behalve bij email met het sjabloon. Dus enkel de laatste 2 worden omgezet.

Jan

ps: e-mail is met koppelteken

Je start altijd behalve bij email met het sjabloon. Dus enkel de laatste 2 worden omgezet.


Dan snap ik niet waarom companyname, email en bericht alle drie wel verstuurd worden. In de code zie ik geen verschil met name en surname.
Als je logisch kijk zie je dat overal een (vieze!) die() gebruikt en daar bij de controle van het mail adres een $fout = true'. En een print daarna.
Dat is niet consistent met de andere controles.

Anyway, die() beëindigt je script, en dat wíl je eigenlijk niet. Het zou mooier zijn als je alle fouten verzamelt, en daarna deze gezamenlijk toont .

Die str_replaces zijn ook overbodig, je kan de variabelen ook zelf gebruiken.

Ik kan later vandaag even een opzetje maken voor een beter contactformulier.
- Ariën - op 13/03/2019 09:40:21

Als je logisch kijk zie je dat overal een (vieze!) die() gebruikt en daar bij de controle van het mail adres een $fout = true'. En een print daarna.
Dat is niet consistent met de andere controles.

Anyway, die() beëindigt je script, en dat wíl je eigenlijk niet. Het zou mooier zijn als je alle fouten verzamelt, en daarna deze gezamenlijk toont .

Die str_replaces zijn ook overbodig, je kan de variabelen ook zelf gebruiken.

Ik kan later vandaag even een opzetje maken voor een beter contactformulier.


Dat zou heel fijn zijn! Deze code heb ik een op een overgenomen dus ik heb ook geen idee hoe ik het zou moeten verbeteren.

[size=xsmall]Toevoeging op 13/03/2019 10:31:48:[/size]


Ik kan later vandaag even een opzetje maken voor een beter contactformulier.


Ik heb nu iets anders gevonden, ik weet niet of dit beter is?


<?php
$naar = '[email protected]'; 
$onderwerp = 'Contactformulier'; 
 
// Header instellen, zodat nl2br() werkt
$headers = "MIME-version: 1.0\r\n"; 
$headers .= "content-type: text/html;charset=utf-8\r\n";
 
if(isset($_POST['submit'])) // Als het formulier verzonden is door op de verzend knop te klikken
{
    $name = trim($_POST['name']); 
	$surname = trim($_POST['surname']); 
    $companyname = trim($_POST['companyname']); 
    $email = trim($_POST['email']); 
    $bericht = trim($_POST['bericht']); 
    $fout = false; 
 
    if(empty($name)) 
    {
        print '<p>Helaas, het voornaam veld is verplicht maar is nu niet ingevuld!</p>';
        $fout = true; 
    }
	if(empty($surname)) 
    {
        print '<p>Helaas, het achternaam veld is verplicht maar is nu niet ingevuld!</p>';
        $fout = true; 
    }
    if(empty($companyname)) 
    {
        print '<p>Helaas, het bedrijfsnaam veld is verplicht maar is nu niet ingevuld!</p>';
        $fout = true; 
    }
    if(empty($email)) 
    {
        print '<p>Helaas, het e-mail veld is verplicht maar is nu niet ingevuld!</p>';
        $fout = true;
    }
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
    {
        print '<p>Helaas, het email adres is niet correct!</p>';
        $fout = true;
    }
    if(empty($bericht))
    {
        print '<p>Helaas, het bericht veld is verplicht maar is nu niet ingvuld!</p>';
        $fout = true;
    }
 
    if($fout == false)
    {
        $headers .= 'From: ' . $name . ' ' . $surname . ' <' . $email . '>';
 
        if(mail($naar, $onderwerp, nl2br($bericht), $headers))
        {
            print '<p>Het bericht is succesvol verzonden!</p>';
        }
        else
        {
            print '<p>Helaas, er is wat fout gegaan tijdens het verzenden van het formulier.</p>';
        }
    }
}
?>


Het gaat hier ook nog niet goed. Ik krijg nu een mail met de naam, achternaam, e-mailadres en het bericht, alleen hoe zorg ik ervoor dat de bedrijfsnaam wel ergens vermeld wordt?

En ook hier krijg ik geen melding dat het formulier is verzonden.
- Ariën - op 13/03/2019 11:17:44

https://www.phphulp.nl/php/script/data-verwerking/contact-formulier/12/contactformulierphp/1419/ wordt ook veel gebruikt, merk ik. Het voorkomt ook een berichtenflood.


Daar staat ook een stukje html in met het formulier, maar ik heb mijn formulier op index.html staan. Hoe kan ik zorgen dat mijn formulier gebruikt wordt?

En na het verzenden wordt je gestuurd naar een bedanktpagina, maar is het mogelijk een bedankje te krijgen op de pagina waar het formulier staat? d.m.v. een pop-up? Dit had ik bij het vorige formulier wel als bij het e-mailadres een @ of . vergeten was.

Reageren