|
|
User gesamt
|
:
|
2393961
|
User online
|
:
|
4
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Workshops » Profil-bearbeiten funktioniert nicht!!!
Seite:
|
1
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
18.02.2007 20:28 Uhr
|
Profil-bearbeiten funktioniert nicht!!!
|
ScorpionX
|
User
|
|
registriert
|
18.02.2007
|
wohnt in
|
|
Beiträge
|
4
|
|
Hallo, also ich habe ein kleines Problem...
Und zwar, wenn ich mich auf meiner seite einlogge dann sehe ich zwar mein benutzermenu aber wenn ich profil bearbeiten möchte dann steht da:
"sind sind nicht eingeloggt.
Gehen sie zurück zur Startseite."
hier der code :
PHP:
<?php
session_start();
error_reporting(E_ALL);
//sql daten
if(!isset($_SESSION['UserID'])) {
echo "Sie sind nicht eingeloggt.<br>\n".
"Bitte <a href=\"login.php\">loggen</a> Sie sich zuerst ein.\n";
}
else{
$sql = "SELECT
Nickname,
Email,
Show_Email,
Wohnort,
Homepage,
ICQ,
MSN,
Avatar
FROM
User
WHERE
ID = '".mysql_real_escape_string($_SESSION['UserID'])."'
";
...
?>
ich hoffe ihr könnt mir helfen
|
|
|
18.02.2007 22:41 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
Hallo,
also dein code sagt mir nichts bzw. woher soll ich wissen wo bei dir der Fehler liegt.
Ich würde dir empfehlen, in deine User Tabelle eine Spalte user_session als varchar hinzuzufügen. Durch session_start(); wird jedem Benutzer der das Script aufruft eine session_id zugeteilt, diese wird es zerstört, wenn du dein Browser schließt und dann wieder öffnest.
Folgt könntest du bei einer erfolgreichen Authentifizierung des Benutzers die session_id in die Datenbank schreiben und über diese dann prüfen ob der Benutzer noch angemeldet ist. Sollte der Benutzer sich abmelden schreibst du einfach NULL in die Datenbank.
Prüfung:
PHP:
if(session_id() == $row['user_session']){
....
}
Du solltest aber nie vergessen regelmäßig - bei jedem script - zu prüfen ob der benutzer noch angemeldet ist, die datenbank sollte ebenfalls immer aktualisiert werden. Wenn die session_id noch in der Datenbank steht, der Benutzer allerdings vor drei Tagen das letzte mal da war und du nur über
PHP:
if(isset($row['user_session'])){
...
}
prüfst, wäre der Benutzer trotzdem angemeldet.
Naja, mehr kann ich mit deinen Angaben nicht helfen.
Gruß Negura
|
|
|
18.02.2007 23:37 Uhr
|
|
ScorpionX
|
User
|
|
registriert
|
18.02.2007
|
wohnt in
|
|
Beiträge
|
4
|
|
hmmm danke erstmal...
Also poste ich den Code nochmal, diesmal (hoffentlich) den Richtigen:
PHP:
<?php
session_start();
//SQL Daten
// Loggt einen User ein, ..
function doLogin($ID, $Autologin=false)
{
// .. indem die aktuelle Session ID in der Datenbank gespeichert wird
$sql = "UPDATE
User
SET
SessionID = '".mysql_real_escape_string(session_id())."',
Autologin = NULL,
IP = '".$_SERVER['REMOTE_ADDR']."',
Letzte_Aktion = '".mysql_real_escape_string(time())."',
Letzter_Login = '".mysql_real_escape_string(time())."'
WHERE
ID = '".$ID."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// Wenn 'eingeloggt bleiben' aktiviert wurde
if($Autologin){
// Zufallscode erzeugen
$part_one = substr(time()-rand(100, 100000),5,10);
$part_two = substr(time()-rand(100, 100000),-5);
$Login_ID = md5($part_one.$part_two);
// Code im Cookie speichern, 10 Jahre dürfte genügen
setcookie("Autologin", $Login_ID, time()+60*60*24*365*10 );
$sql = "UPDATE
User
SET
Autologin = '".$Login_ID."'
WHERE
ID = '".$ID."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}
// Daten des Users in der Session speichern
$sql = "SELECT
Nickname
FROM
User
WHERE
ID = '".$ID."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
$_SESSION['UserID'] = $ID;
$_SESSION['Nickname'] = $row['Nickname'];
}
//Session starten
if(isset($_POST['submit']) AND $_POST['submit']=='Einloggen'){
// Falls der Nickname und das Passwort übereinstimmen..
$sql = "SELECT
ID
FROM
User
WHERE
Nickname = '".mysql_real_escape_string(trim($_POST['Nickname']))."' AND
Passwort = '".md5(trim($_POST['Passwort']))."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// wird die ID des Users geholt und der User damit eingeloggt
$row = mysql_fetch_assoc($result);
// Prüft, ob wirklich genau ein Datensatz gefunden wurde
if (mysql_num_rows($result)==1){
doLogin($row['ID'], isset($_POST['Autologin']));
echo "<h4>Willkommen ".$_SESSION['Nickname']."</h4>\n";
echo "Sie wurden erfolgreich eingeloggt.<br>\n\n";
echo "<br>";
echo "<a href=\"logout.php\" target='content-iframe'>Ausloggen</a>\n\n";
echo "<br>";
echo "<a href=\"profil_bearbeiten.php\" target='content-iframe'>Profil bearbeiten</a>\n\n";
echo "<br>";
echo "<a href=\"Userliste.php\" target='content-iframe'>Userliste</a>\n\n";
echo "<br>";
echo "<a href=\"Userliste.php\" target='content-iframe'>Userliste</a>\n\n";
}
else{
echo "Sie konnten nicht eingeloggt werden.<br>\n".
"Nickname oder Passwort fehlerhaft.<br>\n".
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
}
}
else{
echo "<form ".
" name=\"Login\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<table width='45px' valign='top'>";
echo "<tr><th>Nickname:\n</th>";
echo "<th><input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n</th></tr>";
echo "<br>\n";
echo "<tr><th>Passwort:\n</th>";
echo "<th><input type=\"password\" name=\"Passwort\">\n</th></tr>";
echo "<br>\n";
echo "<tr><th colspan='2'>eingeloggt bleiben :\n";
echo "<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n</th></tr>";
echo "<br>\n";
echo "<tr><th colspan='2'><input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n</th></tr>";
echo "<br>\n";
echo "<tr><th colspan='2'><a href=\"passwort.php\"><u>Passwort vergessen</u></a> oder noch nicht <a href=\"Formular.php\"><u>registriert</u></a>?\n</th></tr></table>";
echo "</form>\n";
}
?>
EDIT:Also ich sehe keine Fehler mit Session, aber wo ich ein Fehler sehe ist bei
setcookie(...) oder? muss setcookie nicht immer nach <?php stehen?
aber dann würde das ja mit dem häkchen nicht funktionieren!
danke für eure hilfe schon im vorraus
Dieser Beitrag wurde am 18.02.2007 um 23:45:46 Uhr von ScorpionX zum 1. Mal editiert.
|
|
|
19.02.2007 01:05 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Hey,
also zunächst wärs mal sinnvoll, wenn du
PHP:
<?php
echo "<pre>\n";
var_dump($_SESSION);
echo "</pre>\n";
?>
ausgeben lässt. Damit "siehst" du erstmal, was überhaupt in der Session drin steht.
Wenn da kein Fehler auftritt, prüfst du mit session_id(); ob du bei jedem Seitenaufruf auch die gleiche Session ID hast, denn wenn die Session ID wechselt, bleiben die Daten ja nicht erhalten.
Außerdem mal überprüfen, ob dein Browser Cookies akzeptiert..
Zitat:EDIT:Also ich sehe keine Fehler mit Session, aber wo ich ein Fehler sehe ist bei
setcookie(...) oder? muss setcookie nicht immer nach <?php stehen?
aber dann würde das ja mit dem häkchen nicht funktionieren!
danke für eure hilfe schon im vorraus
Also wenn ich dich richtig verstehe, dann meinst du, dass setcookie() am Anfang des Scriptes stehen soll?
Das muss nicht sein. Nen Cookie wird mit Hilfe eines HTTP Headets gesetzt, deshalb darf vor dem Aufruf von setcookie() kein Header gesendet worden sein, wie z.B. eine Textausgabe auf dem Bildschirm. Wenn es Probleme mit den Funktionen gibt, dann müsste eigentlich auch eine dementsprechende Fehlermeldung kommen (Headers already sent..). Um das zu prüfen würde ich auch mal error_reporting(E_ALL); an den Anfang des Scriptes schreiben, damit auch eventuelle Notices angezeigt werden.
Insgesamt hat der Autologin mit dem "eingeloggt sein" erstmal nichts zu tun, deshalb kann es eigentlich nicht daran liegen..
Ich schätze, dass es an den Sessiondaten liegt, also das die aus irgendnem Grund nicht übergeben werden..
|
|
|
20.02.2007 15:44 Uhr
|
|
ScorpionX
|
User
|
|
registriert
|
18.02.2007
|
wohnt in
|
|
Beiträge
|
4
|
|
ich gebe euch mal den link und ihr könnt euch das ja anguggen!
LINK
ihr könnt euch auch registrieren damit ihr das mal sieht!
ganz unten siehst auch was der session ausgibt!
danke für eure hilfe
|
|
|
20.02.2007 20:46 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
steht am Anfang jedes Scriptes session_start(); ?
|
|
|
20.02.2007 21:43 Uhr
|
|
ScorpionX
|
User
|
|
registriert
|
18.02.2007
|
wohnt in
|
|
Beiträge
|
4
|
|
ja
|
|
|
21.02.2007 00:57 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
dann mach mal die testausgaben mit
PHP:
<?php
echo "<pre>\n";
var_dump($_SESSION);
echo "</pre>\n";
?>
|
|
|
Seite:
|
1
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|