Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

PHP => Sessions

Diskussion: PHP => Sessions im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hola, ich versuch mich gerade an Sessions in Verbindung mit einer MYSQL-Datenbankabfrage, aber ich komm hier nicht so wirklich ...

Antwort
Alt 19.10.04, 09:14   #1 (permalink)
Bastard Operator
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard PHP => Sessions

Anzeige

Hola,

ich versuch mich gerade an Sessions in Verbindung mit einer MYSQL-Datenbankabfrage, aber ich komm hier nicht so wirklich weiter:

Die Datenbank hat den Namen "atciss_db" , in dieser ist ein Table Namens "user" definiert. In diesem Table sind 3 Spalten Namens "id, username und password". Diese enthalten die Werte "1, admin und admin".

Nun habe ich eine index.php und eine login.php, welche wie folgt aussehen:

Code:
[index.php]

<?php
    session_start(); 
    $_SESSION["auth"]=1;    // Neue Variable wird angelegt (authenticated) und diese wird auf 1 gesetzt. D.h. der User hat das Recht sich einzuloggen
?>

<form name="UserLogin" method="post" action="login.php">
<input type="hidden" name="projekt" value="0">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="login" value="Login">
</form>



[login.php]

<?php
    session_start();                      // Session wird übernommen
    if ($_SESSION["auth"]==1)    // Abfrage, ob der User das Recht hat sich einzuloggen
    {
        @mysql_connect("localhost", "root", "");    // Aufbau der Datenbankverbindung und Abfrage, ob der User existiert, bis Zeile 29
        @mysql_select_db("atciss_db");
        $result=@mysql_query("select * from user where username='".addslashes($_POST["username"])."' and password='".$_POST["password"]."'");
        $row=mysql_fetch_array($result);

        if($row["id"])
        $_SESSION["auth"]=2;    // Falls der User existiert wird authenticated auf 2 gesetzt und der User ist eingeloggt
        else
        echo "Username oder Passwort inkorrekt";    // Falls der User nicht existiert wird eine Fehlermeldung ausgegeben
    }


    if ($_SESSION["auth"]==0)    // Sollte authenticated in der Session 0 sein, heißt das der User ist nicht eingeloggt. Für diesen Fall wird die Meldung ausgegeben, daß die Session nicht existiert
    {
        echo "Session existiert nicht";
    }


    if ($_SESSION["auth"]==2)
    {
       header("Location:seite2.php");    // URL der Seite, auf die nach dem Einloggen verwiesen werden soll
    }

?>
Ich bekommt hierbei die Meldung, daß der Username oder das Passwort falsch ist. Demnach hat ist irgendwo wohl ein Problem, daß die Daten aus der Datenbank nicht richtig ausgelesen werden.

Btw: Das in Zeile 26 hab ich nur so umständlich geschrieben, weil ich dort zuvor noch ein paar andere Variablen eingebunden hatte

Erstmal soweit, wenn das funktioniert mache ich an den Rest wie die Logout-Prozedur.

So long...

Greetz Evil
TheEvilOne ist offline   Mit Zitat antworten
Alt 19.10.04, 12:00   #2 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard RE: PHP => Sessions

Zitat:
Original von TheEvilOne
In diesem Table sind 2 Spalten Namens "username und password". Diese enthalten die Werte "admin und admin".
gibt es in der tabelle die spalte "id" ?
steht in der spalte "password" das wort "admin" oder der md5 hash ?
__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 19.10.04, 12:36   #3 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

Da steht das Passwort "admin" in Lautschrift drin ...

...und _jetzt_ gibts in der Tabelle auch die Spalte ID ;-] ...aber geht leider immer noch nicht.
TheEvilOne ist offline   Mit Zitat antworten
Alt 19.10.04, 13:09   #4 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard

du vergleichst das password mit dem md5 hash und nicht mit dem wort
also schreib entweder den entsprechenden md5 hash bei password in die datenbank oder nimm die md5 funktion aus der select anweisung raus
__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
Alt 19.10.04, 13:22   #5 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

Super, es funktioniert, danke Dir ;-]

Nachtrag: Im Nachhinein stellte ich fest, daß es nun egal ist, was ich eingebe, es funktioniert immer ^^ ...also auch bei falscher Passworteingabe. Ich muß da nochmal drüberschaun...
TheEvilOne ist offline   Mit Zitat antworten
Alt 19.10.04, 13:27   #6 (permalink)
Moderator
 
Registriert seit: 17.10.01
soox Leistung: Facit NTK
Likes: 0
Standard

Code:
<?php
    session_start();                      // Session wird übernommen
    if ($_SESSION["auth"]==1)    // Abfrage, ob der User das Recht hat sich einzuloggen
    {
        $conn = @mysql_connect("localhost", "root", ""); // Aufbau der Datenbankverbindung und Abfrage, ob der User existiert, bis Zeile 29
		if($conn) {
		   mysql_select_db("atciss_db", $conn);
		} else {
		   die("Sorry, this service is temporarely unavailable. We have a problem with the database.\n");
		}
        
        $query="select * from user where username='".addslashes($_POST["username"])."' and password='".md5($_POST["password"])."'";
        $result=@mysql_query($query);
        if ( $result AND mysql_num_rows($result)>0) {
	        $row=mysql_fetch_array($result);

	        $_SESSION["auth"]=2;    // Falls der User existiert wird authenticated auf 2 gesetzt und der User ist eingeloggt
        } else {
        	echo "Username oder Passwort inkorrekt";    // Falls der User nicht existiert wird eine Fehlermeldung ausgegeben
		}
    }

    if ($_SESSION["auth"]==0)    // Sollte authenticated in der Session 0 sein, heißt das der User ist nicht eingeloggt. Für diesen Fall wird die Meldung ausgegeben, daß die Session nicht existiert
    {
        echo "Session existiert nicht";
    }


    if ($_SESSION["auth"]==2)
    {
        echo "Hier wird die URL angegeben, welche hinter dem PSw-Schutz liegt";    // URL zu der geheimen Seite per header("Location:URL");
    }

?>
hab mal ein paar aenderungen gemacht.....diese sollten aber bei deinem problem keinen unterschied machen.
ich wuerde jetzt mal behaupten, dass die query keine ergebnisse zurueckgibt. gibt mal mit echo deine query aus und schicke diese per hand an mysql (z.b. commandline oder phpmyadmin), damit du so sehen kannst ob diese auch ein ergebnis bringt.

btw zur zeit versuchst du dein md5 verschluesseltes passwort mit dem cleartextpw in der db zu vergleichen (ev hast du das mitlerweile geaendert). das gibt natuerlich kein ergebnis zurueck.
soox ist offline   Mit Zitat antworten
Alt 19.10.04, 14:32   #7 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

Ich hab die Zeilen in meinem Code oben mal ergänzt, so wie es jetzt bei mir aussieht; ist zwar nicht wirklich _schön_ so, aber für den Augenblick zweckmäßig =)

@soox
Dein Code macht tatsächlich keinen Unterschied, es wird immer noch das Gleiche Problem angezeigt. Ein Ergebnis wird mit dem neuen Code oben im Query auch erzeugt.

mh, wieso fügst Du denn da ein @ ein? $conn = @mysql_connect ?
TheEvilOne ist offline   Mit Zitat antworten
Alt 19.10.04, 15:06   #8 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard

Zitat:
$query="select * from user where username='admin' and password='admin'";
wenn das jetzt wirklich dein query ist, dann ist's kein wunder wenns immer richtig ist
da sind ja keine variablen mehr drin

Zitat:
$query="select * from user where username='".$_POST["username"]."' and password='".$_POST["password"]."'";
so sollte es eigentlich gehen

zu dem @:
http://www.php.net/manual/de/languag...rorcontrol.php
__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
Alt 19.10.04, 15:08   #9 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

mh, so hatte ich es zuerst, nur damit gings auch nicht.
TheEvilOne ist offline   Mit Zitat antworten
Alt 19.10.04, 15:24   #10 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard

dann vermute ich mal dass es bei dir an der session liegt
nach dem ersten erfolgreichen einloggen ist die $_SESSION["auth"] immer gleich 2 und dadurch kommt es bei allen folgenden logins gar nicht mehr zur db abfrage weil du ja vorher diese abfrage machst
if ($_SESSION["auth"]==1)
deswegen sind nach dem ersten erfolgreichen einloggen, scheinbar alle falschen logins korrekt
also teste das mal jeweils in nem neuen browserfenster oder schreib dir erstmal ne logout funktion (is ja im prinzip nur eine zeile)
__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
Alt 19.10.04, 15:33   #11 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

Da hatte ich mich vorhin wohl irgendwo verschrieben, die Anführungszeichen falsch gesetzt, o.ä. ... aber jetzt funktioniert es einwandfrei mit Deinem Code.

Vielen Dank für Eure Hilfe ;-]
TheEvilOne ist offline   Mit Zitat antworten
Alt 19.10.04, 17:07   #12 (permalink)
Moderator
 
Registriert seit: 17.10.01
soox Leistung: Facit NTK
Likes: 0
Standard

wichtig ist einfach das addslashes bei username, da ich dir boese sachen uebergeben kann.

das @ ist dazu da, dass php nichts was den user nicht angeht "ausplaudert"
soox ist offline   Mit Zitat antworten
Alt 20.10.04, 07:49   #13 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

Gut zu wissen ;-]

...also sollte ich es mir angewöhnen, daß "@" überall zu verwenden.
TheEvilOne ist offline   Mit Zitat antworten
Alt 20.10.04, 09:38   #14 (permalink)
Bastard Operator
Themenstarter
 
Benutzerbild von TheEvilOne
 
Registriert seit: 02.10.01
TheEvilOne Leistung: Z3
Likes: 16
Standard

mh, wenn ich die index.php in meine Seite einfügen will (ich hab sie jetzt in start.php umbenannt, um das alles in mein Projekt einzufügen), dann kann ich diese dort nur oberhalb des HTML-Tags einbinden, d.h.:

Code:
<?php
include('start.php');
?>

<html>
<head>
</head>
<body>
...
</body>
</html>
Sobald ich sie allerdings innerhalb der Body-Tags einfüge, bekomm ich Warnungen ("Cannot send session cookie" und "Cannot send session cache limiter") und sobald ich mich einlogge, kommt die Meldung, daß die Session nicht existiert. Aber wie gesagt, oberhalb der HTML-Tags funktioniert es, aber wieso ist das so und weshalb kann ich das nicht unten einfügen?



Zur Info:
Ich hab jetzt noch die logout.php und die authheader.php geschrieben. Die authheader.php füge ich per include in jede Datei ein, welche nur für eingeloggte User erreichbar sein soll:

Code:
[authheader.php]

<?php
    session_start();    // Session wird übernommen

    if ($_SESSION["auth"]!=2)    // Abfrage ob der User eingeloggt ist
    {
        header("Location:index.php");    // Wenn der User nicht eingeloggt ist, wird er auf die index.php verwiesen
        exit;
    }
?>



[logout.php]

<?php
    session_start();
    session_destroy();
?>
Sie wurden erfolgreich ausgeloggt.
TheEvilOne ist offline   Mit Zitat antworten
Alt 20.10.04, 10:39   #15 (permalink)
 
Registriert seit: 09.05.04
saberrider Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von TheEvilOne
Sobald ich sie allerdings innerhalb der Body-Tags einfüge, bekomm ich Warnungen ("Cannot send session cookie" und "Cannot send session cache limiter") und sobald ich mich einlogge, kommt die Meldung, daß die Session nicht existiert. Aber wie gesagt, oberhalb der HTML-Tags funktioniert es, aber wieso ist das so und weshalb kann ich das nicht unten einfügen?
Zitat:
Original von PHP.net
Note: If you are using cookie-based sessions, you must call session_start() before anything is outputted to the browser.
Quelle: http://de3.php.net/manual/en/function.session-start.php

sr
saberrider ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » PHP => Sessions
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sessions zeitabhänig destroyen? reaLInsanity (Web-) Design und webbasierte Sprachen 10 26.04.07 11:41
PHP => Sessions TheEvilOne Code Kitchen 15 20.10.04 10:52
problem mit php sessions matrixII Code Kitchen 6 22.02.04 19:20
sessions benutzen für loginbereich HellKnight (Web-) Design und webbasierte Sprachen 2 19.02.04 21:16
Sessions in PHP? mido (Web-) Design und webbasierte Sprachen 4 01.01.02 19:14


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61