Sessions
kai
- php
Hallo
Ich habe ein Problem in php. Ich hole user_id, benutzername und level aus einer Tabelle und speichere diese in Sessions:
session_register('username');
session_register ("level");
session_register ("user_id");
Nun möchte ich auf einer anderen Seite ein query auf die tabelle machen und sagen where user_id dieser registrierten Session entspricht. Ich habe es mit
"SELECT passwort FROM user WHERE user_id='".$user_id."'";
aber dies funktioniert nicht. Wie kann ich mit dem Inhalt dieser Session arbeiten?
Hallo!
"SELECT passwort FROM user WHERE user_id='".$user_id."'";
aber dies funktioniert nicht. Wie kann ich mit dem Inhalt dieser Session arbeiten?
Es gibt das globale Array $_SESSION. In deinem Fall: $_SESSION['user_id']
Die kannst eine Session Variable auch direkt mit
$_SESSION['meinevariable']="asdf"
anlegen. Diese wird dann automatisch registriert.
Nachzulesen in der Dokumentation von session_register().
mfg
frafu
funktioniert immer noch nicht..
Ich mache ein SELECT und speichere die ausgewählten SELECTS in Sessions
$user_id = $zeileholen['user_id']
$_SESSION['user_id'] = $user_id
und auf der nächsten Seite möchte ich nochmals ein select machen:
SELECT * FROM tbl WHERE user_id = diese Session
wie kann ich diese session nun aber in den SQL Befehl nehmen?
Hallo!
funktioniert immer noch nicht..
hast du die session auch gestartet mit session_start()?
mfg
frafu
Ja habe ich.
In verify.php habe ich folgenden code:
session_start();
include('var.inc.php');
$conn = @ mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname,$conn);
$query = "SELECT user_id, passwort, level FROM user WHERE benutzername = '".$username."'";
$result = mysql_query($query,$conn);
$zeileholen = mysql_fetch_array($result,MYSQL_ASSOC);
mysql_close($conn);
$level = $zeileholen["level"];
session_register('username');
session_register ("level");
$_SESSION['user_id'] = $zeileholen["user_id"];
header ("Location:admin.php");
Das funktioniert soweit. Ich kann mich einloggen. Nun habe ich eine andere php Datei und mache dort folgendes:
<?
session_start();
require 'session_check.php';
include 'var.inc.php';
mysql_connect($dbserver,$dbuser,$dbpass) or die("Keine Verbindung zum Datenbankserver");
mysql_select_db($dbname) or die("Datenbank nicht gefunden");
$sql="SELECT passwort FROM user WHERE user_ID = '".$_SESSION['user_id']."'";
$query1 = mysql_query($sql);
$row=mysql_fetch_array($query1);
$pwdb = $row[0];
//Vergleich der Passwörter
if(md5($pwalt) != $pwdb) {
echo "Das alte Passwort stimmt nicht";
}
und eigentlich sollte das echo das alte passwort stimmt nicht, nicht erscheinen. Irgendwie ist die ID wohl nicht richtig..
hi,
session_register('username');
session_register ("level");
Dir wurde bereits gesagt, dass du diese Funktion nicht mehr benutzen sollst.
$_SESSION['user_id'] = $zeileholen["user_id"];
Verwende diese Schreibweise, und zwar ausschließlich.
Irgendwie ist die ID wohl nicht richtig..
Vermutungen mit "irgendwie" helfen nicht weiter.
_Überprüfe_ es mit einer Kontrollausgabe.
gruß,
wahsaga
username und level habe ich auch
gehe ich auf admin.php und gebe dort die id aus, stimmt diese mit der datenbank überein
gehe ich dann auf die nächste seite, stimmt die id nicht mehr. session ist aber gestartet. gleich wie auch bei der admin.php
woran könnte es liegen? ich denke mal, ich mache das select falsch. mit den . " stimmt das?
hi,
gehe ich auf admin.php und gebe dort die id aus, stimmt diese mit der datenbank überein
gehe ich dann auf die nächste seite, stimmt die id nicht mehr.
D.h.?
Welche Werte bekommst du, und _was genau_ hast du in die Session gespeichert, was dort ausgelesen?
ich denke mal, ich mache das select falsch. mit den . " stimmt das?
1. Was soll das Select mit der Session zu tun haben?
2. Lasse dir die generierte Query zur Kontrolle ausgeben.
gruß,
wahsaga
Hallo kai,
session_start();
include('var.inc.php');
$conn = @ mysql_connect($dbserver,$dbuser,$dbpass);
^
Du solltest es beim testen grundsätzlich vermeiden, Fehlermeldungen zu unterdrücken.
mysql_select_db($dbname,$conn);
$query = "SELECT user_id, passwort, level FROM user WHERE benutzername = '".$username."'";
Wo kommt hier $username
her? Wenn du diese Variable nicht selbst erstellt hast, sondern der Benutzername z.B. aus einem Formular stammt, solltest du $_GET oder bzw. $_POST verwenden.
session_register('username');
session_register ("level");
session_register() ist veraltet und sollte nicht mehr verwendet werden.
mysql_connect($dbserver,$dbuser,$dbpass) or die("Keine Verbindung zum Datenbankserver");
mysql_select_db($dbname) or die("Datenbank nicht gefunden");
$sql="SELECT passwort FROM user WHERE user_ID = '".$_SESSION['user_id']."'";
$query1 = mysql_query($sql);
$row=mysql_fetch_array($query1);
füg hier mal
~~~php
var_dump($_SESSION['user_id']);
var_dump($sql);
var_dump($query1);
var_dump($row);
ein. Dann siehst du, welche Werte die einzelnen Variablen enthalten.
Guck mal, was jetzt ausgegeben wird. Du solltest jetzt zumindest erkennen, ob die UID richtig übergeben wird und in welchem Schritt der Fehler steht.
Schöne Grüße,
Johannes
--
[Im Wasser würdet \[Ihr\] bei gleicher Ignoranz jämmerlich ersaufen, weil man darin ab einer bestimmten Tiefe nicht laufen kann, sondern _schwimmen_ muss.](https://forum.selfhtml.org/?t=125226&m=807799)
ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)
echo $begrüßung;
$conn = @ mysql_connect($dbserver,$dbuser,$dbpass);
^
Du solltest es beim testen grundsätzlich vermeiden, Fehlermeldungen zu unterdrücken.
Der Tipp ist noch nicht ausreichend. MySQL-Fehlermeldungen werden nicht als PHP-Fehlermeldungen ausgegeben. Diese muss man sich explizit mittels mysql_error() abholen, wenn das Rückgabeergebnis einer mysql_*-Funktion einen Fehlerstatus signalisiert.
echo "$verabschiedung $name";
Hallo dedlfix,
Der Tipp ist noch nicht ausreichend. MySQL-Fehlermeldungen werden nicht als PHP-Fehlermeldungen ausgegeben. Diese muss man sich explizit mittels mysql_error() abholen, wenn das Rückgabeergebnis einer mysql_*-Funktion einen
Selbstverständlich hast du Recht. Aber es ging mir eigentlich nur darum, dass man beim Testen alles unterlassen sollte, was Fehlermeldungen unterdrückt.
Schöne Grüße,
Johannes
Hallo
hallo kai.
Ich habe ein Problem in php. Ich hole user_id, benutzername und level aus einer Tabelle und speichere diese in Sessions:
session_register('username');
session_register ("level");
session_register ("user_id");Nun möchte ich auf einer anderen Seite ein query auf die tabelle machen und sagen where user_id dieser registrierten Session entspricht. Ich habe es mit
"SELECT passwort FROM user WHERE user_id='".$user_id."'";
Auf sessions greifst du mit $_SESSION['sessionname'] zu.
Desweitern könntest du dir überlegen nur einmal den datenbankzugriff vorzunehmen und dann im späteren Verlauf eine Checksumme bilden und diese dann bei jedem Seitenaufruf abzufragen.
Beispiel:
$_SESSION['user_id'] = $user_id;
$_SESSION['pw'] = $passwort;
$_SESSION['check'] = md5($passwort . $user_id);
Nun musst du nur noch bei jedem aufruf:
if($_SESSION['check'] == md5($_SESSION['pw'] . $_SESSION['user_id'])
{
$login = true; // oder was du halt haben willst...
}
aber dies funktioniert nicht. Wie kann ich mit dem Inhalt dieser Session arbeiten?