Andreas H.: Wie Bestellnummer in Online-Shop in Log-Datei schreiben

Guten Tag,

basierend auf der Bestellbestätigungsseite in einem Online-Shop (der Danke für Ihre Bestellung Seite) möchte ich die Bestellnummer der Bestellung in eine Log-Datei die auf dem Server schreiben. Ist in der Logdatei bereits eine Bestellnummer enthalten soll die Log-Datei um die neue Bestellnummer erweitert werden.

Mit HTML oder Javascript geht so etwas vermutlich nicht, weil diese beiden Sprachen ja keinen Zugriff auf das Dateisystem haben?

Klappt so etwas vielleicht mit PHP? Wüsste dann aber auch nicht wie, weil PHP ja auf dem Server ausgeführt wird. Auf dem Server weiß man aber doch die Bestellnummer noch gar nicht, die wird ja erst bei der Client seitigen Bestellung generiert und kann damit auch nur Client seitig und nicht Server seitig per PHP in die Datei geschrieben werden.

Bin ich vielleicht komplett auf dem Holzweg und sollte ich mir hier einer ganz anderen Technologie bedienen?

Die Bestellnummer muss auch nicht unbedingt in eine Log-Datei, sie muss nur irgendwie gespeichert werden z.B. per E-Mail geschickt werden oder sonst wie gespeichert werden.

  1. Hello,

    Du arbeitest im HTML ganz einfach mit Formularen und den dazugehörigen Dialogelementen. Das Formular lässt sich ganz bequem mit einem PHP-Skript verknüpfen, dass die Eingaben dann auf dem Server verarbeiten kann.

    Guck Dir mal im Wiki das Thema HTML -> Formulare an.

    Formulare

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
  2. Hallo Andreas,

    wieso sagst Du, dass die Bestellnummer auf dem Server nicht verfügbar sei? Selbstverständlich kommt die vom Server. Ein Client kann und darf keine Identifikationsnummern erzeugen, die vom Server für seine Datenablage verwendet werden.

    Der Ablauf ist doch dieser:

    1. Kunde wählt Artikel aus und legt sie in den Warenkorb
    2. Kunde ruft Warenkorb auf, gibt seine Anschrift ein und klickt auf "Kostenpflichtig bestellen".
    3. Der Server macht aus dem Inhalt des Warenkorbs den Auftrag, VERGIBT DABEI EINE BESTELLNUMMER, erzeugt die "Danke für Ihre Bestellung" Seite (auf der die Bestellnummer meistens angezeigt wird) und schickt sie an den Browser des Kunden.

    Nebenbei schickt er noch eine Bestätigungsmail (mit der Bestellnummer) an den Kunden. Was sonst noch so alles passiert, hängt vom gewählten Zahlungsweg ab.

    Die Bestellung mit ihrer Bestellnummer ist nun in der Datenbank des Shop gespeichert und kann dort abgefragt werden. Wenn's denn unbedingt sein muss, kann das Programm, dass Schritt 3 durchführt, auch noch eine Zeile mit der Bestellnummer an eine Log-Datei anhängen. Das ist mit den Dateifunktionen von PHP kein Problem.

    Also - die Lösung lautet: Dein Log-Eintrag muss am Server geschrieben werden - als Teilaufgabe der Bestellabwicklung. Und dein Problem dabei lautet nun wie? Keine Ahnung von PHP? Kein Zugriff auf den Server?

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      Wenn's denn unbedingt sein muss, kann das Programm, dass Schritt 3 durchführt, auch noch eine Zeile mit der Bestellnummer an eine Log-Datei anhängen. Das ist mit den Dateifunktionen von PHP kein Problem.

      Also - die Lösung lautet: Dein Log-Eintrag muss am Server geschrieben werden - als Teilaufgabe der Bestellabwicklung. Und dein Problem dabei lautet nun wie? Keine Ahnung von PHP? Kein Zugriff auf den Server?

      Ich würde das gerne mit der von Dir vorgeschlagenen PHP Dateifunktion ausprobieren.

      Zugriff auf den Server habe ich.

      Ahnung von PHP leider keine. Ich möchte jetzt nicht PHP von Grund auf lernen, weil ich es wenig bis garnicht brauche. Diese eine Sache würde ich allerdings gerne testen. Deshalb wollte ich fragen, ob du mir hinsichtlich der PHP Dateifunktion helfen könntest? Das wäre sehr nett.

      Ach nochwas: Der Server erzeugt ja die "Danke für Ihre Bestellung" Seite. Diese Seite enthält ja auch die Bestellnummer. Warum kann ich diese Bestellnummer denn dann eigentlich nicht Client seitig (z.B. per HTML oder Javascript) loggen? Warum muss ich für dieses Loggen Server seitig (z.B. mit PHP) arbeiten?

      1. Hallo

        Hallo Rolf,

        Wenn's denn unbedingt sein muss, kann das Programm, dass Schritt 3 durchführt, auch noch eine Zeile mit der Bestellnummer an eine Log-Datei anhängen. Das ist mit den Dateifunktionen von PHP kein Problem.

        Also - die Lösung lautet: Dein Log-Eintrag muss am Server geschrieben werden - als Teilaufgabe der Bestellabwicklung. Und dein Problem dabei lautet nun wie? Keine Ahnung von PHP? Kein Zugriff auf den Server?

        Ich würde das gerne mit der von Dir vorgeschlagenen PHP Dateifunktion ausprobieren.

        Zugriff auf den Server habe ich.

        Ahnung von PHP leider keine. Ich möchte jetzt nicht PHP von Grund auf lernen, weil ich es wenig bis garnicht brauche. Diese eine Sache würde ich allerdings gerne testen. Deshalb wollte ich fragen, ob du mir hinsichtlich der PHP Dateifunktion helfen könntest? Das wäre sehr nett.

        Ach nochwas: Der Server erzeugt ja die "Danke für Ihre Bestellung" Seite. Diese Seite enthält ja auch die Bestellnummer. Warum kann ich diese Bestellnummer denn dann eigentlich nicht Client seitig (z.B. per HTML oder Javascript) loggen?

        Was heißt für dich „clientseitig [1] loggen“? Wohin willst du es am/im Client loggen? Wozu willst du es am/im Client loggen?

        Warum muss ich für dieses Loggen Server seitig (z.B. mit PHP) arbeiten?

        Die Bestellung wird auf dem Webshop ausgelöst. Der Webshop läuft auf einem Webserver und der Webshop (bzw. sein Backend) muss alle relevanten Daten verwalten. Dazu gehört auch die Bestellnummer, die eine für jede Bestellung eindeutige ID sein muss, also nicht mehrfach vergeben werden darf. Welche Bestellnummern bereits vergeben sind, weiß der Client/Browser nicht. Woher auch? Das kann und darf nur auf dem Server verwaltet werden und dort steht dir z.B. PHP (kann aber auch eine Menge anderer Sprachen sein) zur Verfügung.

        Wie meine oben gestellten Fragen vermuten lassen, weiß ich nicht so recht, was dein konkretes Anliegen ist. Kannst du bitte die gewünschte Anwendung des Loggens auf dem Client noch einmal konkreter beschreiben?

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett

        1. ja, das ist ein Wort ↩︎

        1. Was heißt für dich „clientseitig 1 loggen“? Wohin willst du es am/im Client loggen? Wozu willst du es am/im Client loggen?

          Clientseitig loggen heißt für mich, dass nicht eine serverseitige Sprache z.B. PHP die Bestellnummer in die Logdatei schreibt, sondern eine clientseitige Sprache z.B. Java-Script oder html. Die Bestellnummer steht ja in der serverseitig erstellen Danke Seite, die dem Client ausgeliefert wurde. Clientseitig möchte ich mir mit Hilfe von html oder Javascript, diese Bestellnummer auslesen und in eine Logdatei schreiben oder irgendwie anders loggen z.B. in eine E-Mail, die per Javascript versandt wird, packen.

          Kann ich mit html und/oder Javascript, eine Bestellnummer die im Quellcode der von PHP erstellen Seite vorhanden ist, in eine Logdatei schreiben oder dieser per E-Mail verschicken?

          Wohin geloggt wird ist mir egal, dass kann der Server sein, dass kann der lokale Rechner sein, dass kann eine E-Mail sein.

          Die Bestellung wird auf dem Webshop ausgelöst. Der Webshop läuft auf einem Webserver und der Webshop (bzw. sein Backend) muss alle relevanten Daten verwalten. Dazu gehört auch die Bestellnummer, die eine für jede Bestellung eindeutige ID sein muss, also nicht mehrfach vergeben werden darf. Welche Bestellnummern bereits vergeben sind, weiß der Client/Browser nicht. Woher auch? Das kann und darf nur auf dem Server verwaltet werden und dort steht dir z.B. PHP (kann aber auch eine Menge anderer Sprachen sein) zur Verfügung.

          Naja, der Server liefert ja die fertige html Seite aus, in der dann auch die Bestellnummer steht, damit kennt der Client die Bestellnummer doch.

          1. Hallo

            Was heißt für dich „clientseitig 1 loggen“? Wohin willst du es am/im Client loggen? Wozu willst du es am/im Client loggen?

            Clientseitig loggen heißt für mich, dass nicht eine serverseitige Sprache z.B. PHP die Bestellnummer in die Logdatei schreibt, sondern eine clientseitige Sprache z.B. Java-Script oder html. Die Bestellnummer steht ja in der serverseitig erstellen Danke Seite, die dem Client ausgeliefert wurde. Clientseitig möchte ich mir mit Hilfe von html oder Javascript, diese Bestellnummer auslesen und in eine Logdatei schreiben oder irgendwie anders loggen z.B. in eine E-Mail, die per Javascript versandt wird, packen.

            Wenn du das so willst, ist das fachlich etwas anderes, als du – zumindest nach meiner Interpretation – anfangs beschriebst.

            Als erstes: Mit HTML kann man nichts auslesen. Dazu ist die Sprache nicht da, denn HTML ist keine Programmiersprache. Allerdings erzeugst du auf dem Server mit PHP typischerweise ja ein HTML-Dokument, auf dessen Elemente wiederum im Browser mit JavaScript zugegriffen werden kann, so JS dort zur Verfügung steht (typischerweise ist das der Fall).

            Voraussetzung dafür ist, dass bei der Erstellung der HTML-Ausgabe mit PHP die Bestellnummer in ein für Javascript identifizierbares HTML-Element verpackt wird. Mit einem JS-Skript kannst du dann das DOM des HTML-Dokuments nach dem betreffenden HTML-Element durchsuchen und dessen Inhalt auslesen. Soweit kommst du also.

            Aber eine Log-Datei kannst du so im Dateisystem des Benutzers nicht schreiben. Das darf JavaScript nicht. Ist ein E-Mail-Programm installiert, kannst du es aus dem HTML-Dokument zwar über einen Link aufrufen, aber du kannst es nicht per JavaScript starten. Das darf JavaScript nicht.

            Was ginge, wäre per JavaScript diesen Link zu erzeugen. Ihn anklicken muss der Benutzer dann aber allein. Zuverlässig geht anders.


            Grundsätzlich stellt sich mir aber immernoch die Frage nach dem Warum. Wenn ich in irgendeinem Webshop eine Bestellung getätigt habe, war es bisher immer so, dass ich eine Bestellbestätigung per E-Mail und zumeist auch per Bestätigungsseite bekommen habe. Auf jedem dieser Wege wurde ich auch über die Bestellnummer informiert. Mir fällt partout kein Grund ein, warum jemand bei mir ein Log über die Bestellung anlegen oder eine E-Mail erzeugen wollen sollte.

            Was soll mit der Information in der Log-Datei erreicht werden? Warum wird, wenn ich denn ein E-Mail-Programm installiert habe, eine E-Mail mit der Bestellnummer erzeugt und wohin soll ich die überhaupt senden?

            Tschö, Auge

            --
            Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
            Toller Dampf voraus von Terry Pratchett
            1. Grundsätzlich stellt sich mir aber immernoch die Frage nach dem Warum. Wenn ich in irgendeinem Webshop eine Bestellung getätigt habe, war es bisher immer so, dass ich eine Bestellbestätigung per E-Mail und zumeist auch per Bestätigungsseite bekommen habe. Auf jedem dieser Wege wurde ich auch über die Bestellnummer informiert. Mir fällt partout kein Grund ein, warum jemand bei mir ein Log über die Bestellung anlegen oder eine E-Mail erzeugen wollen sollte.

              Was soll mit der Information in der Log-Datei erreicht werden? Warum wird, wenn ich denn ein E-Mail-Programm installiert habe, eine E-Mail mit der Bestellnummer erzeugt und wohin soll ich die überhaupt senden?

              Primär handelt es sich um eine rein theoretische Frage um besser nachvollziehen zu können, was mit Javascript, html und PHP möglich bzw. nicht möglich ist. Hier hast du mir eine sehr gute Erklärung geliefert. Meine Fragen sind bestens beantwortet, vielen Dank.

              Sekundär sehe ich schon einen praktischen Nuzten:Nehmen wir an man erhält im Zeitraum X 100 Bestellungen im Shop. Nehmen wir des weiteren an, dass der Shop alle 100 Bestellungen korrekt aufzeichnet. Das heißt aber noch lange nicht, das als 100 Kunden die bestellt haben auch IMMER korrekt auf die Bestellbestätigungsseite weitergeleitet werden. Wenn es bei der Weiterleitung auf die Bestellbestätigungsseite einen temporären Fehler gibt werden vielleicht nur 80 der 100 Kunen auf die Bestellbestätiungsseite weitergeleitet. Die restlichen 20 werden aufgrund des temporären Fehlers nicht auf die Bestellbestätigungsseite weitergeleitet, die Bestellung ist aber trozdem serverseitig im Shop aufgelaufen (dies wird nur clientseitig NICHT IMMER korrekt durch das Erreichen der Danke-Seite bestätigt). Das bedeutet die 20 Kunden bekommen zwar Ihre Ware geliefert, bekommen dies allerdings nicht per "Danke für Ihre Bestellung Seite" bestätigt. Diese Kunden sind demnach unsicher ob die Ware zugeschickt wird oder nicht. Durch oben angesprochene Logdatei, die per Javascript auf der Danke-Seite generiert werden würde (was ja laut Dir leider nicht möglich ist), wüßte ich ob die Danke-Seite bei allen 100 Bestellungen erreicht wurde oder bei weniger z.B. nur bei 80. Gibt es vielleicht eine einfachere, bessere Lösung um herauszufinden, ob die Danke-Seite immer erreicht wird?

              1. Hallo Andreas,

                Wenn es bei der Weiterleitung auf die Bestellbestätigungsseite einen temporären Fehler gibt werden vielleicht nur 80 der 100 Kunen auf die Bestellbestätiungsseite weitergeleitet. Die restlichen 20 werden aufgrund des temporären Fehlers nicht auf die Bestellbestätigungsseite weitergeleitet, die Bestellung ist aber trozdem serverseitig im Shop aufgelaufen (dies wird nur clientseitig NICHT IMMER korrekt durch das Erreichen der Danke-Seite bestätigt). Das bedeutet die 20 Kunden bekommen zwar Ihre Ware geliefert, bekommen dies allerdings nicht per "Danke für Ihre Bestellung Seite" bestätigt.

                Ist diese „Danke“-Seite denn überhaupt eine sinnvolle/zulässige Bestellbestätigung? Die meisten Shops werden ja nicht ohne Grund eine Bestellung per (elektronischer) Post bestätigen.

                Durch oben angesprochene Logdatei, die per Javascript auf der Danke-Seite generiert werden würde (was ja laut Dir leider nicht möglich ist), wüßte ich ob die Danke-Seite bei allen 100 Bestellungen erreicht wurde oder bei weniger z.B. nur bei 80.

                Wenn die Logdatei clientseitig generiert würde, bekämst du das serverseitig u.U. gar nicht mit. Oder stell dir vor, jemand benutzt den privaten Modus seines Browsers, dann existierte die Datei nach dem Beenden gar nicht mehr.

                Gibt es vielleicht eine einfachere, bessere Lösung um herauszufinden, ob die Danke-Seite immer erreicht wird?

                Neben der Email – was ich für zweckmäßiger halte – kannst du eine Ressource (z.B. ein Bild) in der „Danke“-Seite referenzieren und serverseitig prüfen, ob das Bild abgerufen worden ist.

                Viele Grüße
                Robert

                1. Hallo Robert,

                  Neben der Email – was ich für zweckmäßiger halte – kannst du eine Ressource (z.B. ein Bild) in der „Danke“-Seite referenzieren und serverseitig prüfen, ob das Bild abgerufen worden ist.

                  Yup - das ist die bessere Idee. <img src="example.org/shop/reconfirm.php?id=nnnnnnn">

                  nnnnnnn ist die Bestellnummer, reconfirm.php registriert den Abruf und sendet die Bilddatei. Per CSS sorgt man dafür, dass das Bild nur ein Pixel ist und außerhalb des Bildschirms steht.

                  Dafür muss man allerdings insoweit in den Shop eingreifen, dass dieses Bild in die Danke-Seite mit der gewünschten URL eingesetzt wird. Es sei denn, man kann beim Abruf des Bildes die Bestellnummer anhand des Session-Cookie rekonstruieren.

                  Ohne PHP Kenntnisse wird das allerdings schwierig.

                  Rolf

                  --
                  sumpsi - posui - clusi
              2. Hallo Andreas,

                ok, DANN hilft es nicht, serverseitig zu loggen. Oft genug erzeugt der Server die Seite und fängt an, sie zu übertragen, ohne dass der Empfänger sie bekommt (kein Netz mehr, Browser abgeraucht, was auch immer).

                Wenn Du sichergehen willst, dass die Danke-Seite vom Brauser angezeigt wird, musst Du dort ein JavaScript unterbringen, dass per AJAX oder Fetch-API einen "bin angekommen" Request zum Server schickt. Dieser Request sollte die Bestellnummer enthalten, und den kann der Server dann loggen.

                Idealerweise würde man das in der JTL-Datenbank vermerken, als "Bestätigung erhalten" Flag in der Bestellungen-Tabelle. Wenn Du die JTL-Tabelle nicht ändern willst, auch hilfsweise in einer Zusatztabelle mit einer Spalte für die Bestellnummer, in die Du einfach die Bestellnummer hineinschreibst.

                Dann kann man es auch per SQL abfragen und Reports ziehen. Eine Logdatei, wie von Dir angedacht, ist eine Behelfslösung, die den von Dir beabsichtigten Zweck im Produktivbetrieb viel zu mühsam erreicht.

                100% sicher ist das aber auch nicht. Wer JavaScript abgeschaltet hat, sendet Dir damit keine Bestätigung. 100% sicher geht nicht im Web.

                Rolf

                --
                sumpsi - posui - clusi
              3. Hallo

                Grundsätzlich stellt sich mir aber immernoch die Frage nach dem Warum. Wenn ich in irgendeinem Webshop eine Bestellung getätigt habe, war es bisher immer so, dass ich eine Bestellbestätigung per E-Mail und zumeist auch per Bestätigungsseite bekommen habe. Auf jedem dieser Wege wurde ich auch über die Bestellnummer informiert. Mir fällt partout kein Grund ein, warum jemand bei mir ein Log über die Bestellung anlegen oder eine E-Mail erzeugen wollen sollte.

                Was soll mit der Information in der Log-Datei erreicht werden? Warum wird, wenn ich denn ein E-Mail-Programm installiert habe, eine E-Mail mit der Bestellnummer erzeugt und wohin soll ich die überhaupt senden?

                Primär handelt es sich um eine rein theoretische Frage um besser nachvollziehen zu können, was mit Javascript, html und PHP möglich bzw. nicht möglich ist. Hier hast du mir eine sehr gute Erklärung geliefert. Meine Fragen sind bestens beantwortet, vielen Dank.

                Schön. 😀


                Sekundär sehe ich schon einen praktischen Nuzten:Nehmen wir an man erhält im Zeitraum X 100 Bestellungen im Shop. Nehmen wir des weiteren an, dass der Shop alle 100 Bestellungen korrekt aufzeichnet. Das heißt aber noch lange nicht, das als 100 Kunden die bestellt haben auch IMMER korrekt auf die Bestellbestätigungsseite weitergeleitet werden. Wenn es bei der Weiterleitung auf die Bestellbestätigungsseite einen temporären Fehler gibt werden vielleicht nur 80 der 100 Kunen auf die Bestellbestätiungsseite weitergeleitet.

                Wenn das so ist, gibt es einen riesigen Fehler im serverseitgen System. Wenn es ein oder zweimal bei 10000 Bestellungen vorkommt, dass die Weiterleitung auf die Bestellbestätigungsseite nicht funktioniert, würde ich von gelegentlichen Hickups des Servers ausgehen, zumal die Bestellung im System existiert und es zusätzlich noch die Bestätigung per E-Mail gibt. Bei 20% nichterfolgter Weiterleitungen ist irgendwo ein übergroßer Wurm drin.

                An der Stelle gälte es aber, den Fehler zu beseitigen und nicht, irgendwelche unzuverlässigen Umgehungen des Problems zusammenzustöpseln.

                Durch oben angesprochene Logdatei, die per Javascript auf der Danke-Seite generiert werden würde (was ja laut Dir leider nicht möglich ist), wüßte ich ob die Danke-Seite bei allen 100 Bestellungen erreicht wurde oder bei weniger z.B. nur bei 80.

                Jetzt stellt sich die Aufgabe wieder anders dar. Du willst auf dem Server ein Log darüber führen, ob die Bestätigungsseite angezeigt wurde? Verstehe ich das richtig?

                Gibt es vielleicht eine einfachere, bessere Lösung um herauszufinden, ob die Danke-Seite immer erreicht wird?

                Wenn das die Bestellung verarbeitende Skript zum schluss auf die Bestätigungsseite weiterleitet, kann in der Datenbank beim Datensatz für die Bestellung ein Flag gesetzt werden, das bestätigt, dass die Weiterleitung aufgerufen wurde. Dazu braucht es Zugriff auf den Code (vermutlich PHP?), um diese Anweisung einzubauen und Zugriff auf die Datenbankstruktur, um ein passendes Feld in der passenden Tabelle zu erzeugen. Damit kann unmittelbar vor der Weiterleitung geloggt werden, dass diese Weiterleitung unmittelbar danach ausgelöst wurde. Ob die Siete zum Browser gesendet wurde und im Browser angezeigt wurde, weißt du so allerdings nicht.

                Wenn Zugriff auf die Bestätigungseite besteht und dort serverseitig Programmcode ausgeführt werden kann, kann dort der Code untergebracht werden, mit dem der gerade erfolgende Aufruf geloggt werden kann. Ob die Seite im browser angezeigt wird, weißt du immer noch nicht. Wenn die Seite nicht angezeigt werden sollte, ist es aber beim bestätigt erfolgten Aufruf wesentlich wahscheinlicher, dass der browser geschlossen oder die Netzwerkverbindung unterbrochen wurde, als dass ein serverseitiges Problem aufgetreten wäre.

                Schlussendlich kann nach dem laden der Seite im Browser mit JavaScript ein Skript ausgeführt werden, dass z.B. mit Ajax [1] einen Request an ein auf dem Server liegendes (PHP?)-Skript sendet, mit dem wiederum der nun bestätigt erfolgte Aufruf der Bestätigungsseite im Browser in der Datenbank vermerkt wird. Der eine oder andere Benutzer ohne JS wird so allerdigns nicht geloggt werden könne. Das halte ich aber nicht für ein relevantes Problem.

                Es gibt also mehrere Wege, an die Aufgabe heranzugehen, bzw. Teilaufgaben zu erledigen. Zudem ist der Wert der Info bei jedem Weg verschieden und unterschiedlich zuverlässig. Das ist dann Sache der Interpretation der Daten. Eventuell will man ja erst einmal nur wissen, ob es überhaupt zuverlässig zur serverseitigen Weiterleitung kommt.

                Für den Nutzer des Shops sollte es aber immer noch die Bestätigungs-E-Mail als alternativen Weg der Information geben. Von daher würde ich den ganzen Komplex eher als theoretisches Problem betrachten. Dass die Beseitigung der Ursache für fehlgeschlagene Aufrufe die zu erledigende Aufgabe ist, hatte ich ja oben schon angemerkt.

                Tschö, Auge

                --
                Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
                Toller Dampf voraus von Terry Pratchett

                1. Es gibt da auch eine modernere Methode, über die Browserunsterstützung kann ich allerdings nichts sagen. Die IEs fehlen wohl noch? Kann wer anders mehr sagen? ↩︎

                1. Hallo Auge,

                  Es gibt da auch eine modernere Methode, über die Browserunsterstützung kann ich allerdings nichts sagen. Die IEs fehlen wohl noch? Kann wer anders mehr sagen?

                  Ja

                  Rolf

                  --
                  sumpsi - posui - clusi
            2. Hallo,

              Aber eine Log-Datei kannst du so im Dateisystem des Benutzers nicht schreiben. Das darf JavaScript nicht.

              so ganz stimmt das nicht:

              https://github.com/eligrey/FileSaver.js/

              https://dev.w3.org/2009/dap/file-system/file-writer.html

              https://forum.selfhtml.org/self/2014/jan/1/in-datei-schreiben-ohne-server/1598205#m1598205

              Gruß
              Jürgen

              1. Hallo,

                dann habe ich ja jetzt folgende Optionen um zu prüfen ob die Danke-Seite immer erreicht wird:

                1. Clientseitig in eine Datei schreiben (Auge sagt zwar das geht nicht, Jürgen B hingegen sagt das es eben doch geht)

                2. Clientseitiges senden einer E-Mail (laut Auge nicht möglich, da ich per Javascript zwar die E-Mail Anwendung öffnen kann aber eben nicht automatisch E-Mails verschicken kann, vielleicht gibt es ja hier auch einen Trick, ähnlich wie mit der Datei in Punkt 1)

                3. Ein Bild in der Danke-Seite integrieren und serverseitig prüfen, ob das Bild abgerufen worden ist.

                4. Javascript in Danke Seite unterbringen, dass per AJAX oder Fetch-API einen „bin angekommen“ Request zum Server schickt. Dieser Request sollte die Bestellnummer enthalten, und den kann der Server dann loggen.

                Leider hört sich alles ziemlich kompliziert an. Was denkt Ihr wäre für mich am ehesten zu empfehlen bzw. am einfachsten? Bitte berücksichtigen, dass ich keine Programmierkenntnisse habe.

                1. Hallo,

                  Leider hört sich alles ziemlich kompliziert an.

                  das ist genau der Punkt. Du machst es dir viel zu kompliziert. Warum willst du auf dem Server ein Script erstellen und in die Seite einbauen, das auf dem Clienten etwas abfragt, was der Server schon weiß.

                  Stell dir mal vor, du schickst einem Freund eine Email, und bittest ihn darin, dir eine Kopie der Email zurück zu senden.

                  Und zum Speichern auf dem Clienten: das geht, wenn auch nicht in allen Browsern gleich unkomfortabel, aber du wirst als Server- oder Shopbetreiber nie erfahren, ob auf dem Clienten wirklich etwas gespeichert wurde, und wenn ja, was.

                  Gruß
                  Jürgen

                2. Hallo

                  dann habe ich ja jetzt folgende Optionen um zu prüfen ob die Danke-Seite immer erreicht wird:

                  1. Clientseitig in eine Datei schreiben (Auge sagt zwar das geht nicht, Jürgen B hingegen sagt das es eben doch geht)

                  Es geht unter bestimmten Voraussetzungen, aber es ist nach wie vor nicht das, was du willst. Was nützt dir als Betreiber eines Webshops, dass auf dem Rechner des Nutzers eine Datei liegt, auf die du keinen Zugriff hast?

                  1. Clientseitiges senden einer E-Mail (laut Auge nicht möglich, da ich per Javascript zwar die E-Mail Anwendung öffnen kann aber eben nicht automatisch E-Mails verschicken kann, vielleicht gibt es ja hier auch einen Trick, ähnlich wie mit der Datei in Punkt 1)

                  Nein, ich sagte, dass du per JavaScript kein Programm, also auch kein E-Mail-Programm, öffnen kannst. Du könntest im HTML-Dokument einen Link erzeugen, entweder per PHP auf dem Server vor dem ausliefern des Dokuments, oder im Browser mit JavaScript im empfangenen Dokument, aber den müsste der Benutzer des Browsers selbst betätigen. Warum sollte er das tun?

                  1. Ein Bild in der Danke-Seite integrieren und serverseitig prüfen, ob das Bild abgerufen worden ist.

                  Das ist die einfachste Lösung.

                  1. Javascript in Danke Seite unterbringen, dass per AJAX oder Fetch-API einen „bin angekommen“ Request zum Server schickt. Dieser Request sollte die Bestellnummer enthalten, und den kann der Server dann loggen.

                  Leider hört sich alles ziemlich kompliziert an. Was denkt Ihr wäre für mich am ehesten zu empfehlen bzw. am einfachsten? Bitte berücksichtigen, dass ich keine Programmierkenntnisse habe.

                  Wenn man nicht das zugrundeliegende Problem lösen will, ist, bei bestehendem Zugriff auf die Serverlogs, das Bild die einfachste Lösung. Ein Stück Programm ist da natürlich auch dabei, schließlich muss die Bestellnummer irgendwie an die URL des Bildes angehängt werden.

                  Davon abgesehen sollte es, wie hier von mehreren mehrfach angesprochen, die Bestellbestätigung per E-Mail geben. Das Problem ist, in diesem Lichte betrachtet, nicht existent.

                  Tschö, Auge

                  --
                  Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
                  Toller Dampf voraus von Terry Pratchett
                  1. Davon abgesehen sollte es, wie hier von mehreren mehrfach angesprochen, die Bestellbestätigung per E-Mail geben. Das Problem ist, in diesem Lichte betrachtet, nicht existent.

                    Da hast du schon recht, trotzdem möchte ich gerne herausfinden, ob die Danke-Seite nun immer oder eben nicht immer aufgerufen wird. Aus reinem Interesse.

                    Ein Bild in der Danke-Seite integrieren und serverseitig prüfen, ob das Bild abgerufen worden ist.

                    Das ist die einfachste Lösung.

                    Dann werde ich es mit dieser Lösung probieren.

                    Rolf B hat ja schon folgendes vorgegeben:

                    Yup - das ist die bessere Idee. <img src="example.org/shop/reconfirm.php?id=nnnnnnn">

                    nnnnnnn ist die Bestellnummer, reconfirm.php registriert den Abruf und sendet die Bilddatei.

                    Wie genau würde denn der Code von reconfirm.php aussehen?

                    Per CSS sorgt man dafür, dass das Bild nur ein Pixel ist und außerhalb des Bildschirms steht.

                    Warum so kompliziert? Kann man nicht einfach ein Bild erstellen in dem steht "Vielen Danke für Ihre Bestellung", dann muss man das Bild nicht per CSS aus dem Bildschrim rausschieben. Das "Danke für Ihre Bestellung" Bild darf ja ruhig sichtbar sein und muss nicht ausgeblendet werden.

                    Dafür muss man allerdings insoweit in den Shop eingreifen, dass dieses Bild in die Danke-Seite mit der gewünschten URL eingesetzt wird.

                    Hier verstehe ich nicht was du meinst, das Einsetzten wird doch mit der Zeile

                    <img src="example.org/shop/reconfirm.php?id=nnnnnnn">
                    

                    gemacht? Ist da noch was zu tun?

                    Es sei denn, man kann beim Abruf des Bildes die Bestellnummer anhand des Session-Cookie rekonstruieren.

                    ???

                3. Moin Andreas,

                  Was denkt Ihr wäre für mich am ehesten zu empfehlen bzw. am einfachsten? Bitte berücksichtigen, dass ich keine Programmierkenntnisse habe.

                  Am ehesten ist es zu empfehlen, beide Sätze miteinander zu verbinden und die Quintessenz daraus zu berücksichtigen.

                  Viele Grüße
                  Robert

      2. Hallo Andreas,

        die Frage ist nicht die Hilfe bei den Dateifunktionen. Das ist simpel. Die Frage ist, wie dein Shop aussieht und ob Du es schaffst, die Stelle im Shop-Script zu finden, wo Du Dich einhängen musst.

        Bitte erzähle etwas über die Architektur deines Shops. Was läuft wo, wer hat die Shopsoftware erstellt (bzw. wer stellt sie zur Verfügung) - davon hängt nun etliches ab. Frage ist auch, wo Du Die Logdatei ablegen möchtest; das muss im PHP drinstehen und ggf. willst Du die Ablage nicht an einer absoluten Position (/home/web/test/shop/flummi/protokoll), sondern "in dem Log-Unterverzeichnis meines Web" - dann muss man diesen Bezug programmieren.

        (Kleines absurdes Beispiel, warum präzise Definitionen des Auftrags wichtig sind: Du fragst einen Mechaniker, wie Du an deinem Fahrzeug am besten einen Spiegel festmachst. Wenn Der Mechaniker nichts über dein Fahrzeug und deine Vorlieben weiß, gibt er Dir vielleicht Tipps für einen Rückspiegel an einem Omnibus, aber eigentlich wolltest Du ja an dein Skateboard einen Zeitungshalter montieren, um diese rote Zeitschrift beim Fahren lesen zu können...)

        Rolf

        --
        sumpsi - posui - clusi
        1. die Frage ist nicht die Hilfe bei den Dateifunktionen. Das ist simpel.

          Kannst du mir trotzdem sagen, wo ich das finde bzw. ein Beispiel geben, was du konkret meinst? Für mich ist das alles andere als simpel.

          Die Frage ist, wie dein Shop aussieht und ob Du es schaffst, die Stelle im Shop-Script zu finden, wo Du Dich einhängen musst.

          Es ist ein JTL4-Shop. Wo ich mich einhänge ist doch leicht, einfach eine PHP Funktion, die in die Datei schreibt, in den Quellcode der Danke-Seite packen. Oder meinst du etwas anderes?

          Bitte erzähle etwas über die Architektur deines Shops. Was läuft wo, wer hat die Shopsoftware erstellt (bzw. wer stellt sie zur Verfügung) - davon hängt nun etliches ab.

          Ein JTL4 Testshop ohne irgendwelche Anpassungen. Nur aus Neugierde in der Basisversion aufgespielt.

          Frage ist auch, wo Du Die Logdatei ablegen möchtest; das muss im PHP drinstehen und ggf. willst Du die Ablage nicht an einer absoluten Position (/home/web/test/shop/flummi/protokoll), sondern "in dem Log-Unterverzeichnis meines Web" - dann muss man diesen Bezug programmieren.

          Die kann auf einem lokalen Rechner oder auf dem Server (Pfad ist wurscht, am besten im root Verzeichnis) gespeichert werden, dass ist mir egal.

          1. Hallo Andreas,

            Es ist ein JTL4-Shop. Wo ich mich einhänge ist doch leicht, einfach eine PHP Funktion, die in die Datei schreibt, in den Quellcode der Danke-Seite packen. Oder meinst du etwas anderes?

            Das meinte ich durchaus - aber wenn Du Dich außerstande siehst, den Dateizugriff selbst zu programmieren (was sich in php.net fix finden lässt - siehe fopen, fprintf & Co), wie kommst Du dann auf das dünne Brett, in einer komplexen Software wie JTL4 die Stelle finden zu wollen, wo Du Dich einhängen musst, ohne JTL dabei zu shreddern? Bei diesem Job kann zumindest ich Dir nicht helfen.

            Kannst du mir trotzdem sagen, wo ich das finde bzw. ein Beispiel geben, was du konkret meinst? Für mich ist das alles andere als simpel.

            Der Code, den Du brauchst, sieht prinzipiell so aus (ich setze zwei Variablen als Quelle - da wirst Du sehen müssen, was Du aus JTL herausholen kannst). Ich habe die Funktion so gebaut, dass sie dem zu loggenden Text einen Timestamp voranstellt.

            function writeToLog($text)
            {
               $log = fopen("log.file", "a");
               if ($log !== FALSE) {
                  fwrite($log, date("d.m.Y H:i:s") . " - $text\n");
                  fclose($log);
               }
            }
            

            fopen("log.file", "a") öffnet die Log-Datei im aktuellen Verzeichnis. Keine Ahnung welches das ist, vermutlich das Hauptverzeichnis des Web, in dem JTL läuft. Das wirst Du an einen anderen Pfad anpassen müssen. Wenn es was zum Testen ist, leg dir irgendwo eins an und gib den absoluten Pfad dahin im fopen an. Eventuell musst noch dem Webserver-Prozess Schreibrecht auf dieses Verzeichnis einräumen (frag mich nicht, was Du da tun musst, ich kenne deinen Server nicht, ich weiß auch nicht welchen Webserver du hast und ob der als root läuft oder unter irgendeinem technischen User).

            Rolf

            --
            sumpsi - posui - clusi
            1. Das meinte ich durchaus - aber wenn Du Dich außerstande siehst, den Dateizugriff selbst zu programmieren (was sich in php.net fix finden lässt - siehe fopen, fprintf & Co), wie kommst Du dann auf das dünne Brett, in einer komplexen Software wie JTL4 die Stelle finden zu wollen, wo Du Dich einhängen musst, ohne JTL dabei zu shreddern? Bei diesem Job kann zumindest ich Dir nicht helfen.

              Das hast du schon recht :-).

              Der Code, den Du brauchst, sieht prinzipiell so aus (ich setze zwei Variablen als Quelle - da wirst Du sehen müssen, was Du aus JTL herausholen kannst). Ich habe die Funktion so gebaut, dass sie dem zu loggenden Text einen Timestamp voranstellt.

              function writeToLog($text)
              {
                 $log = fopen("log.file", "a");
                 if ($log !== FALSE) {
                    fwrite($log, date("d.m.Y H:i:s") . " - $text\n");
                    fclose($log);
                 }
              }
              

              Ich erkläre es mal in eigenen Worten bevor ich es teste:

              • Erst muss ich mir irgendwie die Bestellnummer auslesen und in $text schreiben. z.B. so:
              $text = <aktuelle Bestellnummer aus JTL4-Shop auslesen>;
              
              • Dann rufe ich Deine Funktion mit der aktuellen Bestellnummer auf z.B. so:
              
              writeToLog($text);
              
              • Deine Funktion schreibt die aktuelle Bestellnummer inklusive Zeitstempel in die Datei log.file, die vermutlich im root Verzeichnis der JTL4 Shop Installation liegt.

              Stimmt das so?

              fopen("log.file", "a") öffnet die Log-Datei im aktuellen Verzeichnis. Keine Ahnung welches das ist, vermutlich das Hauptverzeichnis des Web, in dem JTL läuft. Das wirst Du an einen anderen Pfad anpassen müssen.

              Warum muss ich den Pfad anpassen? Das Hauptverzeichnis passt doch?

              Eventuell musst noch dem Webserver-Prozess Schreibrecht auf dieses Verzeichnis einräumen (frag mich nicht, was Du da tun musst, ich kenne deinen Server nicht, ich weiß auch nicht welchen Webserver du hast und ob der als root läuft oder unter irgendeinem technischen User).

              Das sind gerade bömische Dörfer :-(.

              Wie vergibt man Schreibrecht auf einem Webserver?

              • Per htaccess-Datei?
              • Im Backend des Webservers?
              • Per Änderung der Verzeichnisrechte per ftp?
              • Irgendwie anders?

              Es handelt sich um einen Apache Web-Server.

              Was ist denn der Unterschied zwischen root und User bzw. warum ist das wichtig zu wissen?

              1. Hallo Andreas,

                im Moment tendiere ich dazu, Dir zu empfehlen, einen Programmierer kommen zu lassen, der das für Dich erledigt. Über's Forum wird es nämlich langsam uferlos. Du hast über deine Kenntnisse jetzt mitgeteilt:

                • keine Programmierkenntnisse (versteh ich das richtig - in gar keiner Sprache?)
                • geringe Kenntnisse über Server-Administration (immerhin weißt Du was htaccess ist...)
                • und vermutlich hast Du keinen Server, der 100% Dir gehört, sondern ein gehostetes Web

                Dazu kommt, dass wir hier in einem Zweig der Diskussion sind, die eigentlich fruchtlos ist, weil Du damit nicht an Dein Ziel gelangst. Du brauchst einen separaten Web-Request, der von der Danke-Seite ausgelöst wird. Dafür brauchst Du eine ganz eigene PHP Seite, die den Log-Eintrag schreibt, und in der JTL-Dankeseite musst Du ein <img> einbauen, das eine passende URL abruft.

                Aber ich erzähle trotzdem mal was. Dabei muss ich allerdings einräumen, dass ich ein Windows-Programmierer bin, also jemand, über den richtige Programmierer nur spotten können (die haben alle Linux). Deswegen weiß ich nicht, wie der Apache auf einem Linux-Gerät gestartet wird. Ich habe aber schon ein paar Webs für meinen Arbeitgeber mit aufgebaut (mit IIS unter Windows) und orientiere mich an den best practices, die mir dabei vorgegeben werden. Unter Windows ist es so, dass man dem Webserver nicht die Rechte des Systemadministrators („root“ in Linux) erteilt, sondern dass man ihn unter einem speziellen technischen Benutzer startet, der gerade die nötigsten Rechte hat. Dadurch werden potenzielle Risiken minimiert, falls jemand ein Sicherheitsloch findet und damit den Serverprozess kapert. Der Apache wird das unter Linux ähnlich halten. Alles andere wäre fahrlässig.

                Zugriffsrechte bei Webservern sind mehrschichtig. Die oberste Schicht ist das, was im Apache festgelegt wird (also in .htaccess und vielleicht noch anderen Dateien). Damit begrenzt der Apache Zugriffe auf Dateien und Verzeichnisse. Die nächte Schicht liegt in Berechtigungsprüfungen der Anwendung, basierend auf dem angemeldeten Benutzer. Die dritte Schicht ist das Dateisystem des Servers, auf dem Apache läuft. Rechte im Dateisystem sind unter Windows auf Benutzer bezogen - ob man sie unter Linux auch für Programme einräumen kann, weiß ich nicht.

                Irgendwo muss man verhindern, dass böse Requests dein Web schreddern oder die Kontrolle über den Server übernehmen. Das auf der untersten Schicht - im Dateisystem - zu tun, macht meistens etwas Aufwand, ist aber eigentlich unverzichtbar. Ein Ordner, der per WebRequest erreichbar ist, sollte für den Apache im Dateisystem komplett schreibgeschützt sein (heißt: Wenn beschreibbare Temp-Ordner gebraucht werden, müssen die per htaccess vor direkten Webzugriffen geschützt sein). Es gibt Graubereiche, wenn User Dateien hochladen können die nachher per Web erreichbar sein können, aber das haben wir hier nicht.

                Nun zum Begriff „root“ - bevor wir uns da missverstehen. „root“ hat drei Bedeutungen. (1) der Linux-Systemuser mit den höchsten Rechten, (2) der Ordner "/" im Dateisystem des Servers (Filesystem-Root), (3) der Ordner auf dem Server, den ich erreiche, wenn ich http://www.example.org aufrufe (Web-Root).

                Der „root“ User darf alles, und deshalb ist es fahrlässig, den Apache als root zu starten. Wenn Du Webspace gemietet hast, hast Du darauf gar keinen Einfluss. Der Hoster definiert, in welchem Ordner deine Dateien liegen, und wird dafür sorgen, dass der Apache nirgendwo anders hin zugreifen kann, wenn er für Dich arbeitet.

                Ein Filesystem-Root gibt's nur einmal, und da gehören nur Ordner hin und vielleicht ein paar Dateien, die das Betriebssystem da unbedingt haben will. Ein Apache hat da oben GAR nichts verloren. Dafür sorgt der Hoster (siehe oben).

                Ein Web-Root gibt es pro definierter Web-Anwendung. Eine einfache gehostete Umgebung bietet Dir genau eine Web-Anwendung (die Adresse deiner Homepage halt). Dein Hoster stellt für jeden Kunden eine Web-Anwendung bereit, jeder hat sein eigenes Web-Root. Dort solltest Du aber keine Log-Dateien ablegen. Dein Hoster verbietet es dem Apache vielleicht nicht, aber für Logs machst Du besser einen Unterordner, auf den Du per .htaccess den Zugriff über http verbieten kannst.

                Wie kommst Du nun zu diesem Verzeichnis hin? Die PHP Doku ist etwas schwammig, was das "aktuelle Verzeichnis" bei Ausführung eines PHP Scripts angeht. Eigentlich sollte das aktuelle Verzeichnis das sein, in dem das Einstiegs-Script für den aktuelle Request steht. Wenn also dein Web-Root für http://www.example.org auf dem Server der Ordner /web/andreas ist, dann startet http://www.example.org/danke.php das PHP-Script /web/andreas/danke.php und das aktuelle Verzeichnis ist /web/andreas. Wenn DIESES Script nun die Datei "log/bestellungen" öffnen will, öffnet es /web/andreas/log/bestellungen. Das ist der einfache Fall.

                Sollte danke.php aber in einem Unterverzeichnis liegen (z.B. in JTL), dann ist die URL http://www.example.org/JTL/danke.php und das aktuelle Verzeichnis ist /web/andreas/JTL. Um jetzt auf den gleichen Log-Ordner wie eben zuzugreifen, müsste man ../log/bestellungen öffnen. D.h. du codierst deine Dateisystemstruktur in deine Programme, und das tut man nicht. Weil man dann nicht mal eben seine Installation umstrukturieren.

                Hier hilft in PHP den Eintrag DOCUMENT_ROOT des $_SERVER Superglobal. Man könnte deine Funktion also so erweitern:

                function writeToLog($text)
                {
                   $path = implode(DIRECTORY_SEPARATOR, [$_SERVER["DOCUMENT_ROOT"], "log", "bestellungen"]);
                   $log = fopen($path, "a");
                   if ($log !== FALSE) {
                      fwrite($log, date("d.m.Y H:i:s") . " - $text\n");
                      fclose($log);
                   }
                }
                

                Die implode-Funktion setzt einen String aus Teilen zusammen und fügt dazwischen ein Trennzeichen ein.

                Rolf

                --
                sumpsi - posui - clusi
  3. Tach!

    Mit HTML oder Javascript geht so etwas vermutlich nicht, weil diese beiden Sprachen ja keinen Zugriff auf das Dateisystem haben?

    Hast du den Shop generell nur mit HTML und Javascript erstellt? Javascript läuft clientseitig und ist damit manipulierbar. Wenn ich als Kunde den Preis ändere, du das nicht mitbekommst und eine Auftragsbestätigung mit dem geänderten Preis schickst, ist das verbindlich. Es sei denn, du kannst den Betrugsversuch nachweisen. Man kann das ja so clever machen, dass es wie ein Kommafehler deinerseits aussieht. Aber selbst wenn man damit nicht durchkommt, und du vielleicht keinen finanzeiellen Verlust hast, hast du aber Zeit investiert, um die Angelegenheit zu klären.

    dedlfix.

    1. Hello,

      Es sei denn, du kannst den Betrugsversuch nachweisen.

      Das ist kein Betrugsversuch, sondern das Angebot oder "Gegenangebot".

      Ein Shop mit allgemein gültigen Preisen ist immer erst nur ein "Invitatio ad Offerendum". Die Anfrage des Client an den Anbieter stellt dann das Angebot dar. Geht dieser durch Annahme darauf ein, kommt der Vertrag zustande.

      Wenn die Preise also clientseitig geändert werden können, ohne dass der Server das merkt, ist das kein Betrug des Clients, sondern nur Dummheit des Serverbetreibers/Anbieters.

      Es gibt bestimmt noch Shops, die das nicht merken.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Tach!

        Es sei denn, du kannst den Betrugsversuch nachweisen.

        Das ist kein Betrugsversuch, sondern das Angebot oder "Gegenangebot".

        Das sehe ich nicht so, wenn man, wie es wohl sein wird, zum Preisändern die Variableninhalte manipulieren muss. Wenn der Preis stattdessen in einem schreibbaren Inputfeld im Zuge der vorgesehenen Benutzeroberfläche zu ändern geht, dann mag das in der Form zutreffen.

        dedlfix.

        1. Hello,

          Es sei denn, du kannst den Betrugsversuch nachweisen.

          Das ist kein Betrugsversuch, sondern das Angebot oder "Gegenangebot".

          Das sehe ich nicht so, wenn man, wie es wohl sein wird, zum Preisändern die Variableninhalte manipulieren muss. Wenn der Preis stattdessen in einem schreibbaren Inputfeld im Zuge der vorgesehenen Benutzeroberfläche zu ändern geht, dann mag das in der Form zutreffen.

          Wo ist denn formuliert, wie ein Angebot und eine Annahme genau zu erfolgen haben?

          Das würde ich erst einmal den Juristen aufbürden, ob für das Internet plötzlich und unerwartet ("überraschend") andere Regeln gelten sollten, als im Real Life...

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
          1. Tach!

            Wo ist denn formuliert, wie ein Angebot und eine Annahme genau zu erfolgen haben?

            Das würde ich erst einmal den Juristen aufbürden, ob für das Internet plötzlich und unerwartet ("überraschend") andere Regeln gelten sollten, als im Real Life...

            Für mich ist eher unerwartet, wenn der Kunde in einem System, das eine solche Änderung nicht vorsieht, Daten manipuliert. Üblich ist, das Angebot anzunehmen oder nicht. Verhandlungen können zwar geführt werden, dann aber über ein anderes Medium wie Email oder Telefon - unter Beteiligung beider Parteien, nicht einseitig einen Mechanismus ausnutzend, der offensichtlich so nicht vorgesehen war.

            dedlfix.

            1. Hello,

              Für mich ist eher unerwartet, wenn der Kunde in einem System, das eine solche Änderung nicht vorsieht, Daten manipuliert. Üblich ist, das Angebot anzunehmen oder nicht.

              Das Angebot wird hier aber vom Client erstellt.
              Der Anbieter-Server antwortet darauf dann mit einer Annahme.

              Die Zahl, die dort vorher stand, ist ein "Invitatio ad Offerendum" und kein Angebot!

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
              1. Hallo TS,

                der "Client" ist aber nicht vom Anwender erstellt, sondern Teil des Shopsystems (weil der Browser anzeigt, was der Shop gesendet hat).

                Wie ist das denn im Supermarkt? Wenn ich Kiwis kaufe, abwiege und an der Waage den Knopf für "Möhren" drücke (uiui, stimmt jetzt hoffentlich, dass Möhren billiger sind als Kiwis...). Oder anders - ich knibble den Barcode vom Etikett der Erdbeermarmelade und klebe es über den Barcode auf dem Etikett eines Glases Honig. Oder noch anders: Ich knibble das RFID-Etikett von irgendeinem Billig-Fusel und klebe es auf eine Flasche mit Jimkin Bearhuggers bestem Whiskey.

                An der Kasse geht der Beutel bzw. das überklebte Etikett über den Scanner und ich bezahle 1kg Möhren statt 1kg Kiwis. Oder 450g Erdbeerpampe von ja! statt 500g feinstem Blütenhonig. Wenn das Kassenpersonal nicht aufpasst. Mit dem umgeklebten RFID-Tag marschiere ich durch die personallose Kasse, die die RFID Tags im Einkaufswagen scannt. Eine Flasche Bearhugger's zum Preis einer Pulle SaufDichBlind™️

                Ist das jetzt auch eine invitatio ad offerendum, die durch den Kassiervorgang angenommen wird? Oder Etikettenschwindel? Ist Manipulation am offenen Herzen einer HTML-Seite (sprich: herumstochern mit den Entwicklerwerkzeugen des Brausers) etwas anderes?

                Ist der Komplexitätsgrad der erforderlichen Manipulation proportional zur Schwere der Missetat? Nach meinem Dafürhalten ist beides Betrug.

                Rolf

                --
                sumpsi - posui - clusi
    2. Hast du den Shop generell nur mit HTML und Javascript erstellt?

      Es ist ein fertiger JTL4-Shop habe da nichts geändert.

      Javascript läuft clientseitig und ist damit manipulierbar.

      Manipulierbar bedeutet ich kann die Seite NUR auf meinem eigenen Browser manipulieren oder meinst du mit manipulierbar, dass man die Seite auch für die Nutzung auf anderen Browsern manipulieren kann?

      1. Tach!

        Javascript läuft clientseitig und ist damit manipulierbar.

        Manipulierbar bedeutet ich kann die Seite NUR auf meinem eigenen Browser manipulieren oder meinst du mit manipulierbar, dass man die Seite auch für die Nutzung auf anderen Browsern manipulieren kann?

        Jeder Nutzer kann das verändern, was in seinem Browser läuft, und damit alle Daten, die das Javascript während der Verarbeitung zwischenspeichert.

        dedlfix.