Problem mit Login-/Logout-Funktion

Carrear

Erfahrenes Mitglied
Hi Leute, habe folgendes Problem.Ich bastel an einem
Loginscript für meine Seite.

//Erstmal sorry für den langen Post, aber ohne Code
//wird des nichts ^^

Über dem HEad in der index.php starte ich die Session,
unabhängig davon ob man sich einloggt oder nicht.
Dann include ich im Body in einer Menübox, das Login
formular, welches durch eine If Abfrage durch eine
Statusanzeige und einen Logout Link ersetzt wird, sobald
man eingeloggt ist. Diese includete Datei sieht so aus:

Code:
<?
if(@$_SESSION['logged_in'] == "TRUE")
     {
 echo "Willkommen, ".$_SESSION['username']."!<br/><br/>\n";
 echo "<table>";
 echo " <tr>";
 echo "  <td>Du bist seid dem </td>";
 echo "  <td rowspan=\"2\"><img src=\"http://web.icq.com/whitepages/
    online?icq=".$_SESSION['icq']."&img=5\" /></td>";
 echo " </tr>";
 echo " <tr>";
 echo "  <td>".$_SESSION['regdat']." dabei!</td>";
 echo " </tr>";
 echo " <tr>";
 echo "  <td><br/></td>";
 echo " </tr>";
 echo " <tr>";
 echo "  <td>Dein letzter Besuch war am <b>".$_SESSION['last_visit']."</b>.</td>";
 echo " </tr>";
 echo "</table>\n";
 echo "<a href=./index.php?site=logout>Logout</a>";
 }
else
 {
 echo "<form action=\"./index.php?site=login\" method=\"post\">\n";
 echo " <fieldset>\n";
 echo "  <legend><b>Login</b></legend>\n";
 echo "  <table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\n";
 echo "   <tr>\n";
 echo "    <td>Username</td>\n";
 echo "    <td><input type=\"text\" name=\"username\" 
      size=\"9\" maxlength=\"20\" /></td>\n";
 echo "   </tr>\n";
 echo "   <tr>\n";
 echo "    <td>Passwort</td>\n";
 echo "    <td><input type=\"password\" name=\"passwort\" 
      size=\"9\" /></td>\n";
 echo "   </tr>\n";
 echo "   <tr>\n";
 echo "    <td></td>\n";
 echo "    <td><input type=\"submit\" name=\"Send\" 
      value=\"Login\" /></td>\n";
 echo "   </tr>\n";
 echo "  </table>\n";
 echo " </fieldset>\n";
 echo "</form>\n";
 }
?>

Sobald der Loginbutton geklickt wird, wird aufeinen Link
verwiesen (./index.php?site=login) welcher durch die
Parameterübergabe "site=login" im Contentbereich auf folgende
Datei zur Verarbeitung der eingegebenen Daten weiter
leitet:

Code:
<?php
if (isset ($_SESSION['logged_in']) && $_SESSION['logged_in'] == "TRUE")
        {
        die ("Du bist schon eingeloggt");
        }   
if (!isset ($_POST['username']) || !isset($_POST['passwort']))
     {
     die("Bitte geben Sie Ihre Benutzerdaten ein!");
     }
if (isset ($_POST['username']) && isset($_POST['passwort']))
     {
 if(preg_match('/[^\'\"\/]{5,12}/', $_POST['username']) == FALSE)
         {
         $_POST['username'] = "";
         unset ($_POST['username']);
         die("Bitte geben Sie den Benutzernamen ein!");
         }
 elseif(preg_match('/[^\'\"\/]{5,12}/', $_POST['passwort']) == FALSE)
         {
         $_POST['passwort'] = "";
         unset ($_POST['passwort']);
         die("Bitte geben sie ihr Passwort ein!");
         }
 else     
  {
         $sql = "SELECT 
    * 
   FROM 
    users 
   WHERE 
    username = '".$_POST['username']."'
   AND 
    passwort = '".md5($_POST['passwort'])."'";
         $result = mysql_query($sql);
         if (!$result) 
              {
              echo "Anfrage ($sql) konnte nicht ausgeführt werden :".mysql_error();
              exit;
              }
 
  $userdaten = mysql_fetch_assoc($result);
  if($_POST['Send'] && mysql_num_rows($result))
   {
       $_SESSION['logged_in'] = "TRUE";
       $_SESSION['username'] = $userdaten['username'];
       $_SESSION['last_visit'] = $userdaten['last_visit'];
   $_SESSION['icq'] = $userdaten['icq'];
   $_SESSION['regdat'] = $userdaten['regdat'];
       echo "Sie sind eingeloggt!";   
   }
  else
   {
       echo "Ihre Benutzerangaben sind falsch";
   }
  }
 }
?>

Und hier tritt das erste Problem auf. Wenn ich eingeloggt
bin soll die Menübox (erster geposteter Code) sofort zur
Statusanzeig wechseln, momentan ist es aber so, dass man
erst einmal Reloaden muss.
Wenn ich auf den Logout Link klicke wird dann im Content
bereich folgender Code includet:

Code:
<?
if (!isset ($_SESSION['logged_in']))        // loggedin Variable vorhanden?
        {
        $_SESSION['logged_in'] = "";
        die("Sie sind bereits ausgeloggt!");
        }  
if ($_SESSION['logged_in'] != "TRUE")        // Login nicht ok?
        {
        $_SESSION['logged_in'] = "";
        die("Sie sind bereits ausgeloggt!");      // Anzeige: Sie sind ausgeloggt.
        }
echo "Sie haben sich erfolgreich ausgeloggt";
$_SESSION = array();
session_destroy();
?>

Und da ist wieder das gleiche Problem. Die Statusanzeige ist
nach dem ausloggen noch solange da, bis ich Reloade.

Ich weiß echt nicht wie ich es machen soll -___-
Wie kann ich dafür sorgen, dass der Switch zwischen Statusanzeige
und Loginformular ohne ein Reload von mir funktioniert?
Mir haben ein paar Leute gesagt es gibt diese header()
Funktion. Doch leider kann ich die ja nicht in der
Login und Logout.php nutzen, weil ich diese beiden Dateien
im Body include.

PS:Mir fällt jetzt erst auf dass ich in diesem Forum weder Text noch Code umbrechen muss *lol*
 
Nutze bitte mal die PHP-Tags des Boards. Das ist lesefreundlicher :D

Ansonsten kannst du doch nach abarbeiten des Scriptes mittels header-Funktion auf eine beliebige Seite umleiten.

so in etwa:
PHP:
header("Location: index.php?site=start");
exit();
 
Aber wenn ich das nach abarbeiten des Scriptes mache, dann ist das mitten im body, da ist der head doch schon abgeschickt... ich dachte das geht nur wenn der noch nicht durch ist?
 
Wenn auf der Umleitungsseite schon ne Ausgabe ist, dann kannst du entweder mit den Funktionen der Ausgabesteuerung oder mit einem Meta refresh arbeiten
 
Zurück