userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Fragen zum Erstellen von Templates für webEdition.
ulfinger
Junior Member
Beiträge: 14
Registriert: Di 29. Mär 2016, 00:14

userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon ulfinger » Sa 5. Jun 2021, 18:04

Hallo

Ich hab in webEdition 9 (aktuell hab ich 9.0.8 installiert) ein Problem gefunden, dass ich bei vorherigen Versionen von WE noch nicht hatte.
Ich habe eine Datenbank für Blogartikel, die von einer Frontendseite aus angelegt und bearbeitet werden können. Auf einer Übersichtsseite sind alle Arikel aufgelistet. Vorhandene Artikel kann ich dann auf einer Seite mit einem Formular und userinput-Feldern bearbeiten. Das klappt soweit ganz gut. Beim Anlegen eines neuen Artikels wird das selbe Formular aufgerufen, aber eben keine Objekt-ID übergeben. Das Formular müsste also leer sein.
Bei den älteren WE-Versionen war das auch so und es war kein Problem, einen neuen Datensatz anzulegen. Seit Version 9 aber waren bei einem neuen Datensatz immer die Inhalte des zuletzt aufgerufenen Datensatzes in den Feldern. Es war zwar kein Problem einen neuen Datensatz anzulegen wenn man diese Inhalte überschrieben hat, aber das sorgte doch für Irritationen.
Ich hab mir dann mal die Sessionvariablen angeschaut und festgestellt, dass die Inhalte der zuletzt aufgerufenen Seite alle in

Code: Alles auswählen

$_SESSION[weS][we_data] 
drinstecken.

Ich hab mir jetzt so geholfen, dass ich am Anfang der Seite eine Abfrage eingebaut habe, ob eine Objekt-ID übergeben wird oder nicht.
Wenn nicht, dann werden die Inhalte aus der Sessionvariable gelöscht und die Formularfelder bleiben leer:

Code: Alles auswählen

<?php 
// Feldinhalte aus anderen Seiten werden gelöscht
if(empty($_REQUEST[we_editObject_ID])){
unset($_SESSION[weS][we_data]);
}
?>
Jetzt meine Frage: ist das ein Bug von webEdition oder hab ich da eine gut gemeinte Funktion übersehen?

Viele rüße
Ulf

NilSole
Senior Member
Beiträge: 303
Registriert: Mi 27. Mär 2019, 15:28

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon NilSole » Sa 5. Jun 2021, 22:03

Mach am besten mal einen Bug dazu auf. Ich vermute aber, dass das auch vor wE9 so war.
https://qa.webedition.org

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1825
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon WBTMagnum » Sa 5. Jun 2021, 23:39

Hallo Ulf,
Hallo Nils,

Ich habe schnell mal in unserer Codebase gesucht, da kommt an mehreren Stelle folgendes Code-Snippet vor:

Code: Alles auswählen

/* Reset the Object Session Data */
unset($_SESSION['we_object_session_edit']);
Ich habe in einem Projekt auch einen Hinweis auf das Verhalt gefunden, dass bei der Anlage eines neuen Objekts die Daten des vorherigen übernommen werden. Dabei war auch ein Verweis auf eine von Dirks Erklärungen dazu: viewtopic.php?p=21935#p21935

Das Verhalten dürfte also nicht neu sein. Ich jetzt vermute mal, dass ...
  1. der oben angeführte Code (oder ein ähnlicher) auch im betroffenen Projekt drinnen ist und das deshalb bislang funktioniert hat und
  2. sich mit wE9 die Bezeichnungen geändert haben und die Daten somit unter "$_SESSION['weS']['we_data']" liegen.
In der Versionshistorie und der Entwicklerinfo habe dazu jetzt allerdings nichts gefunden. Entweder fehlt das dort, ich hab's übersehen oder ich liege mit meiner einfach Vermutung falsch.


Liebe Grüße,
Sascha

mediavantis
Senior Member
Beiträge: 238
Registriert: Do 16. Feb 2012, 12:51

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon mediavantis » Mo 7. Jun 2021, 21:01

Hallo an alle,

dieses Verhalten kann ich bestätigen, gerade dann, wenn es das gleiche Formular ist und die userInputs gleichnamig sind.
Allerdings habe ich eher die Vermutung, dass sich die vorher im selben Formular eingepflegten Daten entweder im Browser-Cache befinden und sie daher wieder auftauchen, oder evtl. in der Session verblieben sind.

Schlüssig nachweisen konnte ich das bisher aber nicht.

ulfinger
Junior Member
Beiträge: 14
Registriert: Di 29. Mär 2016, 00:14

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon ulfinger » Mo 7. Jun 2021, 21:05

Dass die Daten noch im Cache sind hatte ich zuerst auch vermutet. Sie waren aber nach dem Löschen des Cache imme noch da. Ich habe sie ja dann (siehe oben) als Sessionvariable gefunden mit

Code: Alles auswählen

print_r($_SESSION)

NilSole
Senior Member
Beiträge: 303
Registriert: Mi 27. Mär 2019, 15:28

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon NilSole » Mo 7. Jun 2021, 23:11

Ich hatte auch schon mal angefangen einen Text zu schreiben, der war dann leider weg (Session vom Forum ist wohl ausgelaufen...).

Jedenfalls hatte ich in den Code geschaut, die Werte werden während der Verarbeitung mit we:form in der SESSION gespeichert und dann später da wieder rausgeholt.

Dies ist immer dann der Fall, wenn du ein bestehendes Objekt zum Bearbeiten (Frontend) öffnest und dann ohne zu speichern (bzw ohne we:write) ein neues Objekt anlegen willst. we:write löscht diese Sessionvariable bei erfolgreichem Speichern dann auch (Bugreport aus Version 6.x).
Insofern kann ich es nachvollziehen, vermute aber, dass es eben schon früher so war.

Das ist dann aber auch so, dass solche Sachen eben jahrelang im Hintergrund über

Code: Alles auswählen

unset($_SESSION);
o.ä. gelöst werden, anstatt dies als Bug / Featurewunsch zu melden oder im Forum zu diskutieren. Insofern danke für diese Diskussion :wink:

@Sascha danke für deinen Beitrag. Deine Vermutung sollte soweit stimmen. Kann natürlich noch sein, dass es bisher einfach nicht aufgefallen / zur Sprache gekommen ist und das betreffende Snippet nicht vorkam.
Bezüglich Entwicklerinfo können die Entwickler natürlich nicht jede Änderung dokumentieren, sondern immer nur so gut es eben geht.

https://sourceforge.net/p/webedition/s ... c.php#l413 da kannst du in Zeile 248 noch mal die gute Doku in deinem Code validieren. :mrgreen:

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1825
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon WBTMagnum » Di 8. Jun 2021, 11:51

NilSole hat geschrieben: Mo 7. Jun 2021, 23:11Bezüglich Entwicklerinfo können die Entwickler natürlich nicht jede Änderung dokumentieren, sondern immer nur so gut es eben geht.
Schon klar. War auch nicht als Vorwurf gemeint ;-).

Ich habe jetzt nochmals recherchiert und denke, dass der Auslöser in wE9 folgendes sein könnte: "WICHTIG: Das Update setzt voraus, dass vorher die WE-Sessionverwaltung aktiviert wurde. Im Updater erfolgt nun auch ein Hinweis bei der Installation."

Das `weS` kommt von der Trennung Frontend/Backend-Sessions (weS) #6138. Warum die Backend-Session Daten hier jetzt aber im Frontend aufscheinen und die Anzeige beeinflussen ist für mich nicht nachvollziehbar.


Liebe Grüße,
Sascha

mediavantis
Senior Member
Beiträge: 238
Registriert: Do 16. Feb 2012, 12:51

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon mediavantis » Di 27. Jul 2021, 12:43

NilSole hat geschrieben: Mo 7. Jun 2021, 23:11 Dies ist immer dann der Fall, wenn du ein bestehendes Objekt zum Bearbeiten (Frontend) öffnest und dann ohne zu speichern (bzw ohne we:write) ein neues Objekt anlegen willst. we:write löscht diese Sessionvariable bei erfolgreichem Speichern dann auch (Bugreport aus Version 6.x).
Das stimmt so leider nicht, denn nach erfolgtem erfolgreichen schreiben eines Objektes mit we:write steht der eingetragene Text auch dann noch im (in meinem Fall) we:userInput type="textinput", wenn der eingeloggte User zwischendurch andere Seiten aufgerufen hat und zum betreffenden Formular später zurückkehrt.

mediavantis
Senior Member
Beiträge: 238
Registriert: Do 16. Feb 2012, 12:51

Re: userinput - Feldinhalte von anderem Objekt tauchen beim Anlegen eines neuen Objektes auf

Beitragvon mediavantis » Di 27. Jul 2021, 14:37

WBTMagnum hat geschrieben: Sa 5. Jun 2021, 23:39 [*] sich mit wE9 die Bezeichnungen geändert haben und die Daten somit unter "$_SESSION['weS']['we_data']" liegen.
[/list]
Und genau dies ist (zumindest in meinem aktuellen Fall) die Lösung

Code: Alles auswählen

<we:ifNotVarEmpty>
....
<?php
unset($_SESSION['weS']['we_data']);
?>
</we:ifNotVarEmpty>


Zurück zu „webEdition Templates erstellen (we:Tags)“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste