Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Login mit MrHappiness Tutorial [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Login mit MrHappiness Tutorial


 
Smartsoul
22-11-2005, 16:13 
 
Hallo zusammen,

habe gestern das Tutorial von MrHappiness gefunden und bin auch schwer
begeistert davon. Gut und leicht verständlich geschrieben, mit vielen für
Anfänger nicht unwichtigen Randbemerkungen. Danke für deine Mühe und
dein Engagement.

Leider funktioniert es bei mir nicht so prima, wie bei den vielen Anderen
hier im Forum, die von dieser klasse Arbeit schon profitiert haben. Sieht
(nach längerer Recherche) auch so aus, als habe niemand die Probleme, die
ich damit habe. Was aber nichts heißen muss, da ich kein großer Coder bin.

Habe alle Skripte per Copy&Paste 1:1 aus dem Tutorial
http://php-resource.de/tutorials/read/38/4/
übernommen und alle Dateien wie beschrieben benannt. Die DB-Tabelle
ebenfalls 1:1 angelegt.

Meine Probleme:

Nach erfolgreichem Login zeigt mir die login.php wie gewünscht zwei Links
an "Ausloggen" und "Check". Die Session-ID wird in die DB geschrieben.

1. Bei Klick auf "Check" sagt mir die logged_in.php an, dass ich nicht
eingelogged bin und bietet mir den Link "Start" an, um mich erneut
einzuloggen.

2. Bei Klick auf "Ausloggen" komme ich auf die logout.php, auf der dann
zweimal "Sie sind nicht eingeloggt." steht. ? Darüber hinaus wird in der DB
das Feld "UserSession" nicht auf NULL gesetzt, was die
Überprüfungsfunktion "logged_in()" in der sessionhelpers.inc.php natürlich
unmöglich macht.

Frage:

Kennt oder findet jemand die Probleme und mögliche Abhilfe?

Code login.php:


session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
$userid=check_user($_POST['username'], $_POST['userpass']);
if ($userid!=false)
login($userid);
else
echo 'Ihre Anmeldedaten waren nicht korrekt!';
}
if (!logged_in())
echo '<form method="post" action="login.php">
<label>Benutzername:</label>
<input name="username" type="text"><br>
<label>Passwort: </label>
<input name="userpass" type="password" id="userpass"><br>
<input name="login" type="submit"
id="login" value="Einloggen">
</form>';
else
echo '<a href="logout.php">Ausloggen</a>';
echo '<p /><a href="logged_in.php">Check</a>';


Code logged_in.php:


session_start();
include 'sessionhelpers.inc.php';
echo 'Sie sind ';
if (!logged_in())
echo 'nicht ';
echo 'eingeloggt.<p />';
echo '<a href="login.php">Start</a>';


Code logout.php:


session_start();
include 'sessionhelpers.inc.php';
echo 'Sie sind ';
if (!logged_in())
echo 'nicht ';
echo 'eingeloggt.<p />';
logout();
echo 'Sie sind ';
if (!logged_in())
echo 'nicht ';
echo 'eingeloggt.< p/>';
echo '<a href="login.php">Einloggen</a>';


Code sessionhelpers.inc.php:


function connect()
{
$con= mysql_connect('servername','benutzer','passwort')
or die (mysql_error());
mysql_select_db('datenbankname',$con)
or die(mysql_error());
}

function check_user($name, $pass)
{
$sql="SELECT UserId
FROM users
WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
LIMIT 1";
$result= mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows($result)==1)
{
$user=mysql_fetch_assoc($result);
return $user['UserId'];
}
else
return false;
}

function login($userid)
{
$sql="UPDATE users
SET UserSession='".session_id()."'
WHERE UserId=".$userid;
mysql_query($sql);
}

function logged_in()
{
$sql="SELECT UserId
FROM users
WHERE UserSession='".session_id()."'
LIMIT 1";
$result= mysql_query($sql);
return ( mysql_num_rows($result)==1);
}

