Kan form informatie niet posten naar database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lars h

lars h

25/05/2017 22:06:21
Quote Anchor link
Hoi allen,

Ik ben middels een online cursus mijn website aan het inrichten alleen loop ik ergens tegenaan en dat is bij het inrichten van mijn formulieren pagina. Hier heb ik dus een aantal inputvelden die ingevuld worden en vervolgens via een script zouden deze naar mijn mysql database moeten worden verstuurd.

Ik heb al van alles geprobeerd maar het lukt me maar niet om het werkend te krijgen.
Zelf dacht ik dat het komt omdat de $conn niet goed wordt opgeroepen maar die functie heb ik omschrijven op mijn db/db.php pagina dus dat zou niet het punt moeten zijn toch?


Mijn query waar alles vasloopt is als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if(move_uploaded_file($image_tmp,$image_path)){
                        $ins_sql = "INSERT INTO producten (score, titel, prijs, info, afbeelding, link, datum, einddatum ) VALUES ('$_POST[score]', '$title', '$_POST[prijs]', '$_POST[info]', '$image_db_path', '$_POST[link]', $datum, '$_POST[einddatum]')";  
                        if(mysqli_query($conn,$ins_sql)){
                            header('index.php');
}
else {
                            $error = '<div class="alert alert-danger">The query was not working</div>';
                        }

?>


Alle vorige stappen komen goed omdat ik alleen de foutmelding van else krijg bij het laatste onderdeel.

Hulp zou ik zeer op prijs stellen
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 25/05/2017 22:18:16 door - Ariën -
 
PHP hulp

PHP hulp

30/11/2024 07:42:02
 
- Ariën  -
Beheerder

- Ariën -

25/05/2017 22:24:16
Quote Anchor link
Je $_POST variabelen in je query horen buiten quotes en moet je escapen tegen SQL-injection.
Ook vraag je niet aan MySQL wat er fout gaat, dit kan met mysqli_error($con). Gebruik dit alleen maar voor test en ontwikkeldoeleinden, en geef dergelijke foutmeldingen niet openbaar aan je bezoekers. Ze vinden dit vaak 'eng' en je maakt hackers ook meer wijs dan ze moeten weten.

Ook vergeet je de Location-header mee te sturen in de header() functie.

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
<?php
// Met tabjes en enters maak je de query beter leesbaarder....
$ins_sql = "INSERT INTO producten (score, titel, prijs, info, afbeelding, link, datum, einddatum )
        VALUES ('"
.mysqli_real_escape_string($conn,$_POST['score'])."',
            '"
.$title."',
            '"
.mysqli_real_escape_string($conn,$_POST['prijs'])."',
            '"
.mysqli_real_escape_string($conn,$_POST['info'])."',
            '"
.$image_db_path."',
            '"
.mysqli_real_escape_string($conn,$_POST['link'])."',
            '"
.$datum."',
            '"
.mysqli_real_escape_string($conn,$_POST['einddatum'])."'
        )"
;
  
if(mysqli_query($conn,$ins_sql)){
                            header('Location: index.php');
                exit(); // nooit vergeten bij een location redirect!
} else {
                            $error = '<div class="alert alert-danger">The query was not working, because: '.mysqli_error($conn).'</div>';
                        }

?>
Gewijzigd op 25/05/2017 22:28:06 door - Ariën -
 
Lars h

lars h

25/05/2017 23:01:42
Quote Anchor link
hey arien bedankt voor de snelle reactie. Dit was niet mijn volledige code. Ik heb deze hieronder geplaats. Is het dan daadwerkelijk nodig om per input een mysqli_real_exape_string toe te voegen of kan je ook deze 1malig doen en dan via een kommo ofzo 1 lijn van code creeren zoals

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
VALUES ('".mysqli_real_escape_string($conn,$_POST['score'])."','".$title."', ('$_POST['prijs'])."') etc.

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
<?php session_start();
    include 'db/db.php';
    $error = '';
    if(isset($_POST['submit_post'])) {
        $title = strip_tags($_POST['titel']);
        $date = date('Y-m-d h:i:s');  
        if($_FILES['afbeelding']['name'] != ''){
            $image_name = $_FILES['afbeelding']['name'];
            $image_tmp = $_FILES['afbeelding']['tmp_name'];
            $image_size = $_FILES['afbeelding']['size'];
            $image_ext = pathinfo($image_name,PATHINFO_EXTENSION);
            $image_path = '../images/'.$image_name;
            $image_db_path = 'images/'.$image_name;
            if($image_size < 1000000){
                if($image_ext == 'jpg' || $image_ext == 'PNG'){
                    if(move_uploaded_file($image_tmp,$image_path)){
                        $ins_sql = "INSERT INTO producten (score, titel, prijs, info, afbeelding, link, datum, einddatum ) VALUES ('$_POST[score]', '$title', '$_POST[prijs]', '$_POST[info]', '$image_db_path', '$_POST[link]', $datum, '$_POST[einddatum]')";  
                        if(mysqli_query($conn,$ins_sql)){
                            header('index.php');
                        }
else {
                            $error = '<div class="alert alert-danger">The query was not working</div>';
                        }
                    }
else {
                        $error = '<div class="alert alert-danger">Sorry, unfortunately image not uploaded</div>';
                    }
                }
else {
                    $error = '<div class="alert alert-danger">Image format was not correct</div>';
                    }

            }
else {
                $error = '<div class="alert alert-danger">Image file size is too big</div>';
            }
        }
    }


?>
 
- Ariën  -
Beheerder

- Ariën -

25/05/2017 23:12:26
Quote Anchor link
Dat mysqli_real_escape_string() moet per value in je query.
Je kan onmogelijk één functie gebruiken om alles in één klap te escapen. je moet altijd selectief zijn wat je escaped.

Dit doe je alleen bij manipuleerbare waardes in je query. Waaronder $_POST, $_GET, $_FILES, $_COOKIE, $_SESSION en $_ENV.

Je kan je natuurlijk ook richten op 'Prepared Statements'
Gewijzigd op 25/05/2017 23:16:45 door - Ariën -
 
Lars h

lars h

25/05/2017 23:23:02
Quote Anchor link
Maar het gebruik van real escape string is toch meer een van veiligheid? Of is dit ook de reden waarom mijn query niet goed functioneert?
 
- Ariën  -
Beheerder

- Ariën -

25/05/2017 23:26:32
Quote Anchor link
Het beveiligt je tegen schadelijke tekens die kwade dingen met je query kunnen doen (SQL-injection). Maar ook onbedoeld kan je die tekens gebruiken. Voeg voor de grap eens een single quote (') in in een onbeveiligde query. Je zal dan een foutmelding krijgen met mysqli_error(...).
 
Lars h

lars h

25/05/2017 23:35:13
Quote Anchor link
Ik ga het in ieder geval morgen testen en kijken of hij dan wel werkt. In ieder geval al bedankt voor je reacties!
 



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.