Insert voegt soms leeg toe (PHP, MySQL)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bryan De Baar

Bryan De Baar

26/01/2022 13:37:34
Quote Anchor link
Goedemiddag,


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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?
 
PHP hulp

PHP hulp

25/04/2024 00:50:48
 
- Ariën  -
Beheerder

- Ariën -

26/01/2022 14:19:43
Quote Anchor link
Als de query gewoon lukt, dan zal je die melding nooit zien.
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?
 
Bryan De Baar

Bryan De Baar

26/01/2022 20:44:22
Quote Anchor link
Hallo Ariën,


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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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?
 
- Ariën  -
Beheerder

- Ariën -

26/01/2022 20:54:12
Quote Anchor link
Ik raad aan de $sql eens te loggen.
 
Adoptive Solution

Adoptive Solution

26/01/2022 22:00:57
Quote Anchor link
Van regel 8 tot 62 worden testen uitgevoerd en ongeacht de uitslag wordt een INSERT gedaan.
Wellicht eerst even testen of $errors leeg is.
 
Ivo P

Ivo P

27/01/2022 11:08:21
Quote Anchor link
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%.

PHP heeft daar gewoon filter functies voor

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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
 
- Ariën  -
Beheerder

- Ariën -

28/01/2022 16:40:49
Quote Anchor link
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!!!!!!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.