function logout()
{
$sql="UPDATE users
SET UserSession=NULL
WHERE UserSession='".session_id()."'";
mysql_query($sql);
}

connect();

 
st@tic
22-11-2005, 16:52 
 
weiß ja net wie es bei anderen aussieht, aber könntest du deinen post
mit zeilenumbrüchen formatieren, der zieht sich in die länge und keiner hier hat lust horizontal nach rechts zu scrollen

 
Smartsoul
22-11-2005, 17:02 
 
@ st@tic

Klar kann ich das. Sorry, aber ich wusste nicht, dass das ein Problem ist.
Denke aber das liegt an der Programmierung des Forums, oder?

Heisst das ich soll immer einen Zeilenumbruch machen, wenn ich im
Eingabefenster ans Ende der Zeile stoße? Oder an welcher Stelle sonst?

... und soll ich das beim Code auch machen?

Nichts für ungut. Bin neu hier!

 
thommyk
22-11-2005, 17:36 
 
Normaler Text wird sowieso umgebrochen.
Deshalb NUR im Code zu lange Zeilen umbrechen.

 
Smartsoul
22-11-2005, 17:44 
 
Danke für die Hinweise bzgl. Formatierung.

Gibt es auch Tipps zu meinem Problem?

Die function logout() wird z.B. vollkommen ignoriert.

 
thommyk
23-11-2005, 11:14 
 
Original geschrieben von Smartsoul
Danke für die Hinweise bzgl. Formatierung.
Gibt es auch Tipps zu meinem Problem?
Anscheinend nicht, solange Du Deinen Code nicht umbrichst. :D

Ausserdem, was hast Du denn unternommen, um den Fehler zu finden?
Das Problem scheint doch in der function logged_in() zu liegen, die ein falsches Ergebnis zurückliefert. Lass Dir doch mal die Query ausgeben.
So, und bis Du Deinen Code nicht umgebrochen hast, gibts keine weiteren Tips.

 
Smartsoul
23-11-2005, 11:24 
 
Sorry, aber ich dachte, das hätte ich bereits in ausreichendem Maß getan.

Bei mir sieht auch alles okay aus. Ich kann den ganzen Code sehen und rechts ist bei mir auch noch Platz.

Werde aber nochmal oben reingehen und versuchen den Umbruch besser zu machen.

 
Smartsoul
23-11-2005, 11:40 
 
O.K.

Hab jetzt nochmal umgebrochen und hoffe, dass es jetzt passt. Bitte um Nachsicht ob meiner Unerfahrenheit.

THX und werde mich nun um die Query von der logged_in() kümmern.

 
Smartsoul
23-11-2005, 12:01 
 
Hab ich mich schon rehabilitiert (genug Umbrüche usw.)? Nochmals sorry, Leute. Habt bitte Nachsicht mit mir.

Die Ausgabe der logged_in() ist:

Resource id #4

Allerdings ist der einzige Datensatz, der in der DB-Tabelle drin steht
und in den ja auch die session_id rein geschrieben wird, der Datensatz mit der UserId #1. Logischerweise muss das Ergebnis der Funktion "nicht eingeloggt" sein, aber ...

Wie kommt das zustande?

 
mrhappiness
23-11-2005, 12:05 
 
Bau das or die(mysql_error());mal hinter jeder Abfrage ein.

Wenn das keine weiteren Meldungen ausspuckt, lass dir die SQL-Anweisungen mal mit echo ausgeben und poste die

 
onemorenerd
23-11-2005, 12:19 
 
Original geschrieben von Smartsoul
Die Ausgabe der logged_in() ist: Resource id #4
Allerdings ist der einzige Datensatz, der in der DB-Tabelle drin steht (...) der Datensatz mit der UserId #1.

