Ik zit met een klein dingetje waar ik graag wat hulp bij zou willen.
Bij het invoegen van data in de database blijft soms een kolom waarde leeg, terwijl deze kolom niet leeg zou mogen zijn.
Ik zou dan toch een error moeten krijgen en dat deze word afgebroken?
Onderstaand de MySQLI afhandeling.
<?php
if(mysqli_query($connection, $sql)){
insertsuc();
mysqli_close($connection);
}else{
$response['status'] = 'errors';
$response['errors'] = array('Helaas er is iets mis gegaan :-|, probeer het opnieuw of neem contact met ons op.');
mysqli_close($connection);
}
?>
Kan ik nog op een andere / betere manier deze controle uitvoeren?
Alle kolommen mogen niet leeg zijn, dat heb ik ingesteld in de database. Ik dacht dat de DB een fout terug zou geven als er iets wel leeg is en het opslaan zou afbreken om dus gatenkaas te vermijden.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$date = $_POST['when'];
$what = $_POST['resertype'];
if(isset($name)){
if(trim($name) == ''){
$errors[] = 'Je bent vergeten je naam in te vullen.';
}elseif(strlen($name) <= 1){
$errors[] = 'Een naam met één letter bestaat niet.';
}
}else{
$errors[] = 'Je bent vergeten je naam in te vullen.';
}
if(isset($email)){
if(trim($email) == ''){
$errors[] = 'Je bent vergeten je e-mailadres in te vullen';
}elseif(!preg_match('/(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]+$)/', $email)){
$errors[] = 'Onjuist e-mailadres';
}
}else{
$errors[] = 'Je bent vergeten je e-mailadres in te vullen';
}
if(isset($phone)){
if(trim($phone) == ''){
$errors[] = 'Je bent vergeten je telefonnummer in te vullen';
}elseif(!preg_match('/^\d+$/',$phone)){
$errors[] = 'Onjuist telefoonnummer';
}elseif(strlen($phone) !== 10){
$errors[] = 'Een telefonnummer bestaat uit 10 cijfers!';
}
}else{
$errors[] = 'Je bent vergeten je telefoonnummer in te vullen';
}
if(isset($date)){
if(trim($date) == ''){
$errors[] = 'Wanneer wil je komen?';
}elseif(!preg_match('/^\d{2}+-\d{2}+-\d{4}/',$date)){
$errors[] = 'Deze datum kan niet kloppen';
}
}else{
$errors[] = 'Wanneer wil je komen?';
}
if(isset($what)){
global $wpdb;
$get_restype = $wpdb->prefix . "res_types";
$connection = mysqli_connect($wpdb->dbhost, $wpdb->dbuser, $wpdb->dbpassword, $wpdb->dbname);
$sql = "SELECT type FROM $get_restype WHERE type='$what'";
$result = mysqli_query($connection, $sql);
if(mysqli_num_rows($result) == 0){
$errors[] = 'Hiervoor kun je niet reserveren';
}
}
$connection = mysqli_connect($wpdb->dbhost, $wpdb->dbuser, $wpdb->dbpassword, $wpdb->dbname);
$sql = "INSERT INTO $the_table (name, email, phone, date, what) VALUES ('$name', '$email', '$phone', '$dateres', '$what')";
if(mysqli_query($connection, $sql)){
insertsuc();
mysqli_close($connection);
}else{
$response['status'] = 'errors';
$response['errors'] = array('Helaas er is iets mis gegaan :-|, probeer het opnieuw of neem contact met ons op.');
mysqli_close($connection);
}
?>
Kun je op een manier controleren of alle data correct is opgeslagen? Dus als een kolom leeg is wat niet mag dat je een error terug krijgt waar je iets mee kunt?
Ik raad daarnaast aan om niet zelf een regex te verzinnen om een emailadres te controleren: Dat gaat altijd mis.
Ooit een artikel gelezen waar de regex (en misschien wel meerdere) onderhand een A4tje vol waren.
En nog niet 100%.