Username auslesen und ausgeben

Voltex

Mitglied
Hallo zusammen,
ich steh mal wieder vor einem Rätsel. Ich habe hier ein Login Script, das soweit auch bestens funktiuniert. Man gibt seinen benutzernamen ein, das Script vergleicht den mit dem Benutzer in der Datenbank, wenn alles stimmt wird eingeloggt. Wenn ich den Benutzernamen jetz allerdings ausgeben will, in ungefähr dieser Form:
(Pseudocode)
Eingeloggt als: <?php echo $username; ?>

Funktiuniert garnichts. Kann mir jemand helfen?

Hab mal die Login Funktion hier mit reingesetzt:

PHP:
public function login($username, $password)
	{
		$isLoggedIn = false;
		
		try
		{
			$securityQuery = new MySQLDatabaseQuery();
			$securityQuery->query("SELECT userID, password, isAdmin FROM tbl_user WHERE username = '" . Formatter::maskString($username) . "'");
			
			
			$hashingEngine = new HashingEngine();
			
			if($securityQuery->numRows() > 0)
			{
				while($rows = $securityQuery->fetchRows())
				{
					if($hashingEngine->compare($password, $rows['password']) === true)
					{
						$this->isLoggedIn = true;
						$isLoggedIn = true;
						$this->userID = $rows['userID'];
						$this->username = $rows['username'];
						
						
						if($rows['isAdmin'] == 1)
						{
							$this->isAdmin = true;
						}
					}
				}
			}
		}
 
Zuletzt bearbeitet:
wo ist die Ausgabe? Ist das in der gleichen Klassen? Wenn ja:
PHP:
Eingeloggt als: <?php echo $this->username; ?>

Wenn nein, hast du Zugriff auf die Klasse?
PHP:
Eingeloggt als: <?php echo $referenz->getUsername(); ?>
 
Die Ausgabe befindet sich in einer anderen PHP Datei, welche die Datei mit der klasse aber includiert hat.

Ungefähr so:

SecurityManager.class.php
PHP:
class SecurityManager
{
	(...Ein wenig PHP Code...)

	public function login($username, $password)
	{
		$isLoggedIn = false;
		
		try
		{
			$securityQuery = new MySQLDatabaseQuery();
			$securityQuery->query("SELECT userID, password, isAdmin FROM tbl_user WHERE username = '" . Formatter::maskString($username) . "'");
			
			
			$hashingEngine = new HashingEngine();
			
			if($securityQuery->numRows() > 0)
			{
				while($rows = $securityQuery->fetchRows())
				{
					if($hashingEngine->compare($password, $rows['password']) === true)
					{
						$this->isLoggedIn = true;
						$isLoggedIn = true;
						$this->userID = $rows['userID'];
						$this->username = $rows['username'];
						
						
						if($rows['isAdmin'] == 1)
						{
							$this->isAdmin = true;
						}
					}
				}
			}
		}
(...ein wenig PHP Code...)

Ausgabe(index.php):
PHP:
@include("PFAD/SecurityManager.class.php");

(...Ein wenig PHP Code...)

Eingeloggt als:<?php echo $SecurityManager->getUsername(); ?> <br>

Leider funktiuniert es auf diese Weise nicht. Was hab ich Falsch gemacht?

Nachtrag: Ich bekomme folgende SQL Fehlermeldung:
Fatal error: Call to a member function getUsername() on a non-object in C:\wamp\www\mycom\index.php on line 145
 
Zuletzt bearbeitet:
'Tschuldigung aber du frags grad nach einer Insel und zeigs uns das Wasser drum herum... (komischer Vergleich ^^)

Besserer: Du fragst den Schreiner ob er die Tür reparieren kann und bringst den Spion mit (das Guckloch) :D

Ach was soll's :rolleyes:

Es wäre gut wenn du mal die Klasse (mehr davon) und / oder das Script zeigst in dem das ganze passiert, denn du sagst ja selbst das das einloggen vorerst noch klappt. Da ist die login-Funktion zunächst vielleicht unerheblich.

EDIT zu deinem EDIT: Das Objekt scheint es nicht zu geben. Aber es wird {SecurityManager}->username gesetzt. Probier es damit über das Objekt.
 
Zuletzt bearbeitet:
also die gesamte SecurityManager.class.php sieht so aus:

PHP:
<?php
class SecurityManager
{
	/**
	 * Aktueller loginstatus fuer den Benutzer
	 * 
	 * @var boolean
	 */
	private $isLoggedIn = false;
	
	/**
	 * Status ob der angemeldete Benutzer ein Admin ist.
	 *
	 * @var boolean
	 */
	private $isAdmin = false;
	
	/**
	 * Der Benutzername
	 *
	 * @var string
	 */
	private $username = null;
	
	/**
	 * Die BenutzerID
	 *
	 * @var integer
	 */
	private $userID = -1;
	
	/**
	 * Meldet den Benutzer mit den gegebenen Werten am System an und setzt die Auth-Session.
	 *
	 * @param string $username - der Benutzername
	 * @param string $password - das Kennwort
	 */
	public function login($username, $password)
	{
		$isLoggedIn = false;
		
		try
		{
			$securityQuery = new MySQLDatabaseQuery();
			$securityQuery->query("SELECT userID, password, isAdmin FROM tbl_user WHERE username = '" . Formatter::maskString($username) . "'");
			
			
			$hashingEngine = new HashingEngine();
			
			if($securityQuery->numRows() > 0)
			{
				while($rows = $securityQuery->fetchRows())
				{
					if($hashingEngine->compare($password, $rows['password']) === true)
					{
						$this->isLoggedIn = true;
						$isLoggedIn = true;
						$this->userID = $rows['userID'];
						$this->username = $rows['username'];
						
						
						if($rows['isAdmin'] == 1)
						{
							$this->isAdmin = true;
						}
					}
				}
			}
		}
		catch(Exception $ex)
		{
		
		}
		
		return $isLoggedIn;
	}
	
	/**
	 * Meldet den Benutzer ab.
	 */
	public function logout()
	{
		$this->isAdmin = false;
		$this->isLoggedIn = false;
		$this->username = null;
		$this->userID = -1;
	}
	
	/**
	 * Gibt den aktuellen Status der Anmeldung zurueck.
	 *
	 * @return boolean $isLoggedIn - TRUE wenn der Benutzer angemeldet ist, FALSE ansonsten.
	 */
	public function isLoggedIn()
	{
		return $this->isLoggedIn;
	}
	
	/**
	 * Gibt den Adminstatus zurueck.
	 *
	 * @return boolean $isAdmin - TRUE wenn der Benutzer ein Administrator ist, FALSE sonst.
	 */
	public function isAdmin()
	{
		return $this->isAdmin;
	}
	
	/**
	 * Gibt den Benutzernamen des angemeldeteten Benutzers zurueck.
	 *
	 * @return string $username - Der Benutzername des Users.
	 */
	public function getUsername()
	{
		return $this->username;
	}
	
	/**
	 * Gibt die BenutzerID des angemeldeten Benutzers zurueck.
	 *
	 * @return integer $userID - Die BenutzerID des Users.
	 */
	public function getUserID()
	{
		return $this->userID;
	}
}
?>

in der index.php soll nur die Ausgabe erfolgen
 
Ich weis jetzt nicht genau was du mit "nutzen" meinst

ich muss dazu sagen dass ich noch anfänger in sachen PHP bin^^

also in der Index.php sieht das folgendermaßen aus:

PHP:
 <div id="boxcontent">   	   	
<?php
		if(isset($_SESSION['securityManager']) && $_SESSION['securityManager']->isLoggedIn() === true)
		{
                      		?> 		           
            <!-- intern start --> 						
            Eingeloggt als:<?php HIER SOLL DIE AUSGABE HIN  ?> <br>
            <form action="index.php?page=logout" method="post">
            <input type="submit" name="sender" value="" class="logoutbt" />
            </form>
            <!-- intern end -->		
<?php
        
        
		}
		else 
		{
                      	  	?>	  	           
            <!-- default start -->           
            <form action="index.php?page=login" method="post">   	  	                  	    	             
              <input type="text" name="username" value="username" class="login" onclick="this.value=''" />                   
              <input type="password" name="password" value="password" class="login" onclick="this.value=''" /><br />	    		 	  	                       
              <a href="register.php">Noch nicht registriert?</a> 
              <br>            
              <a href="lostpassword.php">Passwort vergessen?</a> 
              <br>            <br>
              <input type="submit" name="sender" value="" class="loginbt" />	  	           
              <!-- default end -->  	  	
<?php
		}
                        	  	?>   	         
          </div>

Ich hoffe, das war das was du meinst
 
Also du hast eine Klasse. Hier das "Interface" dazu:

PHP:
<?php
class SecurityManager
{
  public function login($username, $password)
  public function logout()
  public function isLoggedIn()
  public function isAdmin()
  public function getUsername()
  public function getUserID()
}
?>

Die sieht man immer durch stumpfes lesen. Auf alle "public" Sachen kann man von außen zugreifen. In deinem Code steht nun:

PHP:
$_SESSION['securityManager']->isLoggedIn()

Also scheint $_SESSION['securityManager'] ein sogenanntes "Objekt" zu der oben genannten Klasse zu sein. Daher konnte dein $SecurityManager vorhin nicht klappen, da es kein Objekt ist, sondern $_SESSION['securityManager'].

Du siehst in der Klasse:
PHP:
private $username = null;

Da kommst aber leider nicht mit $_SESSION['securityManager']->username dran. Warum kannst du ja mal rausfinden ;) bzw die Antwort steht in diesem Beitrag von mir schon ;D

Daher musst du $_SESSION['securityManager']->getUsername() verwenden, da man da von außen dran kommt und in der Funktion wird wieder auf $this->username zugegriffen weil die Funktion es darf ;) man ist ja dann "drinnen" ^^

Stells dir als Haus mit vielen Klingeln vor, du kanns überall klingeln aber nich alle Antworten dir, obwohl sie da sind. Da muss schon mal der Nachbar (getUsername) rüber gehen und (username) fragen. Der kriegt ne Antwort weil die im selben Haus wohnen.

usw ^^ hf
 
Zuletzt bearbeitet:
Wenn ich das richtig verstehe sollte die Ausgabe nun so aussehen?!

PHP:
Eingeloggt als:<?php echo $_SESSION['securityManager']->getUsername(); ?> <br>

Leider tut sich auf diese Art und Weise auch nichts. Also die Ausgabe bleibt leer :confused:
 
Dann mach an der selben Stelle mal:

PHP:
<?PHP var_dump($_SESSION['securityManager']); ?>

Wenn da Object oder sowas steht ist es eigentlich OK.

und dann:
PHP:
<?PHP var_dump($_SESSION['securityManager']->getUsername()); ?>

Wenn da dann string(0) steht oder NULL oder ähnliches das "etwas leeres" anzeigt dann ist der Benutzername halt leer ;) zumindest in der DB.

Wie sich Sessions mit privaten Variablen von Objekten verhält weis ich leider nicht.
 

Neue Beiträge

Zurück