Beste,

Ik geraak er jammer genoeg niet uit zelfs na het zoeken via google....

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in \db-add_eenheid.php on line 12

Ziet iemand de fout of is het mogelijk mij in de juiste richting te duwen?

Met vriendelijke groeten,
Bart

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

include '../header.php';
include '../db_open.php';

$TEXT_EENHEID_SHORT=$_POST['EENHEID_SHORT'];
$TEXT_EENHEID_FULL=$_POST['EENHEID_FULL'];

$check_select = mysqli_query( $conn,"SELECT * FROM `eenheden` WHERE TEXT_EENHEID_SHORT = '$TEXT_EENHEID_SHORT'");
$numrows=mysqli_num_rows($check_select);

$sql= "INSERT INTO `eenheden`(`EENHEID_SHORT`, `EENHEID_FULL`) VALUES ('".$TEXT_EENHEID_SHORT."', '".$TEXT_EENHEID_FULL."')";


if($numrows== 0){
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else{
echo "Error: " . $sql . "<br>" . $conn->error;
// Code to be executed if condition is false
}
}
$conn->close();
?>
Ik zou foutafhandeling toevoegen op je $check_select, om te kijken of deze gelukt is. Ergens mislukt deze query blijkbaar.

Verder zie ik dat er beveiliging tegen SQL-injection mist, dus jan en alleman kunnen nu je query manipuleren met kwade gevolgen van dien.

Tevens raad ik niet aan om procedureel MySQLi (mysqli_*****() ) en Object Georiënteerd (OO) MySQLi ($conn->.....) door elkaar te mengen, omdat er verwarring kan ontstaan door inconsistenties bij het aanroep van de functies c.q. objecten. Mijn voorkeur gaat uit naar volledig gebruik van MySQLi Object Georiënteerd. Hiermee kan je zelfs een globale foutafhandeling maken.
Bedankt voor je reactie,

Ik zal vanavond de query nog eens onderzoeken, het is de bedoeling dat hij een waarde op het (mogelijke reeds) bestaan gaat nakijken in de database...

Je hebt gelijk over de veiligheid, het is echter voor intern gebruik ook al is dat niet echt een goed excuus :)

de onderste query ging ik later inderdaad ook nog om zetten, de bovenste was in de eerste versie ook anders maar werd omgezet omdat een bepaald deel hier deprecated was...

Bedankt voor de tips!
Bart Devroey op 21/06/2017 10:53:37

Je hebt gelijk over de veiligheid, het is echter voor intern gebruik ook al is dat niet echt een goed excuus :)

Dan alsnog kan het voor onbedoelde problemen zorgen. Voer maar eens een ' in.
je query zal dan stuk lopen.
De query fout is intussen opgelost : '$TEXT_EENHEID_SHORT' = EENHEID_SHORT" hier zat het fout :(

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

include '../header.php';
include '../db_open.php';

$TEXT_EENHEID_SHORT=$_POST['EENHEID_SHORT'];
$TEXT_EENHEID_FULL=$_POST['EENHEID_FULL'];

$check_select = mysqli_query( $conn,"SELECT * FROM `eenheden` WHERE '$TEXT_EENHEID_SHORT' = EENHEID_SHORT");
$numrows = mysqli_num_rows($check_select);

$sql= "INSERT INTO `eenheden`(`EENHEID_SHORT`, `EENHEID_FULL`) VALUES ('".$TEXT_EENHEID_SHORT."', '".$TEXT_EENHEID_FULL."')";




if($numrows== 0){
if ($conn->query($sql) === TRUE) {
echo "...New record created successfully";
} else{
echo "Error: " . $sql . "<br>" . $conn->error;
// Code to be executed if condition is false
}
}else{
echo "Deze record bestaat al!";
}
$conn->close();
?>

Reageren