kostenloser Webspace werbefrei: lima-city


Nachträglich Inhalt an Platzhalter (smarty) in meine login.p

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    einsiedler

    einsiedler hat kostenlosen Webspace.

    Hallo liebe Forumer,

    folgendes Problem, habe ich:

    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?


    (In meiner login.php habe ich einen entspechenden Platzhalter: {logout} )

    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 wohl u.a. dies, ich bin noch total ungeübt und Anfänger:


    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 M.T.

    Beitrag zuletzt geändert: 30.6.2019 21:44:18 von einsiedler
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h***********r

    PHP wird nur vom Server ausgeführt, also bevor der Webbrowser überhaupt die Seite bekommt. Somit kannst du PHP nicht benutzen um den Inhalt nachträglich anzupassen. Dafür könntest du JS benutzen, oder in POST oder GET nen Status übergeben der PHP dazu bewegt den Inhalt so zu setzen.
  4. Autor dieses Themas

    einsiedler

    einsiedler hat kostenlosen Webspace.

    Denke doch:

    in meiner login.php habe ich ein Platzhalter

    Hier ein Ausschnitt meiner login.php:

    <main class="centeredcontainer">
    		<header>
    			<h1 class="heading"><span>ICH</span>DU</h1>
    		</header>
       		
    		<form class"formular" action="login.php" method="post" accept-charset="utf-8">
    			
                            {logout}
    
    
    			<div class="header">
    				<h2>Willkommen.</h2>
    				<h3>Bitte einloggen.</h3>
    			</div>
    			<div>
    				<label for="inputEmail" class="sr-only"></label>
    				<input type="email" name="email" id="inputEmail" class="form-control" placeholder="E-Mail" value="<?php echo $email_value; ?>" required autofocus>
    			</div>
    
    [ ... ]


    Wenn man nun auf diese seite kommt passiert noch nichts, man loggt sich ein, man loggt sich aus...

    In meiner logout.php steht dieses... (ist noch nicht korrekt!!! deshalb frage ich ja hier nach einer KORREKTUR!!!)

    <?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);
    ?>


    Ist noch fehlerhaft, ich weiß...

    Warum sollte DAS nicht gehen?

    Gruß M.T.

    Beitrag zuletzt geändert: 30.6.2019 23:21:09 von einsiedler
  5. h***********r


    Warum sollte DAS nicht gehen?

    Weil PHP so nicht funktioniert.

    Das Formular schiebt dich zu login.php beim absenden rüber und gibt deine Variablen per POST mit. Mehr macht das nicht.
    https://horstexplorer.lima-city.de/test/00010/
    Dein PHP Script ersetzt dann deine {x} gegen den Inhalt von $x in dem String den du in $template übergibst.
    Was übergibst du an $template? Wie gibst du das was in $template ist danach wieder zurück an deine andere Seite?

    Wie ich sagte du könntest dir mit PHP etwas bauen was nen z.Bsp Status code über Post nimmt und daran entscheidet wie der Content auf der Seite aussehen soll. Oder du machst es mit JS und ersetzt die ganzen Elemente; blendest sie ein-aus; etc. [Du könntest auch den PHP Code auf submit warten lassen am Ende des Scripts und dann mit echo ne Ausgabe erstellen, ist aber eher nicht so schön]


    //edit:
    evtl geht es noch anders:
    https://stackoverflow.com/questions/17869964/replacing-string-within-php-file

    Beitrag zuletzt geändert: 1.7.2019 2:46:51 von horstexplorer
  6. horstexplorer schrieb:

    Warum sollte DAS nicht gehen?

    Weil PHP so nicht funktioniert.
    Doch, eigentlich schon. Es handelt sich dabei um ein stark vereinfachtes Template-System.

    einsiedler schrieb:
    Hier ein Ausschnitt meiner login.php:
    <header>
    			<h1 class="heading"><span>ICH</span>DU</h1>
    		</header>   		
    		<form class"formular" action="login.php" method="post" accept-charset="utf-8">			
                            {logout}
                            [...]
    		</form>

    <?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);
    ?>
    Reduzieren wir das mal auf das wesentliche. Ich gehe davon aus, dass - nachdem der Logout von statten ging, die login.php angezeigt wird. In der login.php hast du den Platzhalter
    {logout}
    , welcher mit der Meldung gefüllt werden soll, falls man sich ausgeloggt hat. Nun stehst du vor dem Problem, dass
    $template
    gar nicht definiert ist. Ich gehe mal davon aus, dass darin der Inhalt von... login.php stehen soll? Und in
    $_TemplateCardHml
    soll die Meldung 'Logout war erfolgreich' oder ähnliches stehen? Dann wäre das doch relativ einfach:
    <?php
    const TEMPLATES_FOLDER_PATH = './templates/';
    $_TemplateCardHml = file_get_contents( TEMPLATES_FOLDER_PATH . 'meldung.html' );
    $template = str_replace(
       [ "{meldung}", "{warnung}", "{titel}", "{logout}" ],
       [$meldung, $warnung, $titel, $_TemplateCardHml],
       $template);


    Eine bessere Übung wäre jedoch, das ganze Programm zu strukturieren. Heißt: Programm-Logik von Präsentation und Datenmodell trennen.
  7. Autor dieses Themas

    einsiedler

    einsiedler hat kostenlosen Webspace.

    Das script-Teil kommt in meine logout.php, das sind ohnehin nur ein Paar php Zeilen.
    Dann ist die Variable doch geladen.

    <?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 angewiesen werden die Meldung in meine login.php ausgeben!!
    
    // <div class="foo">
    
    // Der Logout war erfolgreich..
    
    // </div>
    
    // DIREKT und OHNE eine Linkweiterleitung
  8. h***********r

    noxious schrieb:
    Reduzieren wir das mal auf das wesentliche. Ich gehe davon aus, dass - nachdem der Logout von statten ging, die login.php angezeigt wird. In der login.php hast du den Platzhalter
    {logout}
    , welcher mit der Meldung gefüllt werden soll, falls man sich ausgeloggt hat.


    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?


    // DIREKT und OHNE eine Linkweiterleitung

    Liest sich für mich nicht so als sollte log-in/out.php angezeigt werden mit dem veränderten Content von index.php sondern das der veränderte Content zurück zur index.php gelangt. Oder eben wie die Dateien dann genannt werden. Ohne die Rückgabe der Werte wird das aber nix und auch nicht nachträglich ohne die Seite neu zu laden.

    Man könnte schön unsauber das Script auf Submit warten lassen um dann beim erneuten laden der Seite die Ausgabe zu sehen. Würde ein umleiten auf eine andere Seite überflüssig machen:
    https://horstexplorer.lima-city.de/test/00011/
    <!DOCTYPE html>
    <html>
     <form action="#" method="post">
      <?php include "login.php"; ?>	
      <input type="submit" value="Login" name="submit">
     </form>
    </html>

    <?php
    if (isset($_POST['submit'])) {
    	echo "Login erfolgreich";
    }
    ?>

    Allerdings ist das ganze so unflexibel das man wenn man mehrere Formulare auf einer Seite hat damit schöne Probleme bekommen kann.

    Besser bietet sich an die {} Teile "direkt" (lieber nicht wirklich direkt) aus einer POST Variable zu setzen; entweder als leer oder eben das was du über die Variable mit gibst. Irgendwie so in der Richtung:
    <?php
    if (isset($_POST['dlogout'])) {
            $lmsg = $_POST['dlogout'];
            //lmsg inhalt überprüfen
    	echo "<p> $lmsg </p>";
    }else{
            echo "</p>";
    }
    ?>


    Oder man versucht eben das Anzeigen einer Logout Nachricht mit mit einem Template System zu erschlagen. Da gibt der Link aus meine letzten Post ein relativ erklärendes Beispiel. Aber ob das für den Aufwand notwendig ist...

    Beitrag zuletzt geändert: 1.7.2019 15:08:33 von horstexplorer
  9. Autor dieses Themas

    einsiedler

    einsiedler hat kostenlosen Webspace.

    Erläutere mir das bitte mal näher, wie es hiermit gehen soll.

    <?php
    if (isset($_POST['dlogout'])) {
            $lmsg = $_POST['dlogout'];
            //lmsg inhalt überprüfen
        echo "<p> $lmsg </p>";
    }else{
            echo "</p>";
    }
    ?>


    Den ganzen Ablauf:

    Klick: LOGOUT Button ===> logout.php ===> redirect auf login.php ===> Ausgabe der Meldung?



    Beitrag zuletzt geändert: 1.7.2019 20:20:25 von einsiedler
  10. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Die erste Datei in deiner Abfolge, nennen wir sie mal formular.php, enthält ein Formular.
    Im Attribut action steht logout.php, die method ist post.
    Gesendet wird mit dem Knopf der Wert 'dlogout'.

    Nach dem Absenden des Formulars kann in logout.php alsdann $_POST['dlogout'] ausgelesen werden, entsprechend eine dadurch bedingte Abarbeitung erfolgen, bei welcher ebenfalls spezifisch etwas ausgegeben werden kann, ob nun per Vorlage (template) mit suchen und ersetzen oder einfach so per echo.

    Weiterleitung ist unnötig, weil du ja sowieso eine bedingte Ausgabe hast.
    Prinzipiell kannst du bei Bedarf sowieso alles mit einer PHP-Datei unterbringen.
    Anmelden und Abmelden kannst du also in einer Datei realisieren, je nachdem, welche post-Parameter gesendet wurden oder auch nicht.
  11. h***********r

    Ich merke gerade das es nicht möglich ist POST nach einem redirect zu erhalten. Man müsste um das so zu benutzen entweder auf der Seite bleiben oder auf GET für die Rückgabe wechseln. Es bleibt im Prinzip aber das selbe:
    https://horstexplorer.lima-city.de/test/00012/index.php
    <?php
    if (isset($_GET['status'])) {
        switch ($_GET['status']){
              case 1:
                     echo "<p> Angemeldet </p>";
                     break;
              case 2:
                     echo "<p> Abgemeldet </p>";
                     break;
        }
    }else{
            echo "<p> Status </p>";
    }
    ?>

    logout.php
    <?php
    // something
    header("Location: index.php?status=2");
    ?>
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!