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:
$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.
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.
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.
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:
<?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:
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...
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:
[size=xsmall]Toevoeging op 10/07/2016 15:40:35:[/size]
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.