Hoi!

Ik wil een tabel updaten met informatie. De SQL-Query werkt prima, data word geüpdatete, toch blijft er een waarschuwing verschijnen dat er iets niet goed is in de Query.


$token = $_GET['token']; // vanuit de browser-url
$sql_update = $db_handle->runQuery("UPDATE gebruikers SET Geactiveerd = 'Ja' WHERE Token = '$token' ");

// daar komt uit bijvoorbeeld (geëchood) SQL = UPDATE gebruikers SET Geactiveerd = 'Ja' WHERE Token = '89230c74d68fb7f2ba88'
//Foutmelding: Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\NCD\dbcontroller.php on line 25

// DB Controller functie
function runQuery($query) {
	$result = mysqli_query($this->conn,$query);
	while($row = mysqli_fetch_assoc($result)) 
	{
		$resultset[] = $row;
	}		
	if(!empty($resultset))
		return $resultset;
}



Dus het werkt, wel, alleen de waarschuwing blijft. Ik gebruik eerder een andere SELECT-query en die werkt prima;


$sql_check = $db_handle->numRows("SELECT * FROM gebruikers WHERE Token = '$token' ");

Iemand enig idee hoe dit kan? Het lijkt dus of een SELECT Query prima werkt, alleen bij een UPDATE werkt het niet..
Furio Scripting op 18/03/2019 07:47:59

... voor 90% van mijn velden (formuliertjes) simpele text fields is dit prima.


Da's fijn - voor jou (in 90% van de gevallen). Maar net als Thomas zou ik een ieder ander toch aanraden om vooral zelf na te blijven denken (in 100% van de gevallen), en niet met bovenstaande "geval" te gaan werken.
Furio Scripting op 18/03/2019 07:47:59
er is geen enkele functie die voor elke situatie de data kan escapen

Precies, dit doe je per context en alleen als/voordat je de data gaat gebruiken. Je gaat niet op voorhand alles prepareren voor alle mogelijke contexten.

Furio Scripting op 18/03/2019 07:47:59
maar als basis neem ik de check_input functie en vanaf daar run ik meerdere functies erop. (strlen, strtolower, regex etc).

Euh, dus je gebruikt dit ook bij het filteren van input? Maar het filteren van input en het escapen van output zijn twee compleet verschillende dingen, die zou je dus ook afzonderlijk moeten behandelen :/.

De functie slaat denk ik toch de plank mis, en zoals aangegeven is deze functie alleen nog steeds niet afdoende. Ik hoop dat je als je queries bouwt dat je naast check_input() ook quotes gebruikt in de DATA-delen van de SQL? real_escape_string() escapet namelijk niets als er niets te escapen valt. Zo zal:
OR 1=1

ongeschonden uit real_escape_string() komen, zoals ook staat uitgelegd in de eerdere interne link in mijn vorige reactie.

Simpelweg omdat iets werkt, maakt het nog niet juist. Je moet ook weten en kunnen uitleggen waarom iets werkt.

Reageren