Optellen lukt me niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

10/07/2016 10:35:12
Quote Anchor link
Beste Forumleden,

Ik heb 2 functies welke een getal returnen. Als ik beide functies apart aanroep krijg ik netjes een getal terug.

Nu heb ik nog een functie gemaakt welke deze 2 functies bij elkaar moet tellen maar dit werkt/ mag denk niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
 function verkrijgAlleBestellingenVanVandaag()
    {

    
  
    return verkrijgLaserpengigantBestellingenVandaag() + verkrijgLaserpointeronlineBestellingenVandaag();
}

?>


Hoe kan ik nu de 2 functies bij elkaar optellen?
 
PHP hulp

PHP hulp

11/05/2024 04:43:25
 
- Ariën  -
Beheerder

- Ariën -

10/07/2016 10:45:10
Quote Anchor link
Gebruik eens je $this-> global als het een class is. En laat eens wat meer relevante code zien.

Maar waarom een functie voor elke webwinkel? In je vorige topic zijn een hoop alternatieven aangedragen.
Gewijzigd op 10/07/2016 10:50:51 door - Ariën -
 
Furio Scripting

Furio Scripting

10/07/2016 10:59:08
Quote Anchor link
- Ariën - op 10/07/2016 10:45:10:
Gebruik eens je $this-> global als het een class is. En laat eens wat meer relevante code zien.

Maar waarom een functie voor elke webwinkel? In je vorige topic zijn een hoop alternatieven aangedragen.


Ik heb bovenaan mijn functies.php bestand nu dit gezet:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$laserpenGigantBestellingVandaag = 0;
$laserpointershopBestellingenVandaag = 0;

Vervolgens in de functie:

// Laserpengigant.be
    function verkrijgLaserpengigantBestellingenVandaag()
    {

        global $laserpenGigantBestellingVandaag;
        // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
        $database = new databaseGigant();

        $q = 'SELECT * FROM oc_order WHERE (order_status_id = 1 OR order_status_id = 15) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
        $result = $database->query($q);
        
        $laserpenGigantBestellingVandaag = mysqli_num_rows($result);

        return mysqli_num_rows($result);

    }

  // Laserpointershop.co.uk
    function verkrijgLaserpointershopBestellingenVandaag()
    {

        global $laserpointershopBestellingenVandaag;
        // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
        $database = new databasepointershop();

        $q = 'SELECT * FROM oc_order WHERE (order_status_id = 3 OR order_status_id = 1) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
        $result = $database->query($q);
        
        $laserpointershopBestellingenVandaag = mysqli_num_rows($result);

        return mysqli_num_rows($result);

 function verkrijgAlleBestellingenVanVandaag()
    {
    
   global $laserpenGigantBestellingVandaag, $laserpointershopBestellingenVandaag, $laserpointeronlineBestellingenVandaag;

    
   return  $laserpenGigantBestellingVandaag + $laserpointershopBestellingenVandaag +  $laserpointeronlineBestellingenVandaag;
  
  
    
    }

    }


Maar ik krijg een 0 waarde terug. Doe ik iets niet goed met de global functie?

Ik vind het voor mij overzichtelijker werken met aparte functies ook omdat niet elke functie hetzelfde is.
 
- Ariën  -
Beheerder

- Ariën -

10/07/2016 11:03:59
Quote Anchor link
Wat is het verschil per functie dan? Daar kan je toch een argument van maken? Maak dus 1 functie: getOrdersFromWebshop('...') en haal daarmee de bestellingen op per webshop.
En met getAllOrders() voer je de vorige functie steeds uit voor elke webshop in een loop.

Verder roep je nu een variabele op i.p.v een functie.
Gewijzigd op 10/07/2016 11:08:28 door - Ariën -
 
Furio Scripting

Furio Scripting

10/07/2016 11:24:23
Quote Anchor link
- Ariën - op 10/07/2016 11:03:59:
Wat is het verschil per functie dan? Daar kan je toch een argument van maken? Maak dus 1 functie: getOrdersFromWebshop('...') en haal daarmee de bestellingen op per webshop.
En met getAllOrders() voer je de vorige functie steeds uit voor elke webshop in een loop.

Verder roep je nu een variabele op i.p.v een functie.


Verschil is de status id en de database maar ik vind het wel fijn dat het gescheiden is per functie alleen het optellen is zo lkastig lijkt het nu, is dit niet eenvoudig op te lossen want met scope begrijp ik het niet/doe ik het niet goed.
 
- Ariën  -
Beheerder

- Ariën -

10/07/2016 11:30:06
Quote Anchor link
Totdat je 15 webwinkels hebt, een draak van een code en een typefout maakt waardoor het aantal niet klopt. Veel succes dan!


Met een simpele configuratie in bijv. een array kan je prima controle houden over alle webshops, zonder extra functies aan te maken.

Verder zou je functies gewoon moeten kunnen optellen als er integers uitkomen.
Gewijzigd op 10/07/2016 11:31:20 door - Ariën -
 
Furio Scripting

Furio Scripting

10/07/2016 11:44:17
Quote Anchor link
- Ariën - op 10/07/2016 11:30:06:
Totdat je 15 webwinkels hebt, een draak van een code en een typefout maakt waardoor het aantal niet klopt. Veel succes dan!


Met een simpele configuratie in bijv. een array kan je prima controle houden over alle webshops, zonder extra functies aan te maken.

Verder zou je functies gewoon moeten kunnen optellen als er integers uitkomen.


Met oog op de toekomst heb ik het nu in 1 functie gezet, en via if else return ik nu de orders van vandaag. Voor het optellen van alle orders van vandaag doe ik aan de voorkant:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

  [code]<?php echo verkrijgAlleOrdersVanVandaagVanWebshop('domein1.nl') + verkrijgAlleOrdersVanVandaagVanWebshop('domein2'); ?>

