Optellen lukt me niet?
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)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
function verkrijgAlleBestellingenVanVandaag()
{
return verkrijgLaserpengigantBestellingenVandaag() + verkrijgLaserpointeronlineBestellingenVandaag();
}
?>
function verkrijgAlleBestellingenVanVandaag()
{
return verkrijgLaserpengigantBestellingenVandaag() + verkrijgLaserpointeronlineBestellingenVandaag();
}
?>
Hoe kan ik nu de 2 functies bij elkaar optellen?
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 -
- 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.
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)
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
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;
}
}
$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.
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 -
- 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.
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.
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 -
- 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 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)
1
2
3
4
2
3
4
<?php
[code]<?php echo verkrijgAlleOrdersVanVandaagVanWebshop('domein1.nl') + verkrijgAlleOrdersVanVandaagVanWebshop('domein2'); ?>
?>
[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
Laat je nieuwe functie eens zien?
- Ariën - op 10/07/2016 12:17:46:
Laat je nieuwe functie eens zien?
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
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
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();
}
?>
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)
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
Ik vermoed dat het probleem in een database-connectie zit die niet afgesloten wordt?
- 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?
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)
1
2
3
4
5
6
2
3
4
5
6
<?php
$getal1 = verkrijgAlleOrdersVanVandaagVanWebshop('laserpointeronline.de'); // output 1
$getal2 = verkrijgAlleOrdersVanVandaagVanWebshop('eandeals.nl'); // output 2
echo $getal2; //output 1.?>
$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.