Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Smarty

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Smarty

    Mal sehen ob es mir gelingt mein Problem mit PHP / Smarty zu schildern.

    Als Startseite setze ich eine index.php ein, die ein SMARTY Template index.tpl aufruft. Resultat ist ein Formular mit Username, Passwort und Submitbutton, welches via POST die Seite login.php aufruft. Nachfolgend erst mal der Quelltext (nur prinzipielle Darstellung):

    index.php:
    PHP-Code:
    <?
    $smarty = new MySmarty();
    $smarty->assign('login_message',"");  
    $smarty->display("index.tpl");
    ?>
    index.tpl:
    Code:
    <html>
    ...
    <form action="login.php" method="POST">
    { $login_message }
    <input type="text" name="form_username" size="40">
    <input type="password" name="form_password" size="40">
    <input type="submit" name="submit" size="20" value="Einloggen">
    </form>
    ...
    </html>
    Soweit so gut, bis hier klappt alles.

    In der login.php überprüfe ich nun die Userdaten. Bei einer falschen Eingabe möchte ich jetzt wieder das Template index.tpl aufrufen, jetzt aber die Smarty Variable $login_message z.B. mit dem Text "Wrong User or Password" setzen.
    Genau das funktioniert aber nicht. Ich vermute, dass irgendwie die index.tpl noch im Cache hängt und nicht aktualisiert wird, die Fehlermeldung $log_message wird nicht ausgegeben. Wenn ich einfach die index.tpl in index2.tpl kopiere und dann das Script starte, klappts.

    Hat jemand eine Erklärung für dieses Verhalten?

    Hier noch die login.php:
    PHP-Code:
    <?
    ...

    try
         {
             // Check User 
             $userid = $login->check_user($_POST['form_username'], $_POST['form_password']);
             
             if(!$userid) throw new Exception("Username or Password wrong!!");         
             if (!$login->logged_in()) throw new Exception("Please log in first!!");
             
             echo "alles ok";
             
         }
         catch (Exception $e)
         {
             $smarty->assign('login_message', $e->getMessage());
             $smarty->display('index.tpl');
         }
    ...
    ?>
    Thx for help.

  • #2
    Ich habe 3 smarty Verzeichnisse,

    skel_templates
    skel_templates_c
    cache_dir

    im ersten liegen die *.tpl Dtaeien, im 2ten die vorcompilierten.
    Leer mal das skel_templates_c und cache_dir Verzeichnis, dann dürfte die vorcompilierte Version weg sein.

    mit

    $smarty->caching = false;

    verhinderst du, dass dein Template im cache landet.

    Kommentar

    Lädt...
    X