Corby7 / educom-webshop-basis

0 stars 0 forks source link

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

Open JeroenHeemskerk opened 1 year ago

JeroenHeemskerk commented 1 year ago

Als ik naar je formulieren kijk zie ik wel wat herhaling, dit zou handiger kunnen https://github.com/Corby7/educom-webshop-basis/blob/d790f5cc0a93b2101ab96454285ab7bcbea3cc20/contact.php#L121-L186 Voor velden zie je steeds dat er een <li> met daarin een <label> een <input>/<select>/<textarea> met daarachter een <span class="error"> staat.

Het is handiger om dan een functie te maken die deze <li> 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($hasRequiredFields) {  }
  function ShowFormField($fieldName, $label, $type, $data, $options=NULL, $optional=false) {  }
  function ShowFormEnd($page, $submitButtonText) { }

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

define("GENDERS", array("male"=>"Dhr.", "female"=>"Mvr.", "unspecified" => "Anders"));
define("COMM_PREFS", array("email" => "E-Mail", "phone" => "Telefoon"));

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($data){
  ShowFormStart(true);
  ShowFormField('gender', 'Aanhef:', 'select', $data, GENDERS);
  ShowFormField('fname', 'Voornaam:', 'text', $data);
  ShowFormField('lname', 'Achternaam:', 'text', $data);
  ShowFormField('email', 'E-mail:', 'email', $data);
  ShowFormField('phone', 'Telefoonnummer:', 'text', $data);
  ShowFormField('preference', 'Op welke manier wilt u bereikt worden?', 'radio', $data, COMM_PREFS);
  ShowFormField('message', 'Waarover wilt u contact opnemen?', 'textarea', $data, [ 'rows' => 5, 'cols' => 33 ]);
  ShowFormEnd('contact', 'verstuur');
}

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

en ook in het tonen van het bedankje

<h2>Beste ' . GENDERS[$gender] . ' ' . $fname . ' ' . $lname . ', bedankt voor het invullen van uw gegevens!</h2>
...