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="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"
werkt het gedeelte insert niet. Wat is de reden?

FORM gedeelte staat hier

<?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:

<?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.
"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.

[size=xsmall]Toevoeging op 01/04/2020 19:43:47:[/size]

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)

[size=xsmall]Toevoeging op 01/04/2020 19:45:59:[/size]

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">

Reageren