PHP Les 6: Gegevens opslaan in een database II

Doelstelling les:

  • Veilig verwerken van gegevens via php middels prepared statements

Voorbereiding

  • Huiswerk vorige les natuurlijk

Lesprogramma

  • Bespreken huiswerk
  • Kort het "recept" uit vorige les herhalen.
  • Verder werken met foutmeldingen en invoer verwerken.

Stap 5: Waardes opslaan bij foutmeldingen

Bij fouten gaan ingevulde waardes verloren, dat erg frusterend, dus values invullen in formulier.

  1. maak een fout (bijv. geen componistid) en laat zien dat na submit je een foutmelding krijgt, maar dat ondertussen de andere velden weer leeg zijn. Dat is hier niet zo erg, maar als je een groot formulier hebt ingevuld, dan zou het fijn zijn als eerder ingevulde gegevens bewaard worden.

  2. breid de inputs uit met een value-attribute waar je de bijbehorende variabele weer in zet. Hier komt dus die naamgeving (kolomnaam == variabelenaam == inputnaam) goed van pas

    bijv. bij naam componist. Verander

<input type="text" id="componistId" name="componistId">

naar

<input type="text" id="componistId" name="componistId" value="<?= $componistId ?>">
  1. Maak een fout in de invoer, laat zien dat de eerder ingevulde gegevens blijven bestaan.

  2. Vul nu correcte gegevens in, die worden opgeslagen, maar ook weer bewaard. Dus bij succes, die variabelen leeggooien.

// Check results
if ($succes) {
    $melding = 'Gegevens zijn opgeslagen in de database.';
    // maak de 4 variabelen weer leeg
    $componistId = '';
    $naam = '';
    $geboortedatum = '';
    $schoolId='';
} else {
    $melding = 'Er ging iets fout bij het opslaan.';
}

Stap 6: Invoervelden niet klakkeloos vertrouwen

Input opschonen om hackers het moeilijk te maken om cross-site scripting, code-injection e.d. te doen.

We nemen nu gegevens één op één over vanuit de $_POST, dat geeft hackers de mogelijkheid tot code injectie (javascript, etc.). We gaan de input opschonen.

Lees de $_POST uit met htmlspecialchars(...). Eventueel is ook nog de strip_tags te gebruiken.

$componistId    = htmlspecialchars(trim($_POST['componistId']));
$naam           = htmlspecialchars(trim($_POST['naam']));
$geboortedatum  = htmlspecialchars(trim($_POST['geboortedatum']));
$schoolId       = htmlspecialchars(trim($_POST['schoolId']));

Stap 7 (Extra): Dropdown voor schoolid

Maak een dropdown van de schoolid, vooral moeilijk als de eerder geselecteerde waarde bewaard moet blijven.

Huiswerk

  1. Maak formulier voor scholen volledig (dus veldcontrole, input opschonen etc.)
  2. Voorbereiding volgende les