OOP website --> database invoeren (OOP vraag)
Ik was aan het twijfel of dit bij "Databases / SQL" thuishoort, of bij OOP, maar het lijkt me wel het meest verband te houden met OOP.
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:
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?
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?
Gesponsorde koppelingen:
je moet bij elke refresh gewoon de gegevens uit de database halen en de gegevens in je classes updaten ;)
Teneerste: met die query verander je ALLE rijen met de velden "gebruiker" in de database naar de nieuwe waarde. Lijkt mij niet de bedoeling.
$_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.
$_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
Idd. Het is niet nodig om het hele object in de sessie te zetten. Slechts een id, of een unieke key die verwijst naar de juiste database-regel is voldoende. Voordeel is dat je niet 2 verschillende "instanties" van hetzelfde object (die beiden hetzelfde representeren) synchroon hoeft te houden. En dat scheelt je een heleboel kopzorgen.
Het nadeel van de extra databasequery is in de meeste gevallen te verwaarlozen.
Het nadeel van de extra databasequery is in de meeste gevallen te verwaarlozen.



