login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Undo laatste actie

Offline Erwt - 18/05/2010 11:21
Avatar van ErwtPHP beginner Hej allemaal,

Om meldingen als "Weet u zeker dat" etc. te vermijden zou ik graag een 'undo' functie willen maken. Echter is mij nog niet helemaal duidelijk hoe ik dit aan moet pakken. Is er een bepaalde manier voor? Ik zit namelijk zelf aan het volgende te denken:

- Als je een query doet, sla je deze bijv op in $lastquery;
- Als je dan de undo actie doet, moet hij aan de hand van alle data de omgekeerde actie uitvoeren dus stel:

  1. $query = "DELETE FROM " . $currenttable . " WHERE " . $firstcolumn . "='" . $firstvalue . "'";


Wordt dan
  1. $query = "INSERT INTO" . $currenttable . " SET " . $firstcolumn . "='" . $firstvalue . "'";


Maar dit lijkt me nogal een omslachtige manier en weet niet eens of het zou zal lukken, enige suggesties?

Bedankt!

4 antwoorden

Gesponsorde links
Offline Joost - 18/05/2010 11:40
Avatar van Joost PHP expert Een extra veldje in de database die dient als flag, waarbij 0 betekent dat het record bestaat en 1 dat het verwijderd is. Default 0 dan, snap je? 

Wat je ook kan doen is in een sessie de undo actie opslaan, en die uitvoeren wanneer er op undo is geklikt. Zo houd je de acties die bij elkaar horen ook bij elkaar in de code.
Offline Erwt - 18/05/2010 11:46 (laatste wijziging 19/05/2010 10:08)
Avatar van Erwt PHP beginner #1:
In principe zou 't mooiste zijn dat de 'undo' functie voor alle acties gelden, en bij een edit actie werkt dit dus niet, maar voor de rest wel een mooie oplossing voor 'delete' command.

#2:
Dus bijv ik DELETE iets, dan zou ik dus de INSERT actie moeten opslaan in de sessie. Is er dan een mogelijkheid dat ik problemen krijg met de ID's?

voorbeeld:
Ik heb 10 producten in een categorie genaamd 'wijnen'. Ik verwijder die categorie (wat eigenlijk al niet mag in een applicatie, maar STEL). dan krijg je dus een probleem, zijn er zo meer voorbeelden? bovenstaande komt namelijk nooit voor maar stel.

En dat wat jij zegt is hetzelfde als wat ik bovenaan zei hé, gewoon een 'tegenovergestelde' query maken, eventueel in een array zodat je zo een 'history list' hebt?

Edit:
Is het dan misschien ook noodzakelijk om een class te maken voor het opstellen van een query? dus bijv:

  1. $this->setWHERE("id",1);


Als ik dan zo mijn query bijvoorbeeld zal opstellen, kan ik dan meteen de undo-query opstellen. Maar als ik eenmaal mijn query heb, lijkt het me nogal lastig om deze uit elkaar te halen er een een undo-query van te maken, niet?
Offline Arphetic - 19/05/2010 20:59
Avatar van Arphetic Nieuw lid Buiten dat wat ik op IRC zei zou je het ook nog invisable kunnen maken, en een timestamp eraan kunnen hangen en m na 3 dagen pas compleet verwijderen.... Als je undo permanent mogelijk wilt maken ga je sowieso alles moeten bewaren.
Offline Erwt - 21/05/2010 13:52
Avatar van Erwt PHP beginner Als ik alles moet bewaren krijg ik dus altijd 100% overhead. Want als ik UPDATE gebruik, moet hij het oude record opslaan, maar de nieuwe ook. En als ik DELETE gebruik, moet hij hem ook backuppen. 100% overhead voor al mijn records vind ik teveel. Ik ga nog eens kijken hoe het precies zit met TRANSACTION wat vinTage me gaf. Ik laat het nog wel weten als ik er mee bezig ben geweest.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.193s