Warning: A non-numeric value encountered in

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

J C

J C

28/03/2022 06:46:49
Quote Anchor link
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?
 
PHP hulp

PHP hulp

03/12/2024 18:30:39
 

28/03/2022 09:10:08
Quote Anchor link
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.
Gewijzigd op 28/03/2022 09:12:48 door
 
Ivo P

Ivo P

28/03/2022 10:37:35
Quote Anchor link
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?
 
J C

J C

29/03/2022 04:19:47
Quote Anchor link
Ik krijg als antwoord het volgende:

string(2) "40"

Het antwoord komt uit de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
    $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
Gewijzigd op 29/03/2022 04:22:03 door J C
 
Ozzie PHP

Ozzie PHP

29/03/2022 04:21:51
Quote Anchor link
$podiumpoten += intval($aantalpoten['berekening_aantal']);
 
J C

J C

29/03/2022 04:24:42
Quote Anchor link
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
Gewijzigd op 29/03/2022 04:27:06 door J C
 
Ozzie PHP

Ozzie PHP

29/03/2022 04:27:45
Quote Anchor link
Is het wel als integer in de database opgeslagen?

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
 
J C

J C

29/03/2022 04:32:44
Quote Anchor link
JA het wordt opgeslagen als int(11)

Het resultaat zou toch gewoon 40 moeten zijn ipv int(40)
Gewijzigd op 29/03/2022 04:36:19 door J C
 
Ozzie PHP

Ozzie PHP

29/03/2022 04:35:38
Quote Anchor link
>> Dit geeft int(40) als resultaat

int(40) geeft aan dat het een integer(getal) is met als waarde 40.
 
J C

J C

29/03/2022 04:36:26
Quote Anchor link
Maar als het antwoord goed zou zijn ,waarom dan toch die melding.
 
Ozzie PHP

Ozzie PHP

29/03/2022 04:42:00
Quote Anchor link
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.
 
J C

J C

29/03/2022 04:44:46
Quote Anchor link
Nee ik krijg nog steeds de melding.
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)
PHP script in nieuw venster Selecteer het PHP script
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
//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));
}


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

- SanThe -

29/03/2022 07:41:54
Quote Anchor link
While mist { en }
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));
   }
}
 
Ivo P

Ivo P

29/03/2022 08:56:40
Quote Anchor link
Wat is de inhoud van $podiumpoten vóór regel 24?
 
J C

J C

29/03/2022 15:16:45
Quote Anchor link
- SanThe - op 29/03/2022 07:41:54:
While mist { en }
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));
   }
}


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
 
Ozzie PHP

Ozzie PHP

29/03/2022 15:23:52
Quote Anchor link
Doe eens zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

}else{    
    while($aantalpoten = $aantalpotensql->fetch_assoc())
   {

    $podiumpoten                +=     intval($aantalpoten['berekening_aantal']);
    $podiumdelen                =    $podiumpoten/4;    
    $rekenpodiumpoten            =     $podiumpoten*$factorpoten;
    
    echo '<br>podiumpoten: ' . $podiumpoten;
    echo '<br>podiumdelen: ' . $podiumdelen;

   }
}
Gewijzigd op 29/03/2022 15:24:10 door Ozzie PHP
 
J C

J C

29/03/2022 15:35:58
Quote Anchor link
Warning: A non-numeric value encountered in /home/sds/domains/stage-drapes.nl/public_html/new/includes/podium-totaal-berekening.php on line 67

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
 
- Ariën  -
Beheerder

- Ariën -

29/03/2022 15:58:43
Quote Anchor link
Ik zou eens proberen om je functies ook gelijk te trekken met de object-georienteerde manier.
Gewijzigd op 29/03/2022 15:59:44 door - Ariën -
 
Ivo P

Ivo P

29/03/2022 16:05:07
Quote Anchor link
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.
 
J C

J C

29/03/2022 16:12:53
Quote Anchor link
- 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.



Met deze regel voer ik de query toch uit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$aantalpoten = $aantalpotensql->fetch_assoc()){
 
- Ariën  -
Beheerder

- Ariën -

29/03/2022 16:42:27
Quote Anchor link
Nee, daarmee zorg je ervoor dat de data van de result in een array wordt omgezet.
Je zult dus $connection->query(....) moeten gebruiken.
Gewijzigd op 29/03/2022 16:42:38 door - Ariën -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.