Thomas-van-Haastrecht / educom-webshop-basis

0 stars 0 forks source link

(optional) Maak een generieke functie om een form veld te maken #20

Open JeroenHeemskerk opened 8 months ago

JeroenHeemskerk commented 8 months ago

Als ik naar je formulieren kijk zie ik wel wat herhaling, dit zou handiger kunnen https://github.com/Thomas-van-Haastrecht/educom-webshop-basis/blob/e9ac0abddaa486cf2e92cdbe5b7343f1ae77800f/contact.php#L36-L46 Voor velden zie je steeds dat een <label> een <input>/<select>/<textarea> met daarachter een <span> staat voor de error.

Het is handiger om dan een generieke functie te maken die een <div> maakt en deze dan in elkaar zet, ook voor het start en eind van het formulier kan je functies maken, Denk hier bijvoorbeeld aan deze functie signaturen:

  function ShowFormStart($page) {  }
  function ShowFormField($fieldName, $label, $type, $vals_and_errs, $options=NULL, $placeholder=NULL) {  }
  function ShowFormEnd($submitButtonText) { }

Voor het contactformulier kan je dan een extra array met 'opties' toevoegen bijvoorbeeld bovenin contact.php:

define("TITLES", array("mr."=>"Dhr.", "mrs."=>"Mvr.", "dr." => "Dr.", "prof." => "Prof."));
define("COMM_PREFS", array("email" => "E-Mail", "phone" => "Telefoon", "mail" => "Post"));

en hiermee respectievelijk de $type == "select" verschillende <option>s te maken of de $type == "radio" de combinatie van <input type="radio"> en het <label>, door er "doorheen" te lopen met een foreach($options as $key => $label)

Bovenstaande code wordt dan:

function ShowContactForm($vals_and_errs){
  ShowFormStart('contact');
  ShowFormField('title', 'Kies uw aanhef:', 'select', $vals_and_errs, TITLES);
  ShowFormField('name', 'Naam:', 'text', $vals_and_errs);
  ShowFormField('email', 'E-mail:', 'email', $vals_and_errs);
  ShowFormField('phone', 'Telefoonnummer:', 'text', $vals_and_errs);
  echo '    <h4>Adres</h4>';
  ShowFormField('adress_street', 'Telefoonnummer:', 'text', $vals_and_errs);
  ShowFormField('adress_street_no', 'Telefoonnummer:', 'text', $vals_and_errs);
  ShowFormField('adress_postcode', 'Telefoonnummer:', 'text', $vals_and_errs);
  ShowFormField('adress_city', 'Telefoonnummer:', 'text', $vals_and_errs);
  ShowFormField('preference', 'Communicatie Voorkeur', 'radio', $vals_and_errs, COMM_PREFS);
  ShowFormField('message', 'Bericht', 'textarea', $vals_and_errs, ['rows' => 10, 'cols' => 30], 'Vul in waar u contact over wil opnemen.');
  ShowFormEnd('Verzenden');
}

Dezelfde array kan je ook gebruiken bij de validatie (of de gegeven 'key' wel voorkomt in de array met array_key_exists($title, TITLES))

en ook in het tonen van het bedankje

<h2>Hartelijk dank voor uw bericht. U zal spoedig een reactie ontvangen.</h2>
                <h3>Ingevulde gegevens:</h3>
                <div>Naam: ' . TITLES[$data['title']] . '...'
...