Twee Prepared statements in één .php-bestand waarvan insert niet lukt
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=""
werkt het gedeelte insert niet. Wat is de reden?
FORM gedeelte staat hier
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
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();
}
?>
// 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)
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
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();
}
?>
//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.
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">