Het telefoonveld checkt niet op de geldigheid van een telefoonnummer omdat ik niet weet hoe dat moet, ik vermoed met regex maar snap daar nog niets van. Het zou Belgische en Nederlandse nummers moeten toelaten dus +, ., -, (, ), spatie en getallen mogen alleen ingevuld worden.
Voor de rest werkt alles zoals ik het wil maar ik vraag me af of alles wel op een goede manier geschreven is en ook veilig is? Pas ik de htmlspecialchars, stripslashes etc. op de juiste manier toe? Want daar ben ik niet 100% zeker van.
Als er iemand goede actuele online leesvoer met voorbeelden weet of video tutorials op Youtube omtrent beveiliging van PHP en MySQL dan hoor ik het graag.
Er is zoveel te vinden online maar het meeste is al jaren oud en ik ben te noob/onwetend om het goede van het slechte te onderscheiden.
Alle kritiek is welkom!
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "form_security_test";
$dbc = mysqli_connect($servername, $username, $password, $dbname);
if (!$dbc) {
die("Connection failed: " . mysqli_connect_error());
}
$sql_gebruiker = "SELECT * FROM gebruiker WHERE gebruiker_id = '1'";
$run_gebruiker = mysqli_query($dbc, $sql_gebruiker);
$toon_gebruiker = mysqli_fetch_assoc($run_gebruiker);
$naam = stripslashes($toon_gebruiker['naam']);
$geslacht = stripslashes($toon_gebruiker['geslacht']);
$leeftijd = stripslashes($toon_gebruiker['leeftijd']);
$email = stripslashes($toon_gebruiker['email']);
$telefoon = stripslashes($toon_gebruiker['telefoon']);
$land = stripslashes($toon_gebruiker['land']);
$van = stripslashes($toon_gebruiker['van']);
$tot = stripslashes($toon_gebruiker['tot']);
$nieuwsbrief = stripslashes($toon_gebruiker['nieuwsbrief']);
if(isset($_POST['submit'])){
$naam = trim($_POST['naam']);
if(!empty($naam)){
$naam = htmlspecialchars(mysqli_escape_string($dbc, $naam)) ;
$success[] = "Naam is: " . stripslashes(ucfirst($naam));
}else{
$errors[] = "Naam is verplicht!";
}
if(!empty($_POST['geslacht'])){
$geslacht = mysqli_escape_string($dbc, $_POST['geslacht']);
$success[] = "Geslacht is: " . $geslacht;
}else{
$errors[] = "Geslacht is verplicht";
}
if(!empty($_POST['leeftijd'])){
$leeftijd = trim($_POST['leeftijd']);
if (is_numeric($leeftijd)) {
$leeftijd = mysqli_escape_string($dbc, $leeftijd);
$success[] = "Leeftijd is: " . $leeftijd . " jaar.";
}else{
$errors[] = "Leeftijd mag alleen uit cijfers bestaan!";
}
}else{
$leeftijd = 0;
}
if(!empty($_POST['email'])){
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
$email = htmlspecialchars(mysqli_escape_string($dbc, $email));
$success[] = "Email is: " . stripslashes($email);
}else{
$errors[] = "Ongeldig e-mailadres!";
}
}else{
$errors[] = "E-mail is verplicht!";
}
if(!empty($_POST['telefoon'])){
$telefoon = trim($_POST['telefoon']);
if(strlen($telefoon) <= 23){
$telefoon = htmlspecialchars(mysqli_escape_string($dbc, $telefoon));
$success[] = "Telefoon is: " . stripslashes($telefoon);
}else{
$errors[] = "Telefoon is te lang!";
}
}else{
$errors[] = "Telefoonnummer is verplicht!";
}
if(!empty($_POST['land'])){
$land = mysqli_real_escape_string($dbc, $_POST['land']);
$success[] = "Land is: " . stripslashes($land);
}else{
$errors[] = "Selecteer een land!";
}
if(!empty($_POST['van']) && !empty($_POST['tot'])){
$van = mysqli_escape_string($dbc, $_POST['van']) . ":00:00";
$tot = mysqli_escape_string($dbc, $_POST['tot']) . ":00:00";
$success[] = "Beschikbaar: van " . $van . " uur tot " . $tot . " uur";
}elseif(!empty($_POST['van']) && empty($_POST['tot'])){
$errors[] = "Van en tot zijn beide verplicht als je ze niet leeg laat!";
}elseif(empty($_POST['van']) && !empty($_POST['tot'])){
$errors[] = "Van en tot zijn beide verplicht als je ze niet leeg laat!";
}else{
$van = "11:11:11";
$tot = "11:11:11";
}
if(!empty($_POST['nieuwsbrief'])){
$nieuwsbrief = mysqli_escape_string($dbc, $_POST['nieuwsbrief']);
}else{
$nieuwsbrief = 0;
}
if(!isset($errors)){
if(mysqli_num_rows($run_gebruiker) > 0){ // db record bestaat dus updaten
$update_gebruiker = "UPDATE gebruiker SET naam = '$naam', geslacht = '$geslacht', leeftijd = '$leeftijd', email = '$email', telefoon = '$telefoon', land = '$land', van = '$van', tot = '$tot', nieuwsbrief = '$nieuwsbrief' WHERE gebruiker_id = '1'";
if($run_update_gebruiker = mysqli_query($dbc, $update_gebruiker)){
$update_success = "<h4>Record bestaat al dus geupdatet. Update gelukt!</h4>";
}else{
$update_error = "<h4>Updaten is mislukt, probeer nog eens. Werkt het toch niet, contacteer ons dan aub:</h4> " . mysqli_error($dbc);
}
}else{ // db record bestaat nog niet dus inserten
$gebruiker_id = 1;
$insert_gebruiker = "INSERT INTO gebruiker (gebruiker_id, naam, geslacht, leeftijd, email, telefoon, land, van, tot, nieuwsbrief)
VALUES ('$gebruiker_id', '$naam', '$geslacht', '$leeftijd', '$email', '$telefoon', '$land', '$van', '$tot', '$nieuwsbrief')";
if($run_insert_gebruiker = mysqli_query($dbc, $insert_gebruiker)){
$insert_success = "<h4>Nieuwe record aangemaakt. Uw gegevens zijn opgeslagen.</h4>";
}else{
$insert_error = "<h4>Inserten is mislukt- Er is iets mis gegaan, probeer nog eens. Werkt het toch niet, contacteer ons dan aub:</h4> " . mysqli_error($dbc);
}
}
}
}
?>
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title Page</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<form action="" method="post">
<?php if(isset($errors)){
echo
'<div class="alert alert-danger alert-dismissable">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>';
if(isset($update_error)){ echo $update_error;}
if(isset($insert_error)){ echo $insert_error;}
echo '<ul>';
foreach($errors as $error){
echo '<li>' . $error . '</li>';
}
echo '</ul></div>';
}
if(isset($success)){
echo
'<div class="alert alert-success alert-dismissable">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>';
if(isset($update_success)){ echo $update_success;}
if(isset($insert_success)){ echo $insert_success;}
echo '<ul>';
foreach($success as $success2){
echo '<li>' . $success2 . '</li>';
}
echo '</ul></div>';
}
?>
<div class="row">
<div class="form-group col-sm-4">
<label for="usern">Naam: *</label>
<input type="text" name="naam" class="form-control" id="usern" value="<?php if(isset($naam)){ echo stripslashes($naam);} ?>" placeholder="naam">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 control-label" for="geslacht">Geslacht: *</label>
<div class="col-md-10">
<label class="radio-inline" for="geslacht-0">
<input type="radio" name="geslacht" id="geslacht-0" value="1"<?php if(!empty($geslacht) == 1){echo " checked";} ?>>Vrouw
</label>
<label class="radio-inline" for="geslacht-1">
<input type="radio" name="geslacht" id="geslacht-1" value="2"<?php if(!empty($geslacht) == 2){echo " checked";} ?>>Man
</label>
</div>
</div>
<div class="row">
<div class="form-group col-sm-4">
<label class="control-label" for="leeftijd">Leeftijd:</label>
<div class="input-group">
<input type="text" name="leeftijd" id="leeftijd" class="form-control input-md" value="<?php if(!empty($leeftijd) > 0){echo $leeftijd;} ?>" placeholder="Leeftijd">
<span class="input-group-addon">jaar</span>
</div><span class="help-block"><small>Bv: 26.</small></span>
</div>
</div>
<div class="row">
<div class="form-group col-sm-4">
<label for="email">E-mail: *</label>
<input type="text" name="email" class="form-control" id="email" value="<?php if(isset($email)){ echo stripslashes($email);} ?>" placeholder="E-mail">
</div>
</div>
<div class="row">
<div class="form-group col-sm-4">
<label for="tel">Telefoon: *</label>
<input type="text" name="telefoon" class="form-control" id="tel" value="<?php if(isset($telefoon)){ echo stripslashes($telefoon);} ?>" placeholder="Telefoon">
</div>
</div>
<div class="form-group row">
<div class="col-sm-5 col-md-4 col-lg-4">
<label for="land">Land: *</label>
<select class="form-control" name="land" id="land">
<option value=""<?php if(empty($land)){ echo " selected";} ?>>- Selecteer land -</option>
<option value="1"<?php if(isset($land) && $land == 1){ echo " selected";} ?>>Belgë</option>
<option value="2"<?php if(isset($land) && $land == 2){ echo " selected";} ?>>Nederland</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group col-sm-6 col-md-6 col-lg-6">
<div class="form-group"><label for="beschikbaar">Beschikbaarheid:</label>
<div class="row">
<div class="col-sm-5 col-md-4 col-lg-4">
<select class="form-control" name="van" id="beschikbaar">
<option value=""<?php if(isset($van) && $van == "11:11:11"){ echo " selected";} ?>>- Van -</option>
<option value="00"<?php if(isset($van) && $van == "00:00:00"){ echo " selected";} ?>>00u00</option>
<option value="1"<?php if(isset($van) && $van == 1){ echo " selected";} ?>>01u00</option>
<option value="23"<?php if(isset($van) && $van == 23){ echo " selected";} ?>>23u00</option>
</select>
</div>
<p class="col-sm-2 text-center">tot</p>
<div class="col-sm-5 col-md-4 col-lg-4">
<select class="form-control" name="tot" id="m">
<option value=""<?php if(isset($tot) && $tot == "11:11:11"){ echo " selected";} ?>>- Tot -</option>
<option value="00"<?php if(isset($tot) && $tot == "00:00:00"){ echo " selected";} ?>>00u00</option>
<option value="1"<?php if(isset($tot) && $tot == 1){ echo " selected";} ?>>01u00</option>
<option value="23"<?php if(isset($tot) && $tot == 23){ echo " selected";} ?>>23u00</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="checkbox">
<label for="nieuwsbrief">
<input type="checkbox" name="nieuwsbrief" id="nieuwsbrief" value="1"<?php if(!empty($nieuwsbrief) == 1){ echo " checked";} ?>> Ontvang nieuwsbrief
</label>
</div>
</div>
<input type="submit" name="submit">
</form>
</div>
</body>
</html>