Een record dupliceren
Voorbeeld:
tabel voor duplicatie van rij 3
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 |Klaas | Dorpstraat | Linne
tabel na de duplicatie van rij 3
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 | Klaas | Dorpstraat | Linne
4 | Klaas | Dorpstraat | Linne
Hoe doe ik dit tot op heden:
Nu lees ik alle veldwaardes uit. Sla deze op in een variabele en insert een nieuwe row met de opgeslagen waardes.
Wanneer er echter iets verandert aan de structuur van mijn tabel (veld erbij) dan moet ik tekens in de dupliceer functie alles mee aanpassen. Dit kan vast makkelijker.
Misschien iets in de geest van:
DuplicateRow * FROM tbl_test WHERE id =3
Groet Marc
Waarom zou je dat willen je data dubbel opslaan?
De werkelijke tabel maakt deel uit van een dossierregistratie waarbij de verschillende dossiers slechts op enkele punten afwijken. Het telt +/- 45 velden.
oftwel je haalt de data uit de DB.
Toont deze op het scherm met daarbij een linkje.
Als mensen op de link klikken krijgen ze een <form> met de te wijzigen data en een knop om de wijzigingen door te voeren.
Als ze op de knop gedrukt hebben en je hebt de ingevoerde data gecontroleerd draait er een UPDATE scriptje
Maar om een nieuwe bijna gelijke regel in te voegen.
Voorbeeld:
tabel vóór duplicatie van rij 3
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 |Klaas | Dorpstraat | Linne
tabel NA de duplicatie van rij 3
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 | Klaas | Dorpstraat | Linne
4 | Klaas | Dorpstraat | Linne
tabel NA het aanpassen van het duplicaat
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 | Klaas | Dorpstraat | Linne
4 | Henk | Dorpstraat | Linne
Het idee:
Je leest de data van die ene rij uit, en zet het in een formulier. Je laat alleen de naam leeg, die vullen ze dan in, en jij INSERT de nieuwe rij.
De door u voorgestelde werkwijze is gelijk aan mijn huidige werkwijze met dat verschil dat ik de gegevens niet in een formulier laad, maar in een aantal variabelen plaats. Hierna voer ik een insert uit waarbij de waarden uit de variabelen worden geschreven.
Het probleem is echter dat ik telkens variabelen (of in uw idee formulier elementen) moet bij maken wanneer een veld aan de database wordt toegevoegd.
Is het niet mogelijk om een record op basis van het ID aan te wijzen en MySQL de opdracht te geven dit record volledig te kopiëren. (Nog een keer opslaan in de database)?
Daarna kan ik in het nieuwe record gegevens wijzigen met UPDATE
Zie ook het startbericht van dit topic.
Alvast bedankt,
Marc
Maar een rij dupliceren lijkt me niet mogelijk zonder moeilijke te doen...
Overigens blijft overeind, dat het formulier op de database aangepast moet worden. Wellicht dat ik dit met een lusje kan laten oplossen. Eerst de tabel definitie uitlezen en dan automatisch per veld en veldtype een element op het formulier plaatsen.
Ik ga experimenteren.
Bedankt.
edit: misschien moet je niet * doen maar alle velden op 'id' na, omdat hij anders misschien id=3 toevoegt in plaats van doortelt.
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
Tip: Maak de combinatie van alle velden (exclusief het id) UNIQUE. Dan kan iemand onmogelijk dezelfde gegevens nog een keer opslaan. Dat wil je echt niet hebben in je database, deze is dan corrupt.
Dit is precies wat ik zocht!
Ik heb het zojuist even in PhPMyAdmin getest en het werkt. (mits ik geen ID mee geef)
Frank:
Dubbele records zijn inderdaad meestal niet wenselijk. De vraag die ik hier stelde maakt deel uit van een groter geheel. Er wordt altijd datum en tijd bijgehouden zodoende zijn de records sowieso nooit helemaal gelijk. En qua overige data is het in dit geval soms de bedoeling dat er gelijke gegevens worden opgeslagen, weliswaar telkens met een ander tijdstempel.
Opgelost dankzij PhPErik! De rest ook bedankt voor de tips!