Platzhalter einsetzen
einsiedler
- css
- meinung
- php
1 Rolf B0 einsiedler0 Rolf B
0 einsiedler
0 Emil
Hallo (nochmal) liebe Forumer,
Wie kann man nachträglich in meine index.php
meine Meldung: Sie haben sie erfolgreich ausgeloggt!
per echo str_replace( '{meldung}', implode($_LayoutHtml );
einfügen?
Hintergrund: Ich möchte dieses von meiner logout.php ausführen lassen.
Im logout.php steht folgendes (bekanntes):
<?php
session_start();
session_destroy();
unset($_SESSION['userid']);
//Remove Cookies
setcookie("identifier","",time()-(3600*24*365));
setcookie("securitytoken","",time()-(3600*24*365));
require_once("inc/config.inc.php");
require_once("inc/functions.inc.php");
?>
// HIER soll nun mein PHP script die Meldung ausgeben!!
// <div class="foo">
// Der Logout war erfolgreich. <a href="login.php">Zurück zum Login</a>.
// </div>
// DIREKT und OHNE eine Linkweiterleitung
In meiner login.php Seite steht bereits schon der Platzhalter: {logout}
Ich benötige u.a. dies:
const LAYOUT_HTML_FILE_PATH = './login.php';
const WIDGETS_FOLDER_PATH = './templates/'; // benötige ich warscheinlich gar nichtmal!!!
$_LayoutHtml = file_get_contents( LAYOUT_HTML_FILE_PATH );
$_UserCardsHml = file_get_contents( WIDGETS_FOLDER_PATH . 'section-card.html' ); // benötige ich warscheinlich gar nichtmal!!!
Welche Paar Zeilen bewerkstelligen dies?
Wer hilft mir, sodass ich schnell weitermachen kann?
LG der sonntagliche misanthrop
Hallo einsiedler,
nicht, dass ich wirklich verstehen würde, was Du willst, aber ich rate mal, dass deine logout.php letztlich die login-Seite anzeigen soll, mit dem Hinweis drin "Sie haben sie erfolgreich ausgeloggt!".
Allerdings verstehe ich dies hier nicht:
const LAYOUT_HTML_FILE_PATH = './login.php'; $_LayoutHtml = file_get_contents( LAYOUT_HTML_FILE_PATH );
Wenn login.php eine PHP Datei ist, wird das PHP nicht ausgeführt. Die Datei wird 1:1 eingelesen und PHP-Anweisungen bleiben stehen. Sowas ist extrem verwirrend.
Du solltest einen von zwei Wegen gehen:
Wenn Du die Datei unbedingt login.php nennen willst, dann hol sie mit require oder include herein. PHP-Code darin wird dann ausgeführt, d.h. du kannst zwar immer noch sowas wie {meldung}
erzeugen, musst aber nicht. Du kannst auch vor dem include eine Variable $meldung bestücken und im login.php <?= $meldung ?> schreiben. PHP löst die Variable dann auf.
Output-buffering: Wenn Du die login.php an der Stelle X einlesen willst, aber erst später an der Stelle Y ausgeben kannst, dann kannst Du die Ausgabe, die login.php erzeugt, puffern. Dafür gibt es ob_start()
(output buffering start), das rufst Du vorher auf, und $loginPart = ob_get_clean();
zum Auslesen und Löschen des Puffers. Ein echo $loginPart kannst Du dann nach Lust und Laune ausführen. Und du kannst in $loginPart auch Ersetzungen durchführen, wenn Du noch {blah} Marker drin hast. Wie das geht, erkläre ich gleich.
Wenn Du die login-Vorlage mit file_get_contents einlesen willst, dann nenne sie login.tpl oder so, nicht .php. Damit ist klar, dass darin kein PHP Code ausgeführt wird.
Das Ersetzen von Template-Symbolen geht in einfacher Form mit
$template = file_get_contents(...);
$template = str_replace("{meldung}", $meldung, $template);
Wenn Du mehrere Symbole ersetzen willst, kannst Du die Array-Variante von str_replace verwenden:
$template = str_replace(
[ "{meldung}", "{warnung}", "{titel}" ],
[$meldung, $warnung, $titel ],
$template);
Weiß nicht ob Du's weißt: [1,2,3] ist die Abkürzung für ARRAY(1,2,3).
Rolf
Ja, das weiß ich... lieber Rolf
const TEMPLATES_FOLDER_PATH = './templates/';
$_TemplateCardHml = file_get_contents( TEMPLATES_FOLDER_PATH . 'meldung.html' );
$template = str_replace(
[ "{meldung}", "{warnung}", "{titel}" ],
[$meldung, $warnung, $titel ],
$template);
Bringe es nicht ganz zusammen...
Aber muss man für die eine Zeile <p>Sie haben sie erfolgreich ausgeloggt!</p> ein eigenes template anlegen?
Aber jetzt ist es ja noch nicht in meinem login.php eingefügt.
Oder doch durch das: {logout}
an dieser Stelle wo dies steht?
Das script oben steht letztlich in meiner logout.php
Also:
<?php
session_start();
session_destroy();
unset($_SESSION['userid']);
//Remove Cookies
setcookie("identifier","",time()-(3600*24*365));
setcookie("securitytoken","",time()-(3600*24*365));
require_once("inc/config.inc.php");
require_once("inc/functions.inc.php");
const TEMPLATES_FOLDER_PATH = './templates/';
$_TemplateCardHml = file_get_contents( TEMPLATES_FOLDER_PATH . 'meldung.html' );
$template = str_replace(
[ "{meldung}", "{warnung}", "{titel}" ],
[$meldung, $warnung, $titel ],
$template);
?>
Gruß T.
Hallo Tassilo,
mein [{meldung}, {warnung}, {titel}] war symbolisch und sollte zeigen, wie man - wenn man möchte - mehrere Marker auf einmal ersetzen kann. Das kannst Du nicht 1:1 übernehmen. Wenn Du das getan hast, dann ist
Bringe es nicht ganz zusammen...
die Untertreibung des Sommers 😀
str_replace kann entweder genau einen String durch einen anderen ersetzen, das war das, was ich oben mit der einfachen Form meinte, oder eben auch mehrere auf einmal. Das habe ich der Vollständigkeit halber hinzugefügt. Wenn Du das nicht brauchst, bleib bei der einfachen Form.
Ansonsten bin ich immer noch verwirrt und weiß nicht, was Du eigentlich genau tun willst. Das hatte ich eingangs geschrieben, aber darauf bist Du nicht eingegangen. Statt dessen zeigst Du jetzt Code, der eine andere Datei als zuvor mit file_get_contents einliest. Tut mir leid, damit komme ich nicht klar. Vielleicht ist es zu spät und zu heiß. Jedenfalls habe ich keine Ahnung von der inneren Struktur deiner Anwendung, welche Dateien Du wofür verwendest, welche PHP Scripte Du hast.
Versuchs nochmal. Du hast eine index.php, eine login.php und eine logout.php. Und vermutlich noch mehr, aber das ist hier wohl egal.
Vermutlich kann ich von index nach login kommen, melde mich an und habe dann eine Session, die mir mehr Möglichkeiten auf deiner Seite gibt. Und dann klicke ich logout. Was genau soll ich jetzt zu sehen bekommen? Die Login-Seite? Die Index-Seite im abgemeldeten Zustand plus dem "Sie sind ausgeloggt" Hinweis?
Rolf
Vermutlich kann ich von index nach login kommen, melde mich an und habe dann eine Session, die mir mehr Möglichkeiten auf deiner Seite gibt. Und dann klicke ich logout. Was genau soll ich jetzt zu sehen bekommen? Die Login-Seite? Die Index-Seite im abgemeldeten Zustand plus dem "Sie sind ausgeloggt" Hinweis?
Damit liegst Du nicht ganz falsch, allerdings starte /betrete (ich) sofort die login.php. Ich weiß nicht ob man es so korrekterweise macht. Jedenfalls ist der Rest genau so wie Du es beschrieben hast.
Mit dem KlICK auf den logout Button kommt man surück zur login.php Seite. Und es erscheint über der Login - <form> eben die Meldung: Sie haben sich erfolgreich abgemeldet.
Wie macht man das? Gibt es zwei varianten vom login.php eine zum start die andere auf der man landet wenn man ausloggt. Aber das kann es doch nicht sein oder?
Jedenfalls fände ich es besser wenn man beim logout nachträglich diese zeile einfügt.
Gruß T.
Hi,
Vermutlich kann ich von index nach login kommen, melde mich an und habe dann eine Session, die mir mehr Möglichkeiten auf deiner Seite gibt. Und dann klicke ich logout. Was genau soll ich jetzt zu sehen bekommen? Die Login-Seite? Die Index-Seite im abgemeldeten Zustand plus dem "Sie sind ausgeloggt" Hinweis?
Damit liegst Du nicht ganz falsch, allerdings starte /betrete (ich) sofort die login.php. Ich weiß nicht ob man es so korrekterweise macht. Jedenfalls ist der Rest genau so wie Du es beschrieben hast.
Mit dem KlICK auf den logout Button kommt man surück zur login.php Seite. Und es erscheint über der Login - <form> eben die Meldung: Sie haben sich erfolgreich abgemeldet.
Wie macht man das? Gibt es zwei varianten vom login.php eine zum start die andere auf der man landet wenn man ausloggt. Aber das kann es doch nicht sein oder?
Man macht nicht die ganze Session kaputt, sondern nur den "operativen Teil", also alle Aktionen, die benutzerspezifische Daten enthalte. Den admistrativen Teil behält man. Darin steht z. B. did letzte Aktion und die passende Meldung dazu.
Und überleg dir mal, ob Du nicht alles über einen zentralen Dispatcher (index.php) laufen lassen willst und nicht über atomisierte Einzeldateien.
LG
RoRo
Hallo Tassilo,
zum einen kann man es so machen wie RR vorschlug: Session nur teilweise abwracken und die Meldung darin speichern. Die Login Seite findet sie dann dort.
Eine andere Möglichkeit wäre, Login und Logout zu einer PHP zusammenzufassen und den Logout durch login.php?action=logout auslösen. Je nach Action prüft du die Credentials oder meldest ab.
Es gibt aber auch Argumente für eine zwischengeschaltete Infoseite, die z.B. auf klick oder nach 2s weiterleitet. An- und Abmeldung sind Aktionen, die besondere Bedeutung haben. Da sollte man nicht eben mal so per vor/zurück im Browser drüber weg hüpfen können.
Rolf
Es gibt aber auch Argumente für eine zwischengeschaltete Infoseite, die z.B. auf klick oder nach 2s weiterleitet. An- und Abmeldung sind Aktionen, die besondere Bedeutung haben. Da sollte man nicht eben mal so per vor/zurück im Browser drüber weg hüpfen können.
Hallo Rolf, das gibt mir gerade zu denken, stimmt auch wieder... Bei meinem GMX logout z.B. ist es genauso, klar wird dann auch viel Werbung untergebracht, das sich die Seite mit irgendwelchem Content "füllt". Aber das muss ja gar nicht mal.
Hmmmmmmm...
Ist eigentlich soetwas möglich: header("refresh: 4; url=https://muehlbauer.intern.wald-frieden.net/); (Oder auch ein relativer Pfad der dort stehen kann!)
Zusätzlich als Angebot ein Link "Zurück zum Login" , wenns noch schneller gehen soll. ;o)
Gruß T.
Hallo Tassilo,
ich bin an der Stelle nicht ganz sattelfest.
Aber eins ist klar: Du kannst diesen Header mit der header-FUnktion setzen, oder du kannst in den <head> der Seite ein Meta-Element eintragen:
<meta http-equiv="refresh" content="4; URL=..." />
Die Wirkung ist gleich. In beiden Fällen verwendest Du einen von Netscape erfundenen und nie standardisierten Response-Header, der aber von den meisten Browsern unterstützt wird.
Tatsächlich kenne ich keinen standardisierten und sicher funktionierenden Weg, der den refresh-Header ersetzen könnte.
Eine JavaScript-Alternative gibt's noch, aber JS kann ja auch ausgeschaltet sein. Deinen Link brauchst Du also auf jeden Fall.
<script>
setTimeout(function() { document.location="login.php"; }, 4000);
</script>
Rolf
Lieber Rolf, oder auch jem. anderes, wer zeigt mir Bitte wie das genau mit dem "simplen templating" geht?
Zum Verständnis nochmal: wenn man im "internen Bereich" ist und dort den LOGOUT Button drückt erfolgt mein logout.php also die Paar Zeilen script. Von da aus müßte doch ein redirect ( header("location: login.php"); ) oder so etwas folgen , das dort in der login.php eben die Meldung "Sie haben sich erfolgreich ausgeloggt." an der entsprechenden Stelle {logout} dort erscheinen kann. Also wer Bitte zeigt mir das "einfache templating" mit nur dieser einen Zeile.
Gute n8 der misanthrop
Hallo einsiedler,
Eine Möglichkeit: Du führst zwei Variablen in $_SESSION
, etwa logged_in
und userid
. Beim Logout löschst du die eine zurück.
Dann in der Login:
<?php
session_start();
if (isset($_SESSION['logged_in']) && !isset($_SESSION['userid'])) {?>
<p>Erfolgreich ausgeloggt</p>
<?php session_destroy();
}?>
Keine Garantie
Vollkommen ungetestet
Nutzerverwaltung ist ein schwieriges Terrain. Da muss man sehr aufpassen, dass man sich keine Sicherheitslücken einbaut.
Bis demnächst
Matthias
Hallo (nochmal) liebe Forumer,
Wie kann man nachträglich in meine index.php
meine Meldung: Sie haben sie erfolgreich ausgeloggt!
Hintergrund: Ich möchte dieses von meiner logout.php ausführen lassen.
Dann würde ich das auch auf dieser Seite ausgeben und nicht auf der index.php.
Idee: den Vorgang Login/Logout auf einer Anwendungsseite machen und den Unterschied über einen Schlüsselparameter regeln. MFG
Lieber Emil, wenn ich den Botton LOGOUT in meinem internen Bereich anklicke, dann besteht mein logout.php script nur aus diesen Zeilen.
<?php
session_start();
session_destroy();
unset($_SESSION['userid']);
//Remove Cookies
setcookie("identifier","",time()-(3600*24*365));
setcookie("securitytoken","",time()-(3600*24*365));
require_once("inc/config.inc.php");
require_once("inc/functions.inc.php");
?
// HIER soll nun das PHP die Meldung innerhalb meiner logout.php ausgeben!!
// <div class="foo">
// Der Logout war erfolgreich.
// </div>
// DIREKT und OHNE eine Linkweiterleitung
Aber ich bin mir nun nicht sicher ob man es überhaupt so macht, ihr seid ja die Profis und konstruiert soetwas professionell für eure Aufträge.
LG T.
Hallo Tassilo,
"Profi" heißt: man bekommt für das, was man tut, soviel Geld, dass man davon leben kann. Das heißt nicht, dass alle Profis gleicher Meinung sind.
Der Thread enthält nun mehrere Ansätze, entscheide Dich für einen. Falsch ist keiner.
Rolf
Hallo,
"Profi" heißt: man bekommt für das, was man tut, soviel Geld, dass man davon leben kann. Das heißt nicht, dass alle Profis gleicher Meinung sind.
erstens das, zweitens ist die umgangssprachliche Definition für "Profi" eine andere, nämlich: Jemand, der eine bestimmte Aufgabe sehr gut beherrscht.
Im Idealfall treffen beide Eigenschaften zu; selbstverständlich ist das leider nicht.
Ciao,
Martin
@@Der Martin
zweitens ist die umgangssprachliche Definition für "Profi" eine andere, nämlich: Jemand, der eine bestimmte Aufgabe sehr gut beherrscht.
Und jemand, der weiß, dass das, was er nicht gut beherrscht, irrelevant ist.
Im Idealfall treffen beide Eigenschaften zu; selbstverständlich ist das leider nicht.
LLAP 🖖
Offengestanden habe ich das mit dem Login/Logout u.s.w. von hier https://www.php-einfach.de/experte/php-codebeispiele/loginscript/
Gut finde ich hierbei das sowohl das Passwort als auch der Securitytoken vom "angemeldet bleiben" in der Datenbank als Hashwerte abgespeichert werden.
Wobei sich mir nun die Frage stellt, wielange so ein Securitytoken überhaupt "lebensfähig" sein sollte, das fragte ich ja anderswo!
Nun, auf jeden Fall wenn man in dem Beispiel dort (das ich individuell umbauen möchte) kommt man , wenn man den LOGOUT Button drückt auf eine Unterseite eben mit dieser Meldung, des weiteren ein Link "Zurück zum LOGIN" das man dann anlicken muss.
Doch wenn ich zum Beispiel einen meiner E-Mail Hoster nehme, dann ist es dort fast überall so dass man auf das LOGIN kommt, mit eben dieser Meldung.
Einfacher ist es natürlich mit der Zwischenseite, jetzt kommt es wohl darauf an WAS ICH WILL! Hmmmmmm.....
Gruß T.
Das Passwort muss ja vor der Anmeldung gespeichert sein: Damit Du es beim Login vergleichen kannst. Das Passwort nach einer Anmeldung erneut zu speichern ist unsinnig. Vielmehr muss nur gespeichert werden, ob ein Login erfolgreich war. Empfehlenswert natürlich zu speichern auch wer da angemeldet ist und ggf. welcher Benutzergruppe er angehört. Optional auch der Zeitstempel der Anmeldung. MFG
Ne, wenn ich was mache, tu ich das nur für mich. Aber ich kann Dir ja mal meinen Perlcode+Template zeigen wie ich login/logout als Klasse umgesetzt habe. Sind nur 100 Zeilen. Willste?