LauraBokkers / educom-webshop-basis

0 stars 0 forks source link

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

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/LauraBokkers/educom-webshop-basis/blob/0bd1445675f75531c4f7d190dc3c7c3306078d5f/contact.php#L81-L123 Voor velden zie je steeds dat een <label> een <input>/<select>/<textarea> met daarachter een <span class="error"> 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() {  }
  function ShowFormField($fieldName, $label, $type, $data, $options=NULL) {  }
  function ShowFormEnd($page, $submitButtonText) { }

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

define("SALUTATIONS", array("mr."=>"Dhr.", "mrs."=>"Mvr."));
define("COMM_PREFS", array("email" => "Email", "phone" => "Phone"));

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();
  ShowFormField('salutation', NULL, 'select', $data, SALUTATIONS);
  ShowFormField('name', 'Name:', 'text', $data);
  ShowFormField('email', 'Email:', 'email', $data);
  ShowFormField('phonenumber', 'Phonenumber:', 'text', $data);
  ShowFormField('comm_preference', 'Communication preference:', 'radio', $data, COMM_PREFS);
  ShowFormField('message', 'Message:', 'textarea', $data, ['rows' => 5, 'cols' => 40]);
  ShowFormEnd('contact', 'Submit');
}

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

en ook in het tonen van het bedankje

echo ' <p>Bedankt voor uw reactie:</p>

     <div>Name:' . SALUTATIONS[$data['salutation']] ." ". $data['name'] . '</div>
     ...'