Thomas: PHP+Oracle+Commit

Hallo,

ich würde gerne folgendes realisieren:

das skript soll aus 2 Elementen bestehen:
1. es wird ein update auf einen Datensatz durchgeführt
 OCIParse(update blabla...);
 OCIExecute(..,OCI_DEFAULT);

2. zwei buttons: einmal einer der ein OCICommit ausführt und dann eine andere Seite aufruft(über form oder href).
der andere Button soll ein OCIRollback machen und dann auch auf eine andere Seite springen.

Weiss da jemand ne Lösung?

Vielen Dank

  1. Hi,

    1. zwei buttons: einmal einer der ein OCICommit ausführt und dann eine andere Seite aufruft(über form oder href).
      der andere Button soll ein OCIRollback machen und dann auch auf eine andere Seite springen.

    HTTP ist verbindungslos. Du musst Dich _vor_ dem Anzeigen der Buttons entscheiden, ob Du die Daten verwerfen willst oder nicht; andernfalls existiert kein Weg, diese Transaktion (getrennt von anderen) offen zu halten.

    Es sei denn, Du packst die Buttons in das selbe Formular, dessen frisch eingegebene Daten der User dann committen oder verwerfen kann. Da halte ich aber für hinreichend sinnarm.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      1. zwei buttons: einmal einer der ein OCICommit ausführt und dann eine andere Seite aufruft(über form oder href).
        der andere Button soll ein OCIRollback machen und dann auch auf eine andere Seite springen.

      HTTP ist verbindungslos. Du musst Dich _vor_ dem Anzeigen der Buttons entscheiden, ob Du die Daten verwerfen willst oder nicht; andernfalls existiert kein Weg, diese Transaktion (getrennt von anderen) offen zu halten.

      Es sei denn, Du packst die Buttons in das selbe Formular, dessen frisch eingegebene Daten der User dann committen oder verwerfen kann. Da halte ich aber für hinreichend sinnarm.

      Cheatah

      weiss nicht ob ich dich richtig verstanden hab, hier noch mal ne Erlklärung des Problems:
      ich wollte ein Formular machen mit eingabefeldern die der User dann abschicken kann. In dem darauffolgenden PHP-Skript werden dann die Daten in die Datenbank geschrieben (noch ohne commit) und erneut angezeigt. Der user soll nun entscheiden können "Daten endgültig in die DB schreiben" oder "Änderungen verwerfen".
      ich dachte dabei an einen button, der eine funktion aufruft die die Funktion OCICommit enthält und danach eine andre seite aufruft.

      1. Hi,

        weiss nicht ob ich dich richtig verstanden hab, hier noch mal ne Erlklärung des Problems:

        immerhin weiß ich jetzt, dass ich Dich richtig verstanden habe. Um meine vorherige Antwort auf ein vielleicht verständlicheres Sprachniveau zu transferieren: "Funzt net."

        In dem darauffolgenden PHP-Skript werden dann die Daten in die Datenbank geschrieben

        Warum? Offenbar willst Du das noch gar nicht.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. In dem darauffolgenden PHP-Skript werden dann die Daten in die Datenbank geschrieben

          Warum? Offenbar willst Du das noch gar nicht.

          ich will lediglich die Transaktionsfunktion von Oracle benutzen. Hierbei werden die Daten in die Datenbeank geschrieben (noch nicht endgültig, d.h. dass die Änderungen nur für den angemeldeten User sichtbar sind. Direkt darauf folgend wird im selben Skript und dem selben connect ein select auf den "geänderten" Datensatz durchgeführt. Der user bekommt nun angezeigt wie es in der DB aussieht, und er soll nun entscheiden können, ob er es tatsächlich so für alle sichtbar machen will.
          Das es net umbedingt funktioniert hab ich vermutet, aber war mir net sicher ob es doch irgendwie geht, da ja alles im selben skript abläuft.

          1. Hi,

            Warum? Offenbar willst Du das noch gar nicht.
            ich will lediglich die Transaktionsfunktion von Oracle benutzen.

            wenn Du in Dich gehst wirst Du feststellen, dass Du das _nicht_ willst. Du willst etwas anderes, und hierzu wolltest Du Transaktionen als Mittel einsetzen.

            Das es net umbedingt funktioniert hab ich vermutet, aber war mir net sicher ob es doch irgendwie geht, da ja alles im selben skript abläuft.

            Es wird vielleicht das selbe Script gestartet. Dies könnte aber sogar auf unterschiedlichen Rechnern passieren. HTTP ist verbindungslos.

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. Hallo Thomas!

            Cheatah hat vollkommen recht!

            Was Du möchtest, ist die Daten vor dem endgültigen Transfer in die DB prüfen zu lassen. Dazu brauchst Du definitiv noch nichts in die DB schreiben - also auch kein mögliches Rollback. Die DB lediglich zum "Zwischenpeichern" zu benutzen ist keine gute Lösung.

            Also einfach Daten anzeigen und erst nach neuerlicher Bestätigung direkt posten und committen. Dies ist der übliche und saubere Weg.

            mfg

            norbert =:-)