Warning: A non-numeric value encountered in
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?
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.
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?
string(2) "40"
Het antwoord komt uit de volgende query:
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
$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;
}
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
Gewijzigd op 29/03/2022 04:22:03 door J C
$podiumpoten += intval($aantalpoten['berekening_aantal']);
var_dump(intval($aantalpoten['berekening_aantal']));
Dit geeft int(40) als resultaat
Gewijzigd op 29/03/2022 04:27:06 door J C
Toevoeging op 29/03/2022 04:29:09:
>> Dit geeft int(40) als resultaat
Het werkt dus.
Gewijzigd op 29/03/2022 04:28:35 door Ozzie PHP
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.
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.
Eigenlijk nog 4 keer op die pagina.
Het is ontstaan na een verhuizing van de website.
Het script werkt wel gewoon maar met deze warnings.
Ik heb wat extra var dumps gemaakt:
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
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
//hoeveel gewone podiumpoten zijn er?
$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())
$podiumpoten += intval($aantalpoten['berekening_aantal']);
$podiumdelen = $podiumpoten/4;
$rekenpodiumpoten = $podiumpoten*$factorpoten;
var_dump(intval($aantalpoten['berekening_aantal']));
var_dump(intval($podiumpoten));
var_dump(intval($podiumdelen));
}
$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())
$podiumpoten += intval($aantalpoten['berekening_aantal']);
$podiumdelen = $podiumpoten/4;
$rekenpodiumpoten = $podiumpoten*$factorpoten;
var_dump(intval($aantalpoten['berekening_aantal']));
var_dump(intval($podiumpoten));
var_dump(intval($podiumdelen));
}
Warning: A non-numeric value encountered in /home/sds/domains/stage-drapes.nl/public_html/new/includes/podium-totaal-berekening.php on line 67
int(0) int(40) int(10)
En dit zou het moeten zijn:
$aantalpoten['berekening_aantal'] = 40 (volgens database)
$podiumpoten += $aantalpoten['berekening_aantal']
$podiumdelen = 40/4
Gewijzigd op 29/03/2022 04:54:54 door J C
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
}else{
while($aantalpoten = $aantalpotensql->fetch_assoc())
{
$podiumpoten += intval($aantalpoten['berekening_aantal']);
$podiumdelen = $podiumpoten/4;
$rekenpodiumpoten = $podiumpoten*$factorpoten;
var_dump(intval($aantalpoten['berekening_aantal']));
var_dump(intval($podiumpoten));
var_dump(intval($podiumdelen));
}
}
while($aantalpoten = $aantalpotensql->fetch_assoc())
{
$podiumpoten += intval($aantalpoten['berekening_aantal']);
$podiumdelen = $podiumpoten/4;
$rekenpodiumpoten = $podiumpoten*$factorpoten;
var_dump(intval($aantalpoten['berekening_aantal']));
var_dump(intval($podiumpoten));
var_dump(intval($podiumdelen));
}
}
Wat is de inhoud van $podiumpoten vóór regel 24?
- SanThe - op 29/03/2022 07:41:54:
While mist { en }
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
}else{
while($aantalpoten = $aantalpotensql->fetch_assoc())
{
$podiumpoten += intval($aantalpoten['berekening_aantal']);
$podiumdelen = $podiumpoten/4;
$rekenpodiumpoten = $podiumpoten*$factorpoten;
var_dump(intval($aantalpoten['berekening_aantal']));
var_dump(intval($podiumpoten));
var_dump(intval($podiumdelen));
}
}
while($aantalpoten = $aantalpotensql->fetch_assoc())
{
$podiumpoten += intval($aantalpoten['berekening_aantal']);
$podiumdelen = $podiumpoten/4;
$rekenpodiumpoten = $podiumpoten*$factorpoten;
var_dump(intval($aantalpoten['berekening_aantal']));
var_dump(intval($podiumpoten));
var_dump(intval($podiumdelen));
}
}
Dat is inderdaad raar, inmiddels opgelost, maar veranderd nog niets aan de melding.
De waarde van $podiumpoten voor regel 24 is 0
Gewijzigd op 29/03/2022 15:17:16 door J C
podiumpoten: 20
podiumdelen: 5
Toevoeging op 29/03/2022 15:40:33:
Kan het te maken hebben met $connectioon?
$connection = new mysqli("localhost", "website", "123456", "website");
if (mysqli_connect_errno())
{
printf("Could not connect to the database. Errormessage %s\n", mysqli_connect_error());
}
Dat is wel mysqli en mijn query niet/
Gewijzigd op 29/03/2022 15:38:42 door J C
Gewijzigd op 29/03/2022 15:59:44 door - Ariën -
Daarbij gebruik je een variabele dubbel:
$aantalpotensql bevat eerst de query.
En nadat je de plek voorbij bent waar je de query (met oude mysql-functie) uit zou voeren, zou aantalpotensql een resultset kunnen bevatten. (maar die regel is uitgecommenteerd)
Hoe dan verderop je array toch een waarde bevat, is wel raar.
- Ariën - op 29/03/2022 15:58:43:
Ik zou eens proberen om je functies ook gelijk te trekken met de object-georienteerde manier.
Het stomme aan het hele verhaal is dat ik 2 jaar geleden heel veel geld heb neer geteld om dit script up to date te laten maken, maar hoe meer ik me aan het inlezen ben, hoe meer ik erachter kom dat de zo genaamde update alsnog verouderd is en niet volledig is doorgevoerd.
Toevoeging op 29/03/2022 16:18:48:
Ivo P op 29/03/2022 16:05:07:
in de code die je geeft, voer je de query niet uit.
Daarbij gebruik je een variabele dubbel:
$aantalpotensql bevat eerst de query.
En nadat je de plek voorbij bent waar je de query (met oude mysql-functie) uit zou voeren, zou aantalpotensql een resultset kunnen bevatten. (maar die regel is uitgecommenteerd)
Hoe dan verderop je array toch een waarde bevat, is wel raar.
Daarbij gebruik je een variabele dubbel:
$aantalpotensql bevat eerst de query.
En nadat je de plek voorbij bent waar je de query (met oude mysql-functie) uit zou voeren, zou aantalpotensql een resultset kunnen bevatten. (maar die regel is uitgecommenteerd)
Hoe dan verderop je array toch een waarde bevat, is wel raar.
Met deze regel voer ik de query toch uit?
Je zult dus $connection->query(....) moeten gebruiken.
Gewijzigd op 29/03/2022 16:42:38 door - Ariën -