• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

session (mal wieder) zum teil leer, was tun?

Status
Für weitere Antworten geschlossen.

XraYSoLo

Senior HTML'ler
also, vor etwa 'ner woche gabs den post nochmal, nur das wäre grabschändung, den nochmal zu exhumieren.
also:

loginsystem gebastelt, basierend auf sessions. das login-formular sendet die daten an die check_login.php:

PHP:
//check_login.php
<?php
session_start();

/* Config holen */
include('../mysql/config.inc.php');
          
/* Verbindungskennung erstellen */
$conn1 = @mysql_connect($_access_2['db_host'], $_access_2['db_user'], $_access_2['db_pass']) or die(mysql_error());

/* DB selektieren */
$db_select = @mysql_select_db($_access_2['db_name'], $conn1) or die('Erforderiche Datenbank antwortet nicht');
          
/* SQL zum Datenabgleich */          
$sql = "SELECT id_isisql2 FROM user_isisql2 WHERE mail_isisql2 = '" . trim($_POST['mail_isisql2']) . "' AND password_isisql2 = '" . md5(trim($_POST['password_isisql2'])) . "'";

$result = mysql_db_query($_access_2['db_name'], $sql);
              
/* Wenn Datensätze nicht übereinstimmen */
if( mysql_num_rows($result) != 1 )
	{
	echo 'Entweder ist ihr Passwort oder Ihre e-mail-Adresse falsch...<br>';
	echo '<a href="login.html" class="content_link">Zur&uuml;ck zum Login-Formular</a>';              
	exit();
	}
		else
		{
		/* Schlüssel auf "1" setzen, User ist eingeloggt */
		$_SESSION['state_login'] = true;

		/* User-spezifische Daten zur Session hinzufügen */
		$user_int = mysql_fetch_array($result) or die(mysql_error());
		$_SESSION['id_isisql2'] = $user_int[id_isisql2];
        $_SESSION['mail_isisql2'] = $user_int[mail_isisql2];
        $_SESSION['name_isisql2'] = $user_int[name_isisql2];

		/* Weiter zum internen Bereich */
		header( 'Location: drinnen.php' );
		exit();                                            
		}
?>

dort findet ein datenbankabgleich statt. erfolgreich, dann weiterleitung zur internen datei. wenn nicht, fehler ausgeben.
bei erfolg sollen user-spezifische daten aus der db geholt und zur session hinzugefügt werden. das klappt teilweise.

die interne datei ist die drinnen.php:

PHP:
//drinnen.php
<?php
include('login_val.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Drinnen!</title>
</head>

<?php

var_dump($_SESSION);

echo 'Ich bin drin...das is ja einfach...<br>';   

echo '<a href="logout.php" class="content_link">Jetzt aber ausloggen</a>';
?>

<body>
</body>
</html>

<body>
</body>
</html>

mit var_dump lass' ich dann den inhalt der session anzeigen. komischerweise gibt er mir rein numerische werte wie die id des users aus. strings aber nicht.
wieso? ich denk' doch mal, dass die daten ordnungsgemäß in die session eingefügt wurden.
hier das ergebnis von var_dump:

Code:
array(4) { ["state_login"]=>  bool(true) ["id_isisql2"]=>  NULL ["mail_isisql2"]=>  NULL ["name_isisql2"]=>  NULL } Array ( [state_login] => 1 [id_isisql2] => [mail_isisql2] => [name_isisql2] => )

zusätzlich überprüft eine datei login_val.php, ob die session true ist, wenn nicht, wird nicht eingeloggt.

PHP:
<?php
session_start();
if( !$_SESSION['state_login'] )
{
echo 'Entweder ist ihr Passwort oder Ihre e-mail-Adresse falsch...<br>';
echo '<a href="login.html" class="content_link">Zur&uuml;ck zum Login-Formular</a>';  
exit();
}
?>

also, woran liegt es, dass die session nur teilweise ausgelesen wird? will nicht hetzen, aber die frage is' echt wichtig.
thx schonmal

Nils aka XraYSoLo
 
Zuletzt bearbeitet:
1.
PHP:
...SELECT id_isisql2 FROM user_isisql2 WHERE...
Wenn du schon mehr Daten haben willst, solltest du das auch angeben
2.
PHP:
...
$user = mysql_fetch_array($result) or die(mysql_error());
$_SESSION['id_isisql2'] = $user_int[id_isisql2];
...
Wenn du die Daten in $user ablegst solltest du sie auch aus diesem Array holen und nicht aus $user_int
 
so, korrigiert, daran liegts nicht (wausste ich aber).
außerdem noch die query verändert, dass mehr selektiert wird, aber nicht mal dann...

na, wo bleiben hier denn die php-cracks? niklas, prophet, cracki?

Nils aka XraYSoLo
 
Php.net zum Thema mysql_db_query
Anmerkung: Diese Funktion ist seit PHP 4.0.6 veraltet. Verwenden Sie diese Funktion nicht. Stattdessen sollten Sie die Funktionen mysql_select_db() und mysql_query() verwenden.

Es gibt noch viele weitere ungereimtheiten in deinem Code. Hier zum Beispiel:
PHP:
...
$user_int = mysql_fetch_array($result) or die(mysql_error());
$_SESSION['id_isisql2'] = $user_int[id_isisql2];
...
Auf die Elemente eines assoziativen Arrays wird mit Strings zugegriffen und nicht mit Konstanten, also sollte es eher so lauten:
PHP:
...
$user_int = mysql_fetch_array($result) or die(mysql_error());
$_SESSION['id_isisql2'] = $user_int['id_isisql2'];
...
Es gibt sicher noch viele weitere solcher Fehler aber wenn du das alles schon wusstest warum fragst du dann hier ;-).
 
würdest du lesen, was zu mysql_db_query() steht, wüsstest, warum man mysql_query UND mysql_select_db nehmen soll :|
wenn du weiterführende Links zum Theman nich liest, dann seh ich nich ein, warum ich hier antworten posten sollte. Jeder link ist wichtig, sonst würde er nich gepostet werden.
Nurn kleiner Tipp. Überleg dir mal, wie man auf arrays zugreift
PHP:
$_SESSION['id_isisql2'] = $user_int[id_isisql2];
$_SESSION['mail_isisql2'] = $user_int[mail_isisql2];
$_SESSION['name_isisql2'] = $user_int[name_isisql2];
Desweiteren ist für jeden sein Problem wichtig. Es is anderen recht egal, wenn du schreibst (Sinngemäß)
schnell, schnell, is ziemlich wichtig
Greetz

P.S. error_reporting() is ne prima debugging Hilfe! -.-
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben