Dabra720 / educom-webshop-database

0 stars 0 forks source link

Gebruik functies om een formulier op te bouwen, Dit is D.R.Y. #15

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/Dabra720/educom-webshop-database/blob/646063c414cf0f50b2ad79098f3c95709f78cc53/register.php#L8-L22 Voor velden zie je steeds dat er een label (Tip gebruik de <label> element hiervoor) met daarachter een <input>/<select>/<textarea> met daarachter een <span class="error"> staat.

Denk hier bijvoorbeeld aan een functie:

  function showFormStart($hasRequiredFields) {  }
  function showFormField($field, $label, $type, $data, $required=true, $options=NULL) {  }
  function showFormEnd($page) { }

Bovenstaande code wordt dan

function showRegisterForm($data) 
{
  showFormStart(true);
  showFormField('name', 'Naam', 'text', $data);
  showFormField('email', 'E-mail', 'email', $data);
  showFormField('password', 'Wachtwoord', 'password', $data);
  showFormField('pass_rep', 'Herhaal wachtwoord', 'password', $data);
  showFormEnd('register');
}

Voor het contactformulier kan je dan een extra array met opties toevoegen bijv:

define("SALUTATIONS", array("Dhr"=>"Dhr.", "Mvr"=>"Mvr."));
define("COMM_PREFS", array("email" => "E-Mail", "phone" => "Telefoon"));

en hiermee respectievelijk de select options maken of de radiobuttons, door er doorheen te lopen met een foreach($options as $key=>$label) vanuit contact.php roep je dan alleen aan:

function showContactForm($data){
  showFormStart(true);
  showFormField('aanhef', 'Aanhef', 'select', $data, true, SALUTATIONS);
  showFormField('name', 'Naam', 'text', $data);
  showFormField('email', 'E-mail', 'email', $data);
  showFormField('phone', 'Telefoon', 'text', $data);
  showFormField('voorkeur', 'Communicatievoorkeur', 'radio', $data, true, COMM_PREFS);
  showFormField('message', 'Bericht', 'textarea', $data);
  showFormEnd('contact');
}

Dezelfde array kan je ook gebruiken bij de validatie (of de gegeven key wel voorkomt in de array met array_key_exists) en ook in het tonen van het bedankje

echo "Beste " . SALUTIATIONS[getArrayVar($data['values'], 'aanhef')] . " " . getArrayVar($data['values'], 'name') . ", dankjewel voor het posten!" . "<br>";
JeroenHeemskerk commented 1 year ago

TIP kijk ook eens naar de andere 'type' attributen in <input>