Witam. Mam mały problem co do ładnego wyświetlania błędów typu niepoprawne hasło itd. Mianowicie nie mam pojęcia jak wygodnie i skutecznie wyświetlić poprzednią stronę z wpisanymi wcześniej danymi i gdzieś pod formularzem komunikat o błędzie. To samo tyczyło by się rejestracji. Uproszczona wersja mojego kodu logowania wygląda tak:
<?
session_start();
if ($_GET['out'] == '1') {
session_unset();
session_destroy();
header('Location: index.php');
}
if ($_POST['wyslane']) {
include 'db.php';
$tabela = 'users';
$login = trim($_POST['login']);
$haslo = trim($_POST['haslo']);
if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
mysql_close($polaczenie);
echo('Wpisz poprawny login');
exit;
}
if ($haslo == '') {
mysql_close($polaczenie);
echo('Wpisz poprawne hasło');
exit;
}
$haslo = md5($haslo);
$wynik=mysql_query("SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo'");
if (mysql_num_rows($wynik) == 1) {
$informacja = mysql_fetch_array($wynik);
$_SESSION["login"] = $informacja["login"];
mysql_close($polaczenie);
header('Location: index.php ');
} else {
mysql_close($polaczenie);
echo('Niepoprawny login lub hasło');
exit;
}
mysql_close($polaczenie);
}
if (!isset($_SESSION['login'])) {
echo('
<form action="login.php" method="post">
<input type="hidden" name="wyslane" value="TRUE" />
<p>Login: <input type="text" name="login" /></p>
<p>Hasło: <input type="password" name="haslo" /></p>
<p><input type="submit" value="zaloguj" /></p>
</form>
');
} else {
echo('<a href="login.php?out=1">Wyloguj (' . $_SESSION['login'] . ')</a>');
}
?>
taki kod jest za pomocą Include(); wstawiony gdzieś po lewej stronie i jak widać gdy tylko coś jest nie tak to pokaże się biały ekran z treścią błędu. Próbowałem zamiast treści błędu zrobić coś takiego:
err.php
$e = $_GET['e'];
if ($e) {
echo('<p class="err"><br>');
}
if ($e == '1') { echo('Proszę podać poprawny login'); }
if ($e == '2') { echo('Proszę podać poprawne hasło'); }
if ($e == '3') { echo('Błędny login lub hasło'); }
if ($e) {
echo('<br><br></p><br>');
}
index.php
<table width=100% cellspacing=0 cellpadding=0 border=0>
<tr>
<td><? include('login.php') ?></td>
<td><? include('err.php') ?> Następnie właściwa treść strony.</td>
</tr>
</table>
login.php
...
if ($haslo == '') {
mysql_close($polaczenie);
header('location: index.php?e=2');
exit;
}
...
Skutkowało to wczytaniem strony głównej z błędem na samej górze. Rozwiązanie to jednak jest mało wygodne i praktyczne na dłuższą metę. Najbardziej zależy mi na tym aby błędy te mogły wyświetlić się na określonej podstronie i w określonym miejscu. Fajnie też było by gdyby wprowadzone dane po wyświetleniu błędu pozostały w formularzu. Proszę was bardzo o pomoc w rozwiązaniu tego problemu. Z góry dziękuję za wszelką pomoc.
P.S. Jeśli chodzi o AJAX to jestem całkowicie zielony.