AchrafReyani / educom-webshop-basis

0 stars 0 forks source link

Maak een generieke functie om een form veld te maken #22

Open JeroenHeemskerk opened 5 months ago

JeroenHeemskerk commented 5 months ago

Als ik naar je formulieren kijk zie ik wel wat herhaling, dit zou handiger kunnen https://github.com/AchrafReyani/educom-webshop-basis/blob/7b04040a2bf27307f80e76e2e3452e57413b73b6/contact.php#L84-L120 Voor velden zie je steeds dat er steeds een <div> met daarin een <label> een <input>/<select>/<textarea> met daarachter een <span> tag.

Het is handiger om dan een functie te maken die deze drie tags 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, $optional=false) {  }
  function ShowFormEnd($returnPage, $submitButtonText) { }

Voor het contactformulier kan je dan een extra array met 'opties' toevoegen bijvoorbeeld bovenin contact.php (zoals je heb geprobeerd hebt met $communicationmethod):

define("PRONOUNS", array( "he/him" => "He/him", "she/her" => "She/her", "they/them" => "They/them", "other" => "Other","does_not_say" => "Prefer not to say"));
define("COMMUNICATION_METHOD", array("email" => "Mail", "phone" => "Phone", "postal" => "Postal Mail"));

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: In dit voorbeeld is $data is de associatieve array met alle variabelen als $name, $name_error, etc.

function ShowContactForm($data){
  ShowFormStart();
  ShowFormField('gender', 'Pronouns:', 'select', $data, PRONOUNS);
  ShowFormField('name', 'Name:', 'text', $data);
  ShowFormField('email', 'EMail:', 'email', $data, NULL, true);
  ShowFormField('phonenumber', 'Phone Number:', 'text', $data, NULL, true);
  /* ... */
  ShowFormField('communication', 'Preferred Communication Method:', 'radio', $data, COMMUNICATION_METHOD);
  ShowFormField('message', 'Uw bericht:', '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($pronoun, PRONOUNS))

en ook in het tonen van het bedankje

function showContactThanks($data) {
    echo '<p>Bedankt, ' . $data["name"] . ', voor je reactie:</p>
    <div>Aanhef: ' . PRONOUNS[$data["pronoun"]] . '</div>
    <div>Naam: ' . $data["name"] . '</div>';
    ...
JeroenHeemskerk commented 5 months ago

De functie is nog niet generiek genoeg, ik kan geen radio buttons maken van bijvoorbeeld 'Ja' en 'Nee'