Mir scheint, du mißinterpretierst die Ausgabe. Es handelt sich nicht um Daten aus der DB sondern um die DB-Verbindungs-Kennung.

 
Smartsoul
23-11-2005, 12:37 
 
@ mrhappiness

or die(mysql_error()) hat keine weiteren Meldungen gebracht

Ausgabe der SQL Abfrage in login() vor dem Login:
SELECT UserId FROM users
WHERE UserSession='90dda062181220090a95bd86f427bbfd'
LIMIT 1

Ausgabe der SQL Abfrage in login() nach dem Login:
UPDATE users
SET UserSession='d6be669f392771b2c4ffc499892b2078'
WHERE UserId=1
SELECT UserId
FROM users
WHERE UserSession='d6be669f392771b2c4ffc499892b2078'
LIMIT 1

Ausgabe der SQL Abfrage in logged_in() nach dem Login:
SELECT UserId
FROM users
WHERE UserSession='a30a8e5bf0dbb12a58851c66b7a4ce38'
LIMIT 1

 
Smartsoul
23-11-2005, 12:43 
 
Das Komische ist, dass bei jedem Aufruf der Datei (Dateien) die session_id verändert wird und die soll doch eigentlich gleich bleiben, oder?

 
wahsaga
23-11-2005, 12:48 
 
Original geschrieben von Smartsoul
Das Komische ist, dass bei jedem Aufruf der Datei (Dateien) die session_id verändert wird und die soll doch eigentlich gleich bleiben, oder?
Das, besser wär' das.

Kontrolliere also die Session-Einstellungen (phpinfo()).

 
mrhappiness
23-11-2005, 12:50 
 
phpinfo();Bitte den Bereich "Session" posten.

Wahrscheinlich blockierst du das Session-Cookie, das die Session-ID beim Client speichern soll oder hast PHP so konfiguriert, dass ohne Cookie gearbeitet werden soll.

Darüberhinaus ist das Anhängen der Session-ID an relative Links deaktiviert.

 
Smartsoul
23-11-2005, 13:00 
 
Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php4 /var/lib/php4
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off

 
mrhappiness
23-11-2005, 13:01 
 
Original geschrieben von Smartsoul
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off Du blockierst das Cookie.

Entweder musst du in der Datei, die phpinfo() dir nennt, session.use_trans_sid auf On setzen oder deinen Browser so einstellen, dass er das Cookie akzeptiert.

Und nicht vergessen: Apache neu starten

 
Smartsoul
23-11-2005, 13:28 
 
Entweder musst du in der Datei, die phpinfo() dir nennt, session.use_trans_sid auf On setzen oder deinen Browser so einstellen, dass er das Cookie akzeptiert.

O.K.

Habe Firefox auf Cookies akzeptieren gestellt und jetzt läuft die Chose. Das Umstellen der session.use_trans_sid auf On war wohl nicht nötig.

Das ist fein und ich bedanke mich recht herzlich bei allen, die mir bei meinem Problem auf die Sprünge geholfen haben und auch bei denen, die mir hier mühsam beigebracht haben, wie das Posten hier abläuft. ;-)

Was ich allerdings noch nicht verstehe, vielleicht habt ihr noch eine kurze Ansage hierzu:

Hatte in meinem Firefox die IP-Adresse meines Servers als Ausnahme für die Annahme von Cookies eingestellt, was aber offensichtlich für die Lauffähigkeit der Login-Anwendung von MrHappiness nicht ausgereicht hat.

Warum das?

... und ...

Ich (Anfänger!!!) dachte immer Sessions würden ausschliesslich auf dem Server verarbeitet und hätten gar nichts mit dem Client zu tun.

Nochwas nebenbei:
Gibt es in diesem Forum eine Funktion, die "gelösten" Threads auch als solche zu kennzeichnen?

... und ...

Kann ich das Subject dieses Threads noch nachträglich ändern, um dem Problem bzw. der Lösung besser gerecht zu werden?

THX 2 ALL

 
ChrisBO
21-12-2005, 01:24 
 
Kann mir jemand helfen, ein Register Script dazu zu erstellen, habs leider nicht auf die Reihe bekommen :(

 
Smartsoul
21-12-2005, 08:51 
 
Wie soll denn deine Registratur aussehen?

 
ChrisBO
21-12-2005, 12:33 
 
Eighentlich sollte bei der Registration nur Name , PW PW Bestätigung und Email Adresse angegeben werden. Wenn möglich sollte nach Abschluss der Anmeldung eine Mail an den neuen User gesendet werden :)

Danke schonmal im Vorraus

 
Smartsoul
21-12-2005, 13:17 
 
Hast du denn das Tutorial von MrHappiness mal gelesen?

Tutorial (http://www.php-resource.de/tutorials/read/38/1/)

 
ChrisBO
21-12-2005, 13:34 
 
Original geschrieben von Smartsoul
Hast du denn das Tutorial von MrHappiness mal gelesen?

Tutorial (http://www.php-resource.de/tutorials/read/38/1/)

Si!

Habs doch bei mir soweit übernommen und funkioniert soweit...

Nur das Registrierungs Script bekomm ich nicht hin, irgendwie

 
Smartsoul
21-12-2005, 14:47 
 
bekomme ich nicht hin, irgendwie

Sehr konkret, findest du nicht?

Was hältst du davon Code zu posten und genaue Fehlerbeschreibungen abzugeben?

 
ChrisBO
23-12-2005, 06:49 
 
Okay, hier die Fehlermeldung die Erscheint:
"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in I:\server\xampp\htdocs\bb\register.php on line 25"

Und hier der Code der Zeilen +/- 5 Zeilen:


Zeile 20 <tr><td><input name='login' type='submit' value='Registrieren'></td></tr>


</table>

$Username = $_POST['username'];
$UserPass = md5($_POST['password']);
$UserMail = $_POST ['mail'];
if($insert = @mysql_query("INSERT INTO users SET UserName='$name', UserPass=MD5('$pass'),
UserMail='$mail'")) {
Zeile 30 echo "<p align="center">Anmeldung erfolgreich!<br><br>" ;


Zeile20 und Zeile 30 im Code habe ich jetzt manuelle hinzugefügt, zur Orientierung.

MfG
Chris

 
ChrisBO
24-12-2005, 04:59 
 
Die Registrierungsdatei hab ich nun geschafft...

Es funktioniert, doch beim Einloggen, kommt man mit den angelegten Nutzernamen nicht rein.

JA! Ich habe über PHP MyAdmin nachgeschaut, die User sind eingetragen

 
Smartsoul
03-01-2006, 09:49 
 
Frohes Neues an ChrisBo und alle anderen natürlich auch ;-)

Na also! Es geht voran!

War, wie du dir schon gedacht haben wirst, zuletzt nicht in der Gegend.

Hat sich dein Login-Problem mittlerweile erledigt?

 
mesa
08-01-2006, 20:02 
 
Hallo Ihr Spezialisten!!!

Ich versuch seit einer woche ein Login bereich auf meine website zu basteln und ich bekomme es nicht hin. Ich hab schon langsam keine lust mehr. Aber vielleicht kann man mir ja hier helfen? :)

ich bräuchte eine login script mit einer verdammt super einfachen Aleitung dazu. weil ich hab jetzt schon einige durch ..und immer scheitert es an einem problem.


was bedeutet eigentlich wenn ich diese Fehlermeldung habe ?:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\login\index.php on line 105


line 105 steht:

while ($row = mysql_fetch_object ($abfrage1)) {

FÜr jegliche Hilfe danke ich im vorraus.

 
sagg
08-01-2006, 20:06 
 
Original geschrieben von mesa
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\login\index.php on line 105

Das deine Abfrage keinen Treffer hatte, bzw. Fehlerhaft ist.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:42 Uhr.