Twee Prepared statements in één .php-bestand waarvan insert niet lukt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lowie Dewit

Lowie Dewit

01/04/2020 11:07:35
Quote Anchor link
Beste forumhelper, bezoeker,

Dank u voor de handige boeken die u schrijft, alsmede uw aanwezigheid op dit forum. Ik heb een vraag die zelden voorkomt ivm prepared statements and sqlinjectie en die onvindbaar is in welk boek dan ook.

In mijn php-bestand met form action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo htmlentities($_SERVER['PHP_SELF']); ?>
"
werkt het gedeelte insert niet. Wat is de reden?

FORM gedeelte staat hier

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
<?php
// INSERT gedeelte hier
if(isset($_POST['VOU'])){
    $con_db=new mysqli($host, $user, $code, $db);
    mysqli_set_charset($con_db,"utf8");
    if($mysqli->connect_error){
        echo '<br /><div id="errmsg">';
        echo $openErr;
        echo '</div>';
        header('Location: getuigenis.php');
        exit(0);
    }

    // Prepare an insert statement
    if($stmnt=$con_db->prepare("INSERT INTO opinies (voucher, naam, email, bericht) VALUES (?, ?, ?, ?)")){
        mysqli_set_charset($con_db,"utf8");
        $stmnt->bind_param('ssss', $_POST['VOU'],$_POST['NME'],$_POST['EML'],$_POST['TXT']);
        $stmnt->execute();
        $stmnt->close();
        $con_db->close();
    }
else{
        $stmnt->close();
        $con_db->close();
        header('Location: getuigenis.php');
        exit(0);
    }  
}


// SELECT gedeelte erna
    $con_db=new mysqli($host, $user, $code, $db);
    mysqli_set_charset($con_db,"utf8");
    if($mysqli->connect_error){
        echo '<br /><div id="errmsg">';
        echo $openErr;
        echo '</div>';
        header('Location: getuigenis.php');
        exit(0);
    }

    if($stmt=$con_db->prepare("SELECT id, naam, bericht FROM opinies WHERE id > ?  ORDER BY id DESC")){
        $id=0;
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->bind_result($id, $naam, $bericht);
        while($stmt->fetch()){
            // Because $naam and $bericht are passed by reference, their value
            // changes on every iteration to reflect the current row

            $nmeRead=ucfirst($naam);
            $txtRead=ucfirst($bericht);
            echo ("<div style=\"margin:8px 0;padding:8px 12px;border:1px solid #ccc;border-radius:5px;\">");
            echo ("<strong>".$nmeRead."</strong><br />".$txtRead."<br />");
            echo ("</div>"."\n");
        }

        $stmt->close();
        $con_db->close();
    }

?>


Nu, voorlopig gecombineerd met deze insert-code werkt het perfect:

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
<?php
    //database transaction
    $con_db=new mysqli($host, $user, $code, $db);
    // Check connection
    if ($conn->connect_error) {
        echo '<br /><div id="errmsg">';
        echo $openErr;
        echo '</div>';
        mysqli_close(con_db) or die ($closeErr);
        header('Location: getuigenis.php');
        exit(0);
    }

    mysqli_set_charset($con_db,"utf8") or die ($openErr);
    $addrec="INSERT INTO opinies (voucher,naam,email,bericht) VALUES ($_POST['VOU'],$_POST['NME'],$_POST['EML'],$_POST['TXT'])";
    if(!mysqli_query($con_db,$addrec)){
        echo '<br /><div id="errmsg">';
        echo 'FOUT '.mysqli_errno().' : '.mysqli_error();
        echo '</div>';
        mysqli_close(con_db) or die ($closeErr);
        header('Location: getuigenis.php');
        exit(0);
    }

    $rows=mysqli_affected_rows($con_db);
    $con_db->close();
}

?>


Kan iemand mij adviseren?
Vriendelijk groet,
Lowie.
 
PHP hulp

PHP hulp

26/05/2020 10:20:21
 
Ivo P

Ivo P

01/04/2020 19:41:43
Quote Anchor link
"Nu, voorlopig gecombineerd met deze insert-code werkt het perfect:"

Dat is vreemd, want om de values staan geen quotes.

Dus tenzijn name, email en zo alleen maar nummers bevatten, zou dat fout moeten lopen.

Toevoeging op 01/04/2020 19:43:47:

waarom bouw je bij elke query opnieuw een connectie met de database? Doe dat bovenin je script eenmalig.

9 van de 10 scripts hebben altijd wel een connectie nodig, dus dat kun je eigenlijk meteen bovenaan wel regelen (vaak)

Toevoeging op 01/04/2020 19:45:59:

enne

PHP_SELF niet gebruiken. is onveilig.
En htmlspecialchars() is daar ook raar. urlencode() zou ik nog kunnen snappen

maar gebruiker liever gewoon <form action="" method="post">
 



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.