Insert voegt soms leeg toe (PHP, MySQL)
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.
Code (php)
Kan ik nog op een andere / betere manier deze controle uitvoeren?
Mogelijk wordt het feit dat de kolom leeg is misschien in je database afgedwongen?
Wat voor query is het?
En heb je een dumpje van je structuur?
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?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);
}
?>
$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 aan de $sql eens te loggen.
Wellicht eerst even testen of $errors leeg is.
Ooit een artikel gelezen waar de regex (en misschien wel meerdere) onderhand een A4tje vol waren.
En nog niet 100%.
PHP heeft daar gewoon filter functies voor
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if(!filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)) {
$error = 'email fout';
}
?>
if(!filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)) {
$error = 'email fout';
}
?>
Ik zie zo al, dat mijn mailadres niet door
/(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]+$)/
gaat komen: [email protected]
Kennelijk vind jij dat een mailadres maar 1x een punt na het @-teken mag hebben?
[email protected] heeft daar ook een probleem.
Daarentegen laat je [email protected] wel weer door.
Toevoeging op 27/01/2022 11:11:00:
enne: iemand met een ' in zijn naam, laat jouw query ook stuk lopen
Ivo P op 27/01/2022 11:08:21:
enne: iemand met een ' in zijn naam, laat jouw query ook stuk lopen
Hier is een SQL injection gevaar!!!!!!