?>


En dit returnt nu de juiste waardes bij elkaar :) Super bedankt!



Toevoeging op 10/07/2016 12:02:38:

Excuses het klopt nog niet!

Als ik de functie apart doe krijg ik 2 en 1 wat correct is.

Als ik ze bij elkaar optel komt er 4 uit terwijl dit natuurlijk 3 moet zijn..... Hoe kan dit in godsnaam?
Gewijzigd op 10/07/2016 11:44:49 door Furio Scripting
 
- Ariën  -
Beheerder

- Ariën -

10/07/2016 12:17:46
Quote Anchor link
Laat je nieuwe functie eens zien?
 
Furio Scripting

Furio Scripting

10/07/2016 13:20:20
Quote Anchor link
- Ariën - op 10/07/2016 12:17:46:
Laat je nieuwe functie eens zien?

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
    function verkrijgAlleOrdersVanVandaagVanWebshop($shop)
    {


        $aantal = 0;

        if ($shop == 'domein1')
        {



                // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
                $database = new databaseGigant();

                $q = 'SELECT * FROM oc_order WHERE (order_status_id = 1 OR order_status_id = 15) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
                $result = $database->query($q);
                
                

                $aantal = mysqli_num_rows($result);

        }

        
         elseif ($shop == 'domein2')
        {



                // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
                $database = new databasepointershop();

                $q = 'SELECT * FROM oc_order WHERE (order_status_id = 3 OR order_status_id = 1) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
                $result = $database->query($q);
                
                

                $aantal = mysqli_num_rows($result);





        }

        elseif($shop == 'domein 3')
        {

        
        
            // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
            $database = new databasepointeronline();

            $q = 'SELECT * FROM oc_order WHERE (order_status_id = 3 OR order_status_id = 1) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
            $result = $database->query($q);

           $aantal = mysqli_num_rows($result);
        
        }

        
        elseif($shop == 'domein 4')
        {

        
        
            // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
            $database = new databaseeandealsNL();

            $q = 'SELECT * FROM oc_order WHERE (order_status_id = 15 OR order_status_id = 1) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
            $result = $database->query($q);

            $aantal = mysqli_num_rows($result);
        
        }

        
         elseif($shop == 'domein 5')
        {

        
        
             // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
            $database = new databaseeandealsDE();

            $q = 'SELECT * FROM oc_order WHERE (order_status_id = 15 OR order_status_id = 1) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
            $result = $database->query($q);

            $aantal = mysqli_num_rows($result);
        
        }

        
           elseif($shop == 'domein 6')
        {

        
        
             // Pak alle bestellingen van vandaag en met de status in behandeling of verzonden.
            $database = new databaseiphonehoesje();

            $q = 'SELECT * FROM oc_order WHERE (order_status_id = 15 OR order_status_id = 1) AND YEAR(date_added) = YEAR(NOW()) AND MONTH(date_added) = MONTH(NOW()) AND DAY(date_added) = DAY(NOW()) ';
            $result = $database->query($q);

           $aantal = mysqli_num_rows($result);
        
        }

        
        else
        {
        $aantal = 0;
        }

        
        return $aantal;
        exit();



        }

?>


Aan de voorkant waar het totaal weergeven moet worden staat dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo verkrijgAlleOrdersVanVandaagVanWebshop('domein 1') + verkrijgAlleOrdersVanVandaagVanWebshop('domein 2') + verkrijgAlleOrdersVanVandaagVanWebshop('domein 3') + verkrijgAlleOrdersVanVandaagVanWebshop('domein 4'); ?>


Het resultaat is daar: 4 wat niet correct is als ik kijk bij de bestellingen.
Als ik de functie per webshop aanroep krijg ik wel de juiste aantallen maar bij het optellen gaat iets niet goed...
Gewijzigd op 10/07/2016 13:29:23 door Furio Scripting
 
- Ariën  -
Beheerder

- Ariën -

10/07/2016 13:44:30
Quote Anchor link
Maar je zit nog steeds met een berg aan soortgelijke queries die in 1 functie passen. Onhandig en nog steeds foutgevoelig.

Ik vermoed dat het probleem in een database-connectie zit die niet afgesloten wordt?
 
Furio Scripting

Furio Scripting

10/07/2016 13:50:58
Quote Anchor link
- Ariën - op 10/07/2016 13:44:30:
Maar je zit nog steeds met een berg aan soortgelijke queries die in 1 functie passen. Onhandig en nog steeds foutgevoelig.

Ik vermoed dat het probleem in een database-connectie zit die niet afgesloten wordt?


Dat is waar maar het is al wat overzichtelijker. Kan een niet gesloten database connectie ervoor zorgen dat als je de functie aanroept per website je wel het juiste getal krijgt maar zodra je de getallen wilt optellen het mis gaat.

Als ik bijv de functie 2x achter elkaar optel pakt die enkel het getal van de eerste domein, hij pakt dus altijd het eerste domein...

Zelfs zo pakt die dus altijd het eerste getal als output:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$getal1
= verkrijgAlleOrdersVanVandaagVanWebshop('laserpointeronline.de'); // output 1
$getal2 = verkrijgAlleOrdersVanVandaagVanWebshop('eandeals.nl'); // output 2
                            
                            
echo $getal2; //output 1.?>


Toevoeging op 10/07/2016 15:40:35:

Het is opgelost, was inderdaad iets met de databases. De connectie variabel constanten werden allemaal hetzelfde genoemd dus hij pakte altijd van de eerste die connectie maakte de gegevens.
 



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.