WebSite nach Login / Logout automatisch aktualisieren

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
hotkey
Mitglied
Beiträge: 89
Registriert: 19.11.2002 13:49
Wohnort: Stralsund
Kontaktdaten:

WebSite nach Login / Logout automatisch aktualisieren

Beitrag von hotkey »

Hallo Jungs.

Ich habe folgendes Problem. Der User loggt sich auf meiner Seite ein und anschließend soll das Login Formular verschwinden und durch einen alternativen Text ausgetauscht werden. Ich habe versucht mit einer IF Anweisung den Status der Session abzufragen und entsprechend eins der beiden Code Elemente zu verwenden (Formular oder alternativer Text). Allerdings klappt das ganze nicht ohne das ich den Browser aktualisiere.

Kann mir jemand helfen? Ihr könnt ja mal unter http://194.94.79.5/~hotkey/ reinschauen, vielleicht hilft das ja mehr ;(

PS: Design ist noch nicht vorhanden und bis jetzt läuft nur die Registrierung, der Login (abgesehen von meinem Problem) und der Link "Kontakt".
Benutzeravatar
King Crusty
Mitglied
Beiträge: 209
Registriert: 20.04.2002 11:58
Wohnort: Deggendorf - Altötting
Kontaktdaten:

Beitrag von King Crusty »

Ich denke mit JavaScript und CSS kannst du das machen. Zustand abbfragen und je nach dem visible oder nicht.....mal so als schnelle Idee
hotkey
Mitglied
Beiträge: 89
Registriert: 19.11.2002 13:49
Wohnort: Stralsund
Kontaktdaten:

Beitrag von hotkey »

Ich habe das Problem jetzt ohne irgendwelche Zusatz Skripte gelöst bekommen. Allerdings finde ich diese Variante noch ein wenig schmutzig und der Code sieht auch ziemlich wüst aus.

Code: Alles auswählen

<?php

/* Start der Session. */
session_start();

/* Daten für die Verbindung zur Datenbank. */
require("php/connect.php");

echo "<!-- Start Status (Login) //-->\n";
echo "<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"5\">\n";
echo "<form action=\"$PHP_SELF?goto=home\" method=\"post\" enctype=\"application/x-www-form-urlencoded\">\n";
echo "  <tr>\n";
echo "    <td align=\"left\" valign=\"top\">\n";
echo "      <font class=\"status_topic\">\n";
echo "        Status:\n";            
echo "      </font>\n";
echo "    </td>\n";
echo "  </tr>\n";
			
          /* Prüft, ob eine Session aktiv ist. */
		  if (!isset($_SESSION['username'])) {

            /* Prüft, ob das Formular abgeschickt wurde. */
            if (isset($_POST['login_submit'])) {
          	
          	  /* Funktion für die Fehlermeldung. */
              function error($info) {
                echo "  <tr>\n";
                echo "    <td colspan=\"2\" align=\"left\" valign=\"top\">\n";
                echo "      <font class=\"status_warn\">\n";
		        echo "        $info\n";
		        echo "      </font>\n";
		        echo "    </td>\n";
                echo "  </tr>\n";
              }	

              /* Prüft, ob die Variable einen Wert hat und gibt ggf. eine Fehlermeldung aus. */
              if (!isset($_POST['username']) || ($_POST['username'] == "Username") || ($_POST['username'] == "")) {
                error("Username fehlt.");	
                $error = true;		    
			  } elseif (!isset($_POST['password']) || ($_POST['password'] == "Password") || ($_POST['password'] == "")) {
                error("Passwort fehlt.");			    
                $error = true;
			  } else {
			  	
	            /* Verschlüsselt das Passwort, damit es mit dem in der Datenbank verglichen werden kann. */
                $password = $_POST['password'];
                $password = md5($password);
  
                /* Vergleicht das Passwort mit dem Eintrag in der Datenbank.
                   Gibt eine Fehlermeldung aus, wenn das Ergebniss nicht übereinstimmt. */
                $query = @mysql_query("SELECT * FROM login WHERE username = '".$_POST['username']."'"); 
	            if (!$result = @mysql_fetch_array($query)){
	              error("Falsche Daten.");
	              $error = true;	
	    	    } elseif ($password != $result['password']){
	    		  error("Falsche Daten.");	
	    		  $error = true;
	            } else {
	              $username = $result['username'];
	  	          $email = $result['email'];
	  	          $permission = $result['permission'];
	  	        
	  	          /* Übergibt die Werte der Variablen an die Session.*/ 
  	              session_register('username', 'email', 'permission');
  	              $error = false;
	            }
	      			  
			  }
			  
            }
			    			  
            /* Prüft, ob das Formular abgeschickt wurde  oder eine Fehlermeldung erzeugt wurde.
            Sonst wird das Formular nicht mehr angzeigt und div. Infos werden angezeigt. */   
            if (!isset($_POST['login_submit']) || ($error == true)) {
          	  echo "  <tr>\n";
              echo "    <td align=\"center\" valign=\"top\">\n";
              echo "      <input class=\"status_input\" name=\"username\" type=\"text\" onFocus=\"clearText(this)\" size=\"20\" maxlength=\"40\" value=\"Username\">\n";
              echo "    </td>\n";
              echo "  </tr>\n";
              echo "  <tr>\n";
              echo "    <td  align=\"center\" valign=\"top\">\n";
              echo "      <input class=\"status_input\" name=\"password\" type=\"password\" onFocus=\"clearText(this)\" size=\"20\" maxlength=\"40\" value=\"Password\">\n";
              echo "    </td>\n";
              echo "  </tr>\n";
              echo "  <tr>\n";
              echo "    <td align=\"center\" valign=\"top\">\n";
              echo "      <input class=\"status_input\" name=\"login_submit\" type=\"submit\" value=\"Login\">\n";
              echo "    </td>\n";
              echo "  </tr>\n";
              echo "  <tr>\n";
              echo "    <td align=\"center\" valign=\"top\">\n";
              echo "      <a href=\"?goto=register\" class=\"status_link\">Registrieren?</a>\n";
              echo "    </td>\n";
              echo "  </tr>\n";           
            } else {
              echo "  <tr>\n";
              echo "    <td align=\"left\" valign=\"top\">\n";
              echo "      <p class=\"status_p\">\n";
              echo "        <a href=\"?goto=logout\" class=\"status_link\">Logout</a>\n";
              echo "      </p>\n";
              echo "    </td>\n";
              echo "  </tr>\n";    
            
              if (isset($_SESSION['username']) && $goto == logout) {
 			    session_destroy();
              } 
              
            }
            
		  } else {
		  	
		    echo "  <tr>\n";
            echo "    <td align=\"left\" valign=\"top\">\n";
            echo "      <p class=\"status_p\">\n";
            echo "        <a href=\"?goto=logout\" class=\"status_link\">Logout</a>\n";
            echo "      </p>\n";
            echo "    </td>\n";
            echo "  </tr>\n";    
            
            if (isset($_SESSION['username']) && $goto == logout) {
 			  session_destroy();
            }
              
	      }

echo "</form>\n";		    	
echo "</table>\n";
echo "<!-- End Status (Login) //-->\n\n";
              
echo "<!-- Start Status (Wetter) //-->\n";
echo "<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"5\">\n";
echo "  <tr> \n";
echo "    <td align=\"left\" valign=\"top\">\n";
echo "      <font class=\"status_topic\">\n";
echo "        Wetter:\n";            
echo "      </font>\n";
echo "    </td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td align=\"center\" valign=\"top\">\n";
echo "      <object\n";
echo "        classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n";
echo "        codebase=\"http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0\"\n"; 
echo "        id=deutschland width=\"115\" height=\"130\">\n";
echo "      <param name=\"movie\" value=\"http://wetter.rtl.de/extern/generell/generator/deutschland/wetter_home.swf?id=63918&key=7d7d1a003b11059b9058ca107cac197d\">\n"; 
echo "      <param name=\"menu\" value=\"false\">\n";
echo "      <param name=\"quality\" value=\"high\">\n";
echo "      <param name=\"bgcolor\" value=\"#006699\">\n"; 
echo "      <embed src=\"http://wetter.rtl.de/extern/generell/generator/deutschland/wetter_home.swf?id=63918&key=7d7d1a003b11059b9058ca107cac197d\"\n"; 
echo "        quality=\"high\" menu=\"false\" bgcolor=\"#006699\" width=\"115\" height=\"130\" type=\"application/x-shockwave-flash\"\n"; 
echo "        pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\">\n";
echo "      </embed>\n";
echo "      </object>\n";
echo "    </td>\n";
echo "  </tr>\n";
echo "</table>\n";
echo "<!-- End Status (Wetter) //-->\n\n";

?>
Diese Variante ist deshalb schmutzig, weil das Formular bereits nach der korrekten Eingabe der Login Daten durch den anderen Inhalt ersetzt wird. Erst wenn ein anderer Link gewählt wird, erkennt das Skript die Session als gestartet an und nutzt die letzte else Anweisung. In Umgekehrter Reihenfolge geht das ganze allerdings noch nicht. Wenn der User den Logout Button clickt, erscheint das Login Formular erst wieder nach einem click auf einen anderen Link. Dafür wird der User im Main durch eine Meldung verabschiedet. Ich denke jedoch das Prob ist nicht so wild. Wer loggt sich schon aus und will gleich wieder rein?

Was haltet ihr von meinem wüsten Code?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Anstatt hunderte von echo "..."; anweisungen wäre es doch viel einfacher, wenn du mit ?> den PHP-Block verlässt und danach mit <?php wieder einen neuen beginnst...
hotkey
Mitglied
Beiträge: 89
Registriert: 19.11.2002 13:49
Wohnort: Stralsund
Kontaktdaten:

Beitrag von hotkey »

Das ist richtig, aber ich habe mich an das Echo gewöhnt und es gibt ja auch noch die Funktion Suchen und Ersetzen ;)

Außerdem habe ich das ganze noch ein wenig übersichtlicher gestaltet. Ich habe in der index.php den Status der Session über eine entsprechende IF Anweisung abgefragt und abhängig vom Ergebniss die zuständige Datei included. Dadurch wirkt das ganze wieder etwas schlanker und übersichtlicher.

Das Wetter habe ich auch noch in eine extra Datei gesteckt und über die index.php included. Alles in allem sollte ich mir vielleicht erst ein Konzept machen und dann wie ein irrer programmieren ;)

PS: Ich bin doch noch ein Newbie. Ist mein erstes PHP Projekt das ich übers Wochenende zusammengebastelt habe.
Antworten

Zurück zu „Coding & Technik“