Username in Session speichern?

Stephan Liebig

Erfahrenes Mitglied
Also ich möchte bei meinem Login auch den Usernamen in der Session speichern, damit ich diesen später im Adminbereich verwenden kann.

Momentan habe ich es so versucht:

PHP:
mysql_select_db($userdatabase,$conn);

$result = mysql_query('SELECT * FROM sva_user WHERE (username ="'.$_POST[username].'") AND (password ="'.$_POST[password].'")', $conn) or die(mysql_error());
$num_results = mysql_numrows($result);

if($num_results == 1) { 
	$logged_in = TRUE;
	session_register ("logged_in",$_POST[username]);

und in der admin.php:
PHP:
<?php 

session_start();

if ((session_is_registered("logged_in"))) {
echo $username;
....

Aber das scheint nicht zu funktionieren. Kann mir jemand weiterhelfen?
 
Kannst du das ganze nicht wie folgt machen?

PHP:
session_start();
//...
$_SESSION["username"]=$_POST["username"];

Gruß
cesupa
 
Also ich habe das jetzt so gemacht:

login_check.php :
PHP:
$result = mysql_query('SELECT * FROM sva_user WHERE (username ="'.$_POST[username].'") AND (password ="'.$_POST[password].'")', $conn) or die(mysql_error());
$num_results = mysql_numrows($result);

if($num_results == 1) { 
	$logged_in = TRUE;
	session_register ("logged_in");
	$_SESSION["username"]=$_POST["username"]; 
	header("Location: admin.php");
	exit;
}
else {
	header("Location: index.php?failed=TRUE");
	exit;
}


Teil meiner admin.php, in dem ich den Usernamen der Session finden benutzen will.
PHP:
   <select name="user" size="1" id="user" onFocus="ShowDirectHelp(this)" onBlur="HideDirectHelp(this)" onChange="this.form.titlechange.value = 1; this.form.submit(); return true;">
                	<?php
					
                    $result = mysql_query("SELECT * FROM sva_user ORDER BY username WHERE username =".$_SESSION["username"]." ");
					$num_user = mysql_num_rows($result);
					for($i=0;$i<$num_user;$i++) {
						$data = mysql_fetch_array($result);
						$name = $data[name];
						$surname = $data[surname];
						$indexfield = $data[indexfield];
						echo '<option value="'.$indexfield.'">'.$name.', '.$surname.' &nbsp;</option>';
					}
					?>
                 </select>
 
Wird in beiden Dateien session_start(); ausgeführt?

btw würde ich
PHP:
if($num_results == 1) { 
	$logged_in = TRUE;
	session_register ("logged_in");
	$_SESSION["username"]=$_POST["username"]; 
	header("Location: admin.php");
	exit;
}

auch so lösen:

PHP:
if($num_results == 1) { 
	$_SESSION["logged_in"] = TRUE;
	$_SESSION["username"] = $_POST["username"]; 
	header("Location: admin.php");
	exit;
}
 
Nur in der admin.php

PHP:
<?php 

session_start();

if ((session_is_registered("logged_in"))) {
	
...

Ja gut aber deine Version ist doch nur eine andere Schreibweise oder ?



Und da funktioniert das ganze nicht - habe aber bisher auch an keiner anderen stelle den usernamen gebraucht. Hier will ich halt nur den Usernamen anzeigen, mit dem sich eingeloggt wurde, wenn du noch eine andere Idee hast, wie ich das machen kann, dann ist das auch sehr gut.
PHP:
<?php
					
                    $result = mysql_query("SELECT * FROM sva_user ORDER BY username WHERE username =".$_SESSION["username"]." ");
					$num_user = mysql_num_rows($result);
					for($i=0;$i<$num_user;$i++) {
						$data = mysql_fetch_array($result);
						$name = $data[name];
						$surname = $data[surname];
						$indexfield = $data[indexfield];
						echo '<option value="'.$indexfield.'">'.$name.', '.$surname.' &nbsp;</option>';
					}
					?>

Habe meine login_check.php mal soweit geändert:

PHP:
<?php

//----------------------------------------------------------
// - admincenter - logincheck
//----------------------------------------------------------

#databse settings
include("./conf/config.inc.php");

#connect to database
$conn = @ mysql_connect("$host","$user","$pass"); 
if (!$conn) 
{ 
die ("Der Verbindungsversuch zur Datenbank ist leider fehlgeschlagen !"); 
}

#select database
mysql_select_db($userdatabase,$conn);

$result = mysql_query('SELECT * FROM sva_user WHERE (username ="'.$_POST[username].'") AND (password ="'.$_POST[password].'")', $conn) or die(mysql_error());
$num_results = mysql_numrows($result);
$data = mysql_fetch_assoc($result);

if($num_results == 1) { 
	$logged_in = TRUE;
	session_register ("logged_in");
	$_SESSION["username"] = $_POST[username];
	session_register("username");
	header("Location: admin.php");
	exit;
}
else {
	header("Location: index.php?failed=TRUE");
	exit;
}

?>
 
Zuletzt bearbeitet:
session_start(); muss immer ausgeführt werden wenn mit Sessions gearbeitet wird.
Also füg einfach mal bei check_login.php gleich am Anfang ein session_start(); ein dann sollte es gehen.

Und ja es ist nur eine andere Schreibweise.
Aber sie ist kürzer und ich finde sie dadurch übersichtlicher :)

PHP:
$_SESSION["username"] = $_POST[username];
session_register("username");
Das ist im übrigen doppelt gemoppelt :)
Mit $_SESSION["foo"] wird die variable automatisch registiert.
 
Kann nicht funktionieren. session_register("username"); <- Blödsinn, vergess das ganz schnell.

PHP:
<?php
session_start();

if (empty($_SESSION['username'])) {
    die ('Sie müssen sich einloggen!<br />');
} else {
    if ($_SESSION['username'] != $row['username']) {
        die ('Sie müssen sich einloggen!<br />');
    } else {
        // Rest der PHP Datei :)
    }
}
?>
 
Zuletzt bearbeitet:
Habe das mit den Sessions jetzt so gemacht:

PHP:
if($num_results == 1) { 
	$logged_in = TRUE;
	session_register ("logged_in");
	$_SESSION["username"] = $_POST[username];
	header("Location: admin.php");
	exit;
}
else {
	header("Location: index.php?failed=TRUE");
	exit;
}

Das funktioniert auch, mein Fehler lag an folgender Stelle:

PHP:
$result = mysql_query("SELECT * FROM sva_user ORDER BY username WHERE username =".$_SESSION["username"]." ");

... und so hätte es schon früher funktioniert:
PHP:
$result = mysql_query('SELECT * FROM sva_user WHERE username ="'.$_SESSION[username].'" ORDER BY username');

Fragt mich nicht wie mir der Fehler passieren konnte....
 
Zurück