Hoewel onderstaand webformulier prima, wil ik nog het eea gebruikersvriendelijker maken dan nu het geval is.
Vanaf een YT-video heb ik onderstaande code bij de regels 54, 80 en 120 vandaan gehaald.
Het zorgt voor dat of het formulier wordt laten zien of het succesbericht, nadat het formulier succesvol is verzonden.
Het succesbericht wordt nu bovenaan weergegeven en ik wil het in het midden van het pagina.
Ik zit eraan te denken om het succesbericht aan een variabel te koppelen, maar weet niet qua logica waar het variabel te plaatsen.
Iemand een idee?



<?php

// define variables and set to empty values
$errors = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  if (empty($_POST["voornaam"])) {
    $errors['voornaam'] = "Graag uw voornaam invullen";
  } else {
    $voornaam = test_input($_POST["voornaam"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$voornaam)) {
      $errors['voornaam'] = "Uw voornaam mag alleen letters en spaties bevatten";
    }
  }

  if (empty($_POST["achternaam"])) {
    $errors['achternaam'] = "Graag uw achternaam invullen";
  } else {
    $achternaam = test_input($_POST["achternaam"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$achternaam)) {
      $errors['achternaam'] = "Uw achternaam mag alleen letters en spaties bevatten";
    }
  }

  if (empty($_POST["mailadres"])) {
    $errors['mailadres'] = "Graag uw mailadres invullen";
  } else {
    $email = test_input($_POST["mailadres"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $errors['mailadres'] = "Het formaat van het ingevoerde mailadres is niet correct";
    }
  }

  $uwvraag = test_input($_POST["uwvraag"]) ;
 
  if (count($errors) == 0) {
    //mail versturen
    
    $to = "[email protected]";
    $subject = "Mail afkomstig uit de website";
    $message= "";
    $message.=  "Voornaam: " .$voornaam. "\r\n";
    $message.= "Achternaam: " .$achternaam. "\r\n";
    $message.= "Het mailadres: " .$email. "\r\n";
    $message.= "Uw vraag: " . $uwvraag. "\r\n"; 
    $headers ="From: [email protected] \r\n";
    $headers.="MIME-Version: 1.0" . "\r\n";
    $headers.="Content-type:text/html;charset=UTF-8" . "\r\n";
    
    
    if (mail($to,$subject,$message,$headers)) {
      $hide = 1;
      echo "Bedankt voor uw mail. Er wordt contact met u opgenomen!";
    } else {
      echo "Mail niet verstuurd!";
    }
    
  }

}
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}



$page = "contact";
include "Inc/header.php";
?>
<div class="main">
<div class="formulier">


<?php
  if (!isset($hide)) {   ?>

<h2>Contact formulier</h2><br/><br/>
<span>* verplichte velden</span><br/><br/>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
        <label for="Voornaam">Voornaam</label><br />
        <input type="text" id="voornaam" name="voornaam" value="<?php if (isset($_POST['voornaam']))echo htmlspecialchars($_POST['voornaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        <span>
          <?php
            if (isset($errors['voornaam'])) {
              echo $errors['voornaam'];
            }
          ?>
        </span>
        <label for="achternaam">Achternaam</label><br />
        <input type="text" id="achternaam" name="achternaam" value="<?php if (isset($_POST['achternaam']))echo htmlspecialchars($_POST['achternaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        <span>
          <?php
          if (isset($errors['achternaam'])) {
            echo $errors['achternaam'];
          }
          ?>
        </span>
        <label for="Mailadres">Mailadres</label><br />
        <input type="email" id="mailadres" name="mailadres" value="<?php if (isset($_POST['mailadres']))echo htmlspecialchars($_POST['mailadres'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        </br>
        <span>
          <?php
          if (isset($errors['mailadres'])) {
            echo $errors['mailadres'];
          }
          ?>
        </span>
        <label for="uwvraag">Uw vraag:</label></br>
        <textarea id="uwvraag" name="uwvraag" rows="4" cols="50"></textarea></br></br>
        <input type="submit" value="Verzenden"> <input type="reset" value="Reset">
    </form>
  </div>

  <?php
    }
  ?>
  </div>
  <?php
include "Inc/footer.php";
?>
je kan het succesbericht uit je mailfunctie-statement toch in een variabele plaatsen, en die weer ergens in je layout plaatsen? Dat doe je ook met je errors.

Ik zou er wel voor zorgen dat je, als het met succes verstuurd is, dat het formulier niet verschijnt.

- Ariën - op 27/09/2022 23:40:34

je kan het succesbericht uit je mailfunctie-statement toch in een variabele plaatsen, en die weer ergens in je layout plaatsen? Dat doe je ook met je errors.

Ik zou er wel voor zorgen dat je, als het met succes verstuurd is, dat het formulier niet verschijnt.



Dat is precies ook mijn gedachten en waar plaats ik dat variabel van het succesbericht?
Zojuist heb ik het onderstaande code geprobeerd en het wordt niet weergegeven nadat het formulier succesvol is verzonden.

$bericht= "Bedankt voor uw mail. Er wordt contact met u opgenomen!";


<?php
  echo $bericht;
  if (!isset($hide)) {   ?>


Wat jij een mooie plek vindt in je layout.
- Ariën - op 28/09/2022 01:18:53

Wat jij een mooie plek vindt in je layout.

In het midden van het pagina bijv....
Probeer het.
Ikzelf raad aan de meldingen dat iets gelukt is zonder formulier plaatsen.

Lukt het niet? Kopieer je contact-formulier project en kleed het even uit voor beter overzicht.
- Ariën - op 28/09/2022 10:53:49

Probeer het.
Ikzelf raad aan de meldingen dat iets gelukt is zonder formulier plaatsen.

Lukt het niet? Kopieer je contact-formulier project en kleed het even uit voor beter overzicht.

Nou ik dacht, omdat ik op regel 81 controleer of het variabel $hide geen waarde bevat, dan laat ik het formulier zie en op regel 121 de inhoud van het $bericht variabel te laten zien, want dan is het formulier verzonden.
Het resultaat: de inhoud van het formulier wordt verzonden, maar daarna verschijnt geen bericht!
Hoe nu verder?
Laat eens een versimpelde testcase zien in code en werking. (+/- 20 regels)
- Ariën - op 28/09/2022 15:39:23

Laat eens een versimpelde testcase zien in code en werking. (+/- 20 regels)


Haha! Nou zo complex is het niet hoor, met name vanaf regel 121 tot 122
Zie hieronder wat ik heb geprobeerd!

<?php

// define variables and set to empty values
$errors = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  if (empty($_POST["voornaam"])) {
    $errors['voornaam'] = "Graag uw voornaam invullen";
  } else {
    $voornaam = test_input($_POST["voornaam"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$voornaam)) {
      $errors['voornaam'] = "Uw voornaam mag alleen letters en spaties bevatten";
    }
  }

  if (empty($_POST["achternaam"])) {
    $errors['achternaam'] = "Graag uw achternaam invullen";
  } else {
    $achternaam = test_input($_POST["achternaam"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$achternaam)) {
      $errors['achternaam'] = "Uw achternaam mag alleen letters en spaties bevatten";
    }
  }

  if (empty($_POST["mailadres"])) {
    $errors['mailadres'] = "Graag uw mailadres invullen";
  } else {
    $email = test_input($_POST["mailadres"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $errors['mailadres'] = "Het formaat van het ingevoerde mailadres is niet correct";
    }
  }

  $uwvraag = test_input($_POST["uwvraag"]) ;
 
  if (count($errors) == 0) {
    //mail versturen
    
    $to = "[email protected]";
    $subject = "Mail afkomstig uit de website";
    $message= "";
    $message.=  "Voornaam: " .$voornaam. "\r\n";
    $message.= "Achternaam: " .$achternaam. "\r\n";
    $message.= "Het mailadres: " .$email. "\r\n";
    $message.= "Uw vraag: " . $uwvraag. "\r\n"; 
    $headers ="From: [email protected] \r\n";
    $headers.="MIME-Version: 1.0" . "\r\n";
    $headers.="Content-type:text/html;charset=UTF-8" . "\r\n";
    
    
    if (mail($to,$subject,$message,$headers)) {
      $hide = 1;
      $bericht= "Bedankt voor uw mail. Er wordt contact met u opgenomen!";
    } else {
      echo "Mail niet verstuurd!";
    }
    
  }

}
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}



$page = "contact";
include "Inc/header.php";
?>
<div class="main">
<div class="formulier">


<?php
  
  if (!isset($hide)) {   ?>

<h2>Contact formulier</h2><br/><br/>
<span>* verplichte velden</span><br/><br/>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
        <label for="Voornaam">Voornaam</label><br />
        <input type="text" id="voornaam" name="voornaam" value="<?php if (isset($_POST['voornaam']))echo htmlspecialchars($_POST['voornaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        <span>
          <?php
            if (isset($errors['voornaam'])) {
              echo $errors['voornaam'];
            }
          ?>
        </span>
        <label for="achternaam">Achternaam</label><br />
        <input type="text" id="achternaam" name="achternaam" value="<?php if (isset($_POST['achternaam']))echo htmlspecialchars($_POST['achternaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        <span>
          <?php
          if (isset($errors['achternaam'])) {
            echo $errors['achternaam'];
          }
          ?>
        </span>
        <label for="Mailadres">Mailadres</label><br />
        <input type="email" id="mailadres" name="mailadres" value="<?php if (isset($_POST['mailadres']))echo htmlspecialchars($_POST['mailadres'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
        </br>
        <span>
          <?php
          if (isset($errors['mailadres'])) {
            echo $errors['mailadres'];
          }
          ?>
        </span>
        <label for="uwvraag">Uw vraag:</label></br>
        <textarea id="uwvraag" name="uwvraag" rows="4" cols="50" value="<?php if (isset($_POST['uwvraag']))echo htmlspecialchars($_POST['uwvraag'], ENT_QUOTES); ?>"></textarea></br></br>
        <input type="submit" value="Verzenden"> <input type="reset" value="Reset">
    </form>
  </div>

  <?php
    } else {
      echo $bericht;
    }
  ?>
  </div>
  <?php
include "Inc/footer.php";
?>
Dat is geen versimpelde testcase... :-/

Waarom sla je de succes-melding wel op in een variabele, en niet de error van de mail?
- Ariën - op 28/09/2022 21:27:32

Dat is geen versimpelde testcase... :-/

Geen idee wat je hiermee bedoelt.
- Ariën - op 28/09/2022 21:27:32


Waarom sla je de succes-melding wel op in een variabele, en niet de error van de mail?

Jij hebt gelijk dat het beter is om de error van de mail ook in een variabel te zetten, maar dat is voor mij nu geen prio. Pas als ik dit probleem heb opgelost, pas ik dat ook aan.

Reageren