Login-Funktion

Ich bin gerade dabei, ein Login auf Datenbank Basis zu versuchen!

Leider will das nicht ganz so, wie ich will!

[php]$sql = „SELECT login FROM user WHERE login = ‚0‘“;
$result = mysql_query($sql);
while($row = mysql_fetch_object($result)){
if($row->login == 0){
echo „Sie haben keine Berechtigung diese Seite zu sehen!“;
}
if($row->login == 1) {
echo „Herzlich Willkommen im Internen Bereich!“;
echo „<form action="intern.php" method="get"><input type="submit" name="logout" value="Logout">“;
}
}[/php]Wieso funktioniert denn nicht die if´s in der while-schleife?

MfG Marcel

Edit:

Oki 1. Fehler entdeckt, die 2. Abfrage müsste != 0 sein! Trotzdem geht es nicht!

Mit dem kleinen Schnipsel blick ich leider nicht durch. Wenn ich nicht den vollen Quelltext inkl. dem Inhalt der DB kenne, dann kann ich dir nur schlecht helfen…

Die Datenbank!

[PHP]$sql = " CREATE TABLE user(
id int( 10 ) NOT NULL AUTO_INCREMENT ,
user text NOT NULL,
passwort text NOT NULL,
email text NOT NULL,
name text NOT NULL,
user_group varchar(10) NOT NULL default ‚user‘,
login varchar(10) NOT NULL default ‚0‘,
PRIMARY KEY (id)
) ";[/PHP]

das ist keine datenbank, sondern ein SQL-befehl.

→ das ist schon das 1.000ste mal, dass ich dir sagen muss, dass du deine themen gefälligst ÜBERSICHTLICH UND VOLLSTÄNDIG gestalten sollst.

Nils aka XraYSoLo

weil ein break nach erfolgreichem login fehlt und die schleife immer komplett durchlaufen wird und dein where immer nur auf null testet.

schleife knicken und neu machen

und vielleicht mal das datenbank design überarbeiten… ist ja grausam o.O

ich kann leider nur zustimmen, sowas sollte verboten werden :wink:

Dann sagt mir doch mal bitte, wie ich es machen soll (DB-design), damit es nicht verboten wird!

CREATE TABLE user ( id int( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, user VARCHAR(20) NOT NULL, passwort CHAR(40) /*SHA1*/ NOT NULL, /*bei MD5 währe anstadt der 40 eine 32 einzutragen*/ email VARCHAR(100) NOT NULL, name 50 NOT NULL, user_group VARCHAR(10) NOT NULL default 'user', login INT(1) NOT NULL default '0' )

also usernamen auf 20 zeichen zu begrenzen ist wohl angebracht… länger währe eher als hack versuch einzuordnen :wink:
passwort verschlüsselt hat natürlich immer ne feste länge also 40 für SHA1 ^^
emails da sind wa mal groszügig und lassen platz für 100 zeichen
name selbst bei zweitnamen wird wohl kaum über 50 zeichen gehen
und login sieht so aus als wenn da immer nur 1 oder 2 raus kommt… also INT(1)

ansonsten berichtige mich bitte ^^

//Edit: zu deinem code… du liest alle aus deren login status nicht 0 ist und prüfst dann ob der llogin status 1 oder 0 ist… na merkst was? :smiley:

Gut habe die WHERE BEdingung hinausgemacht, sowie die 2. if Abfrage zu == 1 umgeändert!
Es wäre bestimmt auch besser mit Cookie und/oder Sessionen zu arbeiten oder, hatte da schon mal angefangen, ging aber nicht?
Wenn ich jetzt eines der beiden machen sollte, was für Werte wäre optimal in einem Cookie oder Session zu speichern?

MfG Marcel

session.

Nils aka XraYSoLo

Was wäre am besten in der Session zu speichern das $login?

speicher die id der person die sich eingeloggt hat

Ok dann speicher ich die id des Users und frage dann auf der Seite ab, ob in der Datenbank die Spalte login des jeweiligen Users auf 1 steht, ok, danke so werde ich es machen!

es reicht völlig zu prüfen ob die session da ist.

login.php
[PHP]

<?php session_start(); $user = "max" //benutzername vom loginversuch $password = sha1("mustermann"); //password vom loginversuch $test = mysql_query("SELECT `id` FROM `users` WHERE `user` = '".$user."' AND `password` = '".$password."' LIMIT 1") or trigger_error(mysql_error,E_USER_NOTICE); if(mysql_num_rows($test)) { list($_SESSION["id"]) = mysql_fetch_array($test); $_SESSION["login"] = true; } ?>

[/PHP]

Dann testest du einfach
[PHP]

<?php session_start() if(!isset($_SESSION["login"]) || $_SESSION["login"] !== true) { header("Location: nicht_eingeloggt.html"); exit(); } //Interner bereich ?>

[/PHP]
Wenn dann den benutzer identifizieren willst, kannst du das über $_SESSION[„id“] machen

zum logout einfach ein session_destroy() oder ein unset($_SESSION[„id“]); unset($_SESSION[„login“]);

benutz einfach zend auth :stuck_out_tongue:

och frank… mysql_real_escape_string…

hehe;) ja stimmt

Ich bin an das nicht mehr gewöhnt, hab mir nen mysql modul geschrieben was das alles alleine erledigt…

Und seit ich das benutze vergess ich immer mal sone kleinigkeiten

mysqli o.O ?

um ehrlich zu sein, ich verstehe überhaupt nicht, auf was da eigentlich getetstet wird.

ein normaler vorgang ist doch der:
user loggt sich ein, ist user und passwort korrekt, login ok, sonst login nein.

eine abfrage müsste also (einmalig) auf username und zugehöriges passwort erfolgen. bei einem korrekten login, setzt man $_SESSION[‚login‘] = 1, sonst auf 0.
habe alle deine scripote ein session_start() am anfang kannst du immer auf die variable hin prüfen und musst deine datenbank nicht permanent quälen.
ein löschen der session würde ich nicht machen, da eine gelöschte session unter umständen wieder aufgenommen werden kann. setz deine sessions variable lieber von anfang an auf null für ein nicht login und auf einen anderen wert für login ok. und darauf prüfst du dann.