OOP website --> database invoeren (OOP vraag)
Ik heb een website gemaakt volledig in OOP. De objecten worden gewoon (leeg) aangemaakt bij het opstarten van de website in je browser.
Daarna, afhankelijk van wat je op de website doet, veranderen de eigenschappen van deze objecten.
Dat werkt allemaal heel goed maar nu wil ik een stap verder gaan en ook een Database gaan invoeren. De objecten komen volledig overeen met die in de database.
Nu weet ik niet goed hoe ik dit moet oplossen:
Bij elke wijziging van een object zou ik een regel aan de betreffende functie kunnen toevoegen zoals:
Code (php)
1
2
3
4
2
3
4
wijzigNaam($p_nieuwe_naam){
$this->naam = $p_nieuwe_naam;
mysql_query("UPDATE gebruiker SET naam = $p_nieuwe_naam"); // deze regel wordt dan toegevoegd
}
$this->naam = $p_nieuwe_naam;
mysql_query("UPDATE gebruiker SET naam = $p_nieuwe_naam"); // deze regel wordt dan toegevoegd
}
Maar deze oplossing brengt volgend probleem met zich mee:
STEL:
- gebruiker A logged in via computer 1, de OOP objecten worden gevuld met de informatie uit de database, het gebruikersobject wordt gevuld met de naam "Jan"
- gebruiker A logged tevens in via computer 2, en ook dan worden de OOP objecten gevuld met zijn naam (Jan)
Als hij dan op computer 1 zijn naam wijzigt, dan wordt de database geupdate, en wordt het object geupdate en via computer 1 lijkt alles perfect in orde
Als hij echter op computer 2 gaat kijken dan ziet hij dat de naam niet in orde is (want de oudere waarde is nog altijd ingevuld in dat object omdat die voor de wijziging ingeladen werd)
Kortom: het probleem is dat de objecten niet ACTIEF gewijzigd worden, alsook dat een wijziging in de database niet weergegeven wordt (als ik als Administrator zijn naam wijzig dan blijft voor hem nog altijd de oude naam zichtbaar terwijl ik wil dat hij meteen ziet dat hij een andere naam heeft )
Heeft er iemand een idee hoe ik de transformatie van mijn website dan best aanpak?
Momenteel kan ik een sessie-object DIRECT wijzigen en die wijziingen is overal zichtbaar in DIE sessie.
Bestaat er een mogelijkheid om dit heel eenvoudig Database gericht te maken zodat ik het volgende:
$_SESSION[objGebruiker]->wijzigNaam("Piet");
kan vervangen door
$_DATABASE[objGebruiker]->wijzigNaam("Piet");
$_DATABASE heb ik hier zelf verzonnen maar bestaat er zoiets? Of hoe kan ik best tewerk gaan?
je moet bij elke refresh gewoon de gegevens uit de database halen en de gegevens in je classes updaten ;)
$_DATABASE['objGebruiker'] kan gewoon als je daarin de instantie van de juiste classe plaatst.
Je hoeft toch niet de naam van de gebruiker in de sessie op te slaan? Een ID oid is genoeg. Als je dit doet, heb je altijd een correcte versie, omdat als je de naam nodig hebt, je deze ophaalt.
Gewijzigd op 01/01/1970 01:00:00 door Danny K
Het nadeel van de extra databasequery is in de meeste gevallen te verwaarlozen.