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:
index.tpl:
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:
Thx for help.
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");
?>
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>
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');
}
...
?>
Kommentar