• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[PHP] Kundenbegrüßung Gast/Name-Anzeige während des Ausloggens

kuromi

KU ♪ RO ♪ MI ♪ (shy)

Registriert
14 Juli 2013
Beiträge
13.113
Ort
ngb
Komischer Titel, man möge mir verzeihen. :o

Hallo.
Folgendes Problem habe ich:

Ich habe eine Menübar im Header die unter anderem einen Button für Acc-Links enthält. Klickt man den Button öffnet sich ein Menü mit weiteren Buttons [Anmelden], (Hallo Gast. Noch kein Konto bei uns?) [Registrieren], [Mein Konto], [Warenkorb] usw.

Loggt sich ein User ein, werden die Buttons [Anmelden] und [Registrieren] und der Text (Hallo Gast ...) gegen den Text (Hallo 'Vorname') und den Button [Abmelden] getauscht.

Was ich mir dazu jetzt gebastelt habe funktioniert auch schon ganz gut - mit einem kleinen Schönheitsfehler:

[src=php]<?php if ($_SESSION['customer_id'] && CUSTOMER_GREETING == 1)
{
echo href_link(FILENAME_LOGOFF, '', 'SSL');
echo TITLE_LOGOFF;
}
else {
if (STORE_STATUS == '0')
{
echo href_link(FILENAME_LOGIN, '', 'SSL');
echo TITLE_LOGIN;
echo customer_greeting();
echo href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL');
echo TITLE_CREATE_ACCOUNT;
} }
?>[/src]

Meldet sich der User ab, tauchen die Buttons [Anmelden] und [Registrieren] korrekt wieder auf - der Text (Hallo Gast ...) hingegen erscheint als "TEXT_GREETING_GUEST". :confused:

Die Funktion dazu:

[src=php]function customer_greeting() {
138
139 if (isset($_SESSION['customer_id']) && $_SESSION['customer_first_name']) {
140 $greeting_string = sprintf(TEXT_GREETING_PERSONAL, output_string_protected($_SESSION['customer_first_name']), href_link(FILENAME_PRODUCTS_NEW));
141 } else {
142 $greeting_string = sprintf(TEXT_GREETING_GUEST, href_link(FILENAME_LOGIN, '', 'SSL'), href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL'));
143 }
144
145 return $greeting_string;
146 }[/src]

Was muss ich ändern, damit auch während des Abmeldens erkannt wird, dass die Person sich abgemeldet hat und entsprechend der Text richtig umgesetzt wird?
Auf allen anderen Seiten funktioniert das super - nur eben nicht auf der "Sie haben sich erfolgreich abgemeldet"-Seite. Die springt offenbar genau zwischen zwei Zustände - der eine stimmt nicht mehr und der andere stimmt noch nicht. Kann das irgendwie umgangen werden?

Muss dazu wieder erwähnen, hab (immer noch) keine Ahnung von PHP.
Letzter Part steht so in der functions.php und der erste Teil - ja, von mir zusammengeschustert halt. :dozey:

Danke für eure Zeit. :)
 
Zuletzt bearbeitet:

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Eventuell ist das schlicht ein Timingproblem:
Wir das Menue generiert, bevor der Nutzer tatsächlich abgemeldet ist oder nachdem?

Typischer Fehler wäre:
Du generierst zuerst das Menue. Dabei ist die Session (noch) gesetzt, also gibt deine Prüfung customer_greeting() den String aus, der eigentlich nur für angemeldete Nutzer sein sollte. Du solltest dort prüfen, ob die Session (noch) existiert und keine Aktion zum Ausloggen gewählt wurde, sonst gibst du den Text für abgemeldete Kunden aus.
Bei $_SESSION solltest du auch nicht mit isset prüfen, ob diese "gesetzt" sind, prüfe lieber mittels !empty(), ob sie nicht leer sind.

Wobei sich das Verhalten von isset zwischen 5.3 und 5.4 geändert hat.

http://php.net/manual/en/function.isset.php
http://php.net/manual/en/function.empty.php
 

kuromi

KU ♪ RO ♪ MI ♪ (shy)

Registriert
14 Juli 2013
Beiträge
13.113
Ort
ngb
  • Thread Starter Thread Starter
  • #3
Dank für deine Antwort. :)

Eventuell ist das schlicht ein Timingproblem:
Wir das Menue generiert, bevor der Nutzer tatsächlich abgemeldet ist oder nachdem?

Also, ich meine das Menü wird als solches nicht neu geladen - durch das Ausloggen wird lediglich der Content-Bereich geladen und zeigt die Meldung "Sie haben sich erfolgreich ausgeloggt ..." an. der Header bleibt, wie er ist - samt Menü. Lediglich der Buttonaustausch findet statt - beim Text passiert ja scheinbar auch etwas, allerdings scheint der Vorgang auf halber Strecke abzubrechen, also genau zwischen zwei Zuständen zu verharren.

Ich wundere mich einfach, wieso der Austausch der Buttons klappt, beim Text jedoch dieses Problem auftritt.

Ich überlege jetzt das Problem zu umgehen, indem ich für die Nachricht des erfolgreichen Abmeldens den Header einfach ausblende, wie auch bei den Seiten Login, Registrieren und PW vergessen. Damit würde das Problem mit dem Text nicht sichtbar werden.

Wenn es jedoch eine andere Lösung gibt bzgl. des obigen Codes, wäre die mir glaube ich lieber. :)

Typischer Fehler wäre:
Du generierst zuerst das Menue. Dabei ist die Session (noch) gesetzt, also gibt deine Prüfung customer_greeting() den String aus, der eigentlich nur für angemeldete Nutzer sein sollte. Du solltest dort prüfen, ob die Session (noch) existiert und keine Aktion zum Ausloggen gewählt wurde, sonst gibst du den Text für abgemeldete Kunden aus.

Das ist es halt - die Funktion gibt unmittelbar nach dem Ausloggen weder den Text für eingeloggte User aus noch den für Gäste, sondern verhält sich, als gäbe es keinen Text zur Ausgabe.
Heißt - der Text für eingeloggte User wird entfernt (was ja richtig ist, schließlich hat sich der User ja ausgeloggt) aber der Text für nicht eingeloggte User wird nicht angezeigt (was seltsam ist, denn offenbar wurde ja registriert, dass sich ausgeloggt wurde). Da steht dann wortwörtlich nur "TEXT_GREETING_GUEST", als würde da das define aus der language.php fehlen.
Dass dies aber nicht der Fall ist zeigt sich ja, wenn man die logoff-Seite verlässt. Dann wird das "TEXT_GREETING_GUEST" korrekt durch "Hallo Gast ..." ersetzt.
Hoffe ich hab dich richtig verstanden. =O
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
[src=php]if (isset($_SESSION['customer_id']) && $_SESSION['customer_first_name']) {[/src]

Füge hier noch eine Abfrage hinzu, ob die aktuelle Aktion, die durchzuführen ist ungleich dem Logout-Vorgang ist.

Ich weiß nicht, wie du die Vorgänge erkennst, zum Beispiel sowas:

$_REQUEST['action']!='logout'
 

kuromi

KU ♪ RO ♪ MI ♪ (shy)

Registriert
14 Juli 2013
Beiträge
13.113
Ort
ngb
  • Thread Starter Thread Starter
  • #5
Ohje, also ich hab jetzt einiges ausprobiert (auch deinen Vorschlag), aber es scheint nichts zu funktionieren. Entweder der Gast-Text verschwindet komplett oder es erscheint die erwähnte Code-Zeile. Es scheint völlig gleich zu sein, welche Abfrage ich einfüge, es sieht aus, als würde sie immer mit Weiterleitung auf die logoff-Seite gestoppt bzw. keine Relevanz mehr haben.

Da ich bisschen unter Zeitdruck stehe, schieb ich den Teil auf meiner Liste mal etwas nach unten und nehm den Header für die logoff-Seite vorerst raus.
Wenn alles andere fertig ist, versuche ich mich noch mal daran. Das fuchst mich :D

Falls du oder jemand anderes noch eine Idee habt, ich verfolge das hier trotzdem weiter. :)

Danke :)
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Wenn du mir ein wenig mehr Code zugänglich machst, könnte ich mir das genauer anschauen.
Steht deine Arbeit in einem (öffentlichen) Repo? Falls es privat bleiben soll, kannst du auch Daten per PN senden.
Vergiss jedoch nicht sensible Daten aus deinme Code zu entfernen, bevor du ihn irgendwo online stellst.
 

kuromi

KU ♪ RO ♪ MI ♪ (shy)

Registriert
14 Juli 2013
Beiträge
13.113
Ort
ngb
  • Thread Starter Thread Starter
  • #8
Moin :D

Kleine Geschichte: Hab gestern die Antwort von Shodan gelesen und noch überlegt zu schreiben "Die defines sind ja da, auf allen anderen Seiten funktioniert es ja prima", kam aber von ab, weil ich so mit dem Shop beschäftigt war.
Gestern Abend dann, nachdem ich Impressum, AGB etc. eingefügt hatte, stellte ich schockiert fest, dass das oben genannte Problem auch auf diesen Seiten auftrat.
Da fiel mir dann wieder der Kommentar von Shodan ein und ich hab nach Gemeinsamkeiten bei diesen Seiten gesucht.

Und siehe da - das Problem bestand auf allen Seiten, die nicht auf der index basierten - da das aber recht wenige sind, fiel mir das erst nur bei der logoff auf.

Lösung: Hab die greeting defines aus der (irrwtizigerweise index.php genannten) originalen Datei in die global gültige Sprachdatei kopiert. :unknown:

Jetzt läufts. :m

Und ich schäm mich ein bisschen. Fremdes System eben. =/

Danke euch beiden. :D

(@accC stand auch so kurz davor dir ne PN zu schicken :p)
 
Oben