Ik krijg de volgende melding
Warning: A non-numeric value encountered in

Bij dit script:
$podiumpoten += $aantalpoten['berekening_aantal'];

Ik lees op verschillende websites dat ik (int) ervoor moet zetten, maar dat haalt de melding niet weg.

Wat zou ik nog meer kunnen proberen?
Je kan die regel gewoon wissen, dan verdwijnt ook de warning.

Maar het is waarschijnlijk dat je er toch iets mee moet, in dat geval klopt ergens je data niet.
Als je wilt zien waar het fout gaat kan je voor die regel var_dump($aantalpoten); zetten, dan zie je dat er iets anders staat dan een getal.
PHP is wat het type variabele behoorlijk vergevingsgezind:

als $a += $x
en $x is een lege string, of false of null of een niet-numerieke string zoals "twee", dan zal PHP dit omzetten naar het getal 0 en vervolgens wordt het dus: $x += 0;

Maar kennelijk is $aantalpoten['berekening_aantal'] nu iets wat niet om te vormen valt naar een getal. Zelfs is het niet iets "leegs" dan PHP dan maar als 0 zou willen opvatten.

Het zou een object kunnen zijn, of een array in een array. In elk geval staat het te ver af van een getal of string om er mee te kunnen rekenen.

var_dump($aantalpoten['berekening_aantal']); zou kunnen helpen.

Gezien de naamgeving: had je niet $berekening_aantal; moeten gebruiken?


Ik krijg als antwoord het volgende:

string(2) "40"

Het antwoord komt uit de volgende query:

	$aantalpotensql  = $connection->query("
		Select
			berekening_product,
			berekening_aantal,
			tegels
		FROM
			podium_berekening_onderdelen,
			podium_product
		WHERE
			code=berekening_product
		AND
			berekening_soort='3'
		AND
			berekening_kenmerk = '".$kenmerk."'
		");
		
//$aantalpotensql =	mysql_query($aantalpotenqry);	
if($aantalpotensql === false){
	echo (" Er gaat iets mis");
}else{	
	while($aantalpoten = $aantalpotensql->fetch_assoc())
	var_dump($aantalpoten['berekening_aantal']); 
	$podiumpoten				+= 	$aantalpoten['berekening_aantal'];
	$podiumdelen				=	$podiumpoten/4;	
	$rekenpodiumpoten			= 	$podiumpoten*$factorpoten;
}


In het tabel staat het getal 40. Du sik denk dat ik het verkeerd oproep in de query
$podiumpoten += intval($aantalpoten['berekening_aantal']);
Is dit niet een beetje vals spelen of is dit de manier om een getal uit een tabel te halen?

var_dump(intval($aantalpoten['berekening_aantal']));

Dit geeft int(40) als resultaat
Is het wel als integer in de database opgeslagen?

[size=xsmall]Toevoeging op 29/03/2022 04:29:09:[/size]

>> Dit geeft int(40) als resultaat

Het werkt dus.
JA het wordt opgeslagen als int(11)

Het resultaat zou toch gewoon 40 moeten zijn ipv int(40)

>> Dit geeft int(40) als resultaat

int(40) geeft aan dat het een integer(getal) is met als waarde 40.
Maar als het antwoord goed zou zijn ,waarom dan toch die melding.
MySQL (verouderd -> gebruik MySQLi of PDO) fetch_assoc geeft strings terug.

https://www.php.net/manual/en/function.mysql-fetch-assoc.php

https://exchangetuts.com/mysql-integer-field-is-returned-as-string-in-php-1639492024384290

Ik neem aan dat je die melding niet meer krijgt als je dit gebruikt:

$podiumpoten += intval($aantalpoten['berekening_aantal']);

Tenzij je ergens anders hetzelfde probleem hebt. Dan moet je even kijken in welk regelnummer de fout zich voordoet.

Reageren