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?
Je kan ook via de 'action' doorverwijzen naar dit formulier. Maar om welke site gaat het? Dan kunnen we even kijken wat de beste opzet is.

Popupjes zou ik afraden.
- Ariën - op 13/03/2019 13:36:49

Je kan ook via de 'action' doorverwijzen naar dit formulier. Maar om welke site gaat het? Dan kunnen we even kijken wat de beste opzet is.

Popupjes zou ik afraden.


Ik ben bezig een site te vernieuwen, de nieuwe versie staat nog niet online.

Voor nu even:
Dan kan je het contactformulier prima gebruiken met het bestaande formulier, maar dan moet je het geen .html noemen, maar .php.
Bedoel je index3.html? Hoe moet ik dit combineren met de php van de link die je stuurde?
Het formulier en de layout toepassen in je PHP-script. Zo kan je ook bijv. velden laten oplichten die niet of verkeerd ingevuld zijn. Of een melding onder een validatiemelding onder de velden laten tonen. Een stuk praktischer.
Ik heb het nu werkend, het formulier wordt verstuurd en ik krijg een melding op de plek van het formulier, dus dat is ook goed. Alleen verspringt de site na het verzenden weer naar het begin van de pagina. Is er een manier om te zorgen dat de site op #contact blijft staan na verzenden?

test site
Is een bericht dat 'het versturen gelukt is' niet veel praktischer. Nu kom ik op de index uit, wat verwarrend is.
Dat kan, dit is alleen wat in die link stond die je stuurde.

Onderstaand is het laatste deel van die php, welk deel moet ik dan vervangen?
En is het dan beter het te openen in een nieuw tabblad of op de bestaande pagina en dan een knop om terug te keren naar de site?


<?php
  if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
  {
      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
      
      echo '<h1>Het contactformulier is verzonden</h1>
      
      <p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</p>';
  }
  else
  {
      echo '<h1>Het contactformulier is niet verzonden</h1>
      
      <p><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</p>';
  }
}
?>
Dan zou je een bericht moeten krijgen.
Je verwijst overigens gewoon naar /test/index.php. Dus daar moet die controle ook inzitten.
- Ariën - op 13/03/2019 16:37:08

Dan zou je een bericht moeten krijgen.


Wat voor soort bericht bedoel je dan?

Ik heb overigens wel meerdere testen van het formulier ontvangen.

- Ariën - op 13/03/2019 16:37:08

Je verwijst overigens gewoon naar /test/index.php. Dus daar moet die controle ook inzitten.

Welke controle bedoel je?

Excuses voor de vele vragen, ik ben echt nieuw met php.

Reageren