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.
-
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.
-
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 pasbijv. bij naam componist. Verander
<input type="text" id="componistId" name="componistId">
naar
<input type="text" id="componistId" name="componistId" value="<?= $componistId ?>">
-
Maak een fout in de invoer, laat zien dat de eerder ingevulde gegevens blijven bestaan.
-
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
- Maak formulier voor scholen volledig (dus veldcontrole, input opschonen etc.)
- Voorbereiding volgende les