OOP website --> database invoeren (OOP vraag)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fromzon ngl

Fromzon ngl

18/08/2008 00:25:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}


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?
 
PHP hulp

PHP hulp

23/11/2024 19:05:19
 
Leroy Boerefijn

Leroy Boerefijn

18/08/2008 10:02:00
Quote Anchor link
je moet bij elke refresh gewoon de gegevens uit de database halen en de gegevens in je classes updaten ;)
 
Danny K

Danny K

18/08/2008 10:31:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Danny K
 
Jelmer -

Jelmer -

18/08/2008 10:33:00
Quote Anchor link
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.
 



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.