Login-Skript in PHP und mit MySQL

#0
24.12.2005, 00:24
Member

Beiträge: 328
#1 Hi!

Ich sitze schon an einem Tag an einem Login-Skript!
Ich verzweifle...
Also, erst mal das Skript:

PHP Code


<?php
$username 
$_REQUEST['username'];
$password $_REQUEST['password'];
$sql_query mysql_query("SELECT password FROM user WHERE
username='"
.stripslashes($_REQUEST['username'])."'" ) ;
$sql_password mysql_fetch_array($sql_query);

if (
$password ==  $sql_password)
    {
        echo 
"Willkommen, $username!";
        }

    else

    {
        echo
"Der User und/oder das Passwort wurden nicht gefunden!";
    }
?>



Das Skript ist schon so einigen Stadien durchlaufen... Es hatte nie richtig funktioniert.

Die Datenbankverbindungen und Datenbankabfragen waren immer fehlerfrei, denn das habe ich schon öfters durch else{]-Anweisungen bzw. mit der Funktion "or die()" kontrolliert.

Ich habe schon gegoogelt: Entweder waren die Login-Skripts auch fehlerhaft, oder sie waren nicht für mich geeignet.

Ich weiß nicht ob es nun an der Syntax liegt oder an der Logik/Funktionsweise.

Ich habe es auch schon mit "mysql_fetch_object" und "mysql_fetch_assoc" statt "mysql_fetch_array" probiert. But nothing is workin' !

Info: Ich habe die Passwörter beim Anlegen der User per "PASSWORD()" verschlüsselt in der Datenbank abgelegt. Könnte es daran liegen?

Mfg J!M!
Dieser Beitrag wurde am 24.12.2005 um 00:31 Uhr von J!M! editiert.
Seitenanfang Seitenende
24.12.2005, 12:31
Member
Avatar Xeper

Beiträge: 5291
#2

Zitat

Info: Ich habe die Passwörter beim Anlegen der User per "PASSWORD()" verschlüsselt in der Datenbank abgelegt. Könnte es daran liegen?
Dann musst du sie auch per PASSWORD() filtern.
Erstmal $_REQUEST mit $_POST ersetzen,
und dein coding ist bissl unsauber.
Achte besser darauf das alles gleich ist also zb. sowas wie zwischen ) und ; leerzeichen das ist nicht schön sowas am besten vermeiden.
All solche Kleinigkeiten.

Zitat

$sql_query = mysql_query("SELECT password FROM user WHERE
username='".stripslashes($_REQUEST['username'])."'" ) ;
Nicht gut, hab da ne bessere Idee ;)

Code

$sql_query=mysql_query("SELECT * FROM user WHERE user like "'.$username.'" AND password like PASSWORD("'.$password.'")');
So muss das sein.

Als Referenz schau dir die an:
http://www.ninth-art.de/files/phps/session.inc.phps
http://www.ninth-art.de/files/phps/DB.inc.phps
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Dieser Beitrag wurde am 24.12.2005 um 12:35 Uhr von Xeper editiert.
Seitenanfang Seitenende
24.12.2005, 12:56
Member

Themenstarter

Beiträge: 328
#3 Hi!

Erst mal danke für die Antwort!

Ich habe nun ein Teil des Skriptes, wie du vorgeschlagen hast:

Codezeile 16

PHP Code


<?php
$sql_query
=mysql_query("SELECT password FROM user WHERE username like "'.$username.'" AND password like PASSWORD("'.$password.'")");
?>



Nun wird mir aber ein Fehler in Codezeile 16 gemeldet:

Zitat

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /*/login.php on line 16
MfG J!M!
Seitenanfang Seitenende
24.12.2005, 13:02
Member
Avatar Xeper

Beiträge: 5291
#4 Oh ja

Code

$sql_query=mysql_query('SELECT password FROM user WHERE username like "'.$username.'" AND password like PASSWORD("'.$password.'")');
Versuchs so ;)
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
24.12.2005, 13:15
Member

Themenstarter

Beiträge: 328
#5 :-( :-( :-(

Jetzt bin ich wieder bei meinem alten Problem.

Zwar kein Syntaxfehler etc., aber es wird nun wieder immer der Teil in "else{}" ausgeführt.

Ich zweifle schon langsam daran, ob es Probleme gab, als ich die User angelegt habe. Aber eigentlich dürfte da nichts sein, denn ich habe den User schon mehrmals gelöscht und angelegt...

Vielleicht noch mal das ganze Skript...:

PHP Code


<?php
//Login
$username=$_POST['username'];
$password=$_POST['password'];
$sql_query=mysql_query('SELECT password FROM user WHERE username like "'.$username.'" AND password like PASSWORD("'.$password.'")');
$sql_password=mysql_fetch_assoc($sql_query);

if (
$password==$sql_password)
    {
        echo 
"Willkommen, $username!";
        }

    else

    {
        echo
"Der User und/oder das Passwort wurden nicht gefunden!";
    }
?>



Mfg J!M!
Seitenanfang Seitenende
24.12.2005, 13:20
Member
Avatar Xeper

Beiträge: 5291
#6

Code

<?php
//Login
$username=$_POST['username'];
$password=$_POST['password'];
$sql_query=mysql_query('SELECT password FROM user WHERE username like "'.$username.'" AND password like PASSWORD("'.$password.'")');

if (mysql_num_rows($sql_query)>0)
    {
        echo "Willkommen, $username!";
        }

    else

    {
        echo"Der User und/oder das Passwort wurden nicht gefunden!";
    }
?>
Gehts so?
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
24.12.2005, 13:27
Member

Themenstarter

Beiträge: 328
#7 Habe so was ähnliches gestern auch im Inet gefunden... Hat nicht funktioniert...

Aber das von dir funktioniert!!! Danke!!! Merci!!! ;-)

Wo wir gerade dabei sind, kannst du mir vielleicht das Prinzip (also mit "mysql_num_rows()>0") hier in Worten erläutern? Ich blicke da nämlich nicht durch, aber ich bin ja lerneifrig... ;-)

Mfg J!M!
Seitenanfang Seitenende
24.12.2005, 13:31
Member
Avatar Xeper

Beiträge: 5291
#8 Ganz einfach, die mysql Abfrage Sucht in der table password nach Übereinstimmungen in den Feldern username und password.
mysql_num_rows zählt die Ergebnesse von $sql_query wenn mehr als 0 gefunden wurde gibts true ansonsten false.
Natürlich geh ich davon aus das jede username/password Kombination einzigartig ist - ansonsten ist diese if() Abfrage nicht mehr sicher.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
24.12.2005, 14:42
Member

Themenstarter

Beiträge: 328
#9 Und dann noch eine kurze Frage.
Sie gehört zwar nicht mehr ganz so zum Thema, aber ich wollte keinen neuen Topic
öffnen:
Wie kann ich die Session-ID an eine IP-Nummer binden?

und...

Wie kann ich eine Fallunterscheidung machen, ob eine Session vorhanden ist?

MfG J!M!
Dieser Beitrag wurde am 24.12.2005 um 14:56 Uhr von J!M! editiert.
Seitenanfang Seitenende
24.12.2005, 18:07
Member
Avatar Xeper

Beiträge: 5291
#10

Zitat

Wie kann ich eine Fallunterscheidung machen, ob eine Session vorhanden ist?

Code

session_name("foo");
$token=md5(uniqid(rand(), true));
if(!session_id()) { session_id($token); session_start(); .... } else { ... }
Halt so wie in den link den ich dir gegeben hatte.

Zitat

Wie kann ich die Session-ID an eine IP-Nummer binden?

Code

session_id(getenv("REMOTE_ADDR"));

__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
25.12.2005, 12:05
Member

Themenstarter

Beiträge: 328
#11

Zitat

Wie kann ich die Session-ID an eine IP-Nummer binden?
Die Frage war ein bisschen missverstädnlich gestellt von mir. Ich meinte eigenltich etwas anderes.
Also, wenn du z.B. sagen wir mal in deinem Postfach drinne bist. Dann kappt irgendwie die Inet-Verbindung, aber du hast die Seite noch auf. Dann verbindest du dich wieder mit dem Inet, dann hat sich ja deine IP geändert. Wenn ich jetzt noch eine Aktion ausführen will, dann wird bei mir z.B. angezeigt, dass die Session an eine andere IP gebunden ist. Ich muss mich dann wieder neu anmelden.
Sowas möchte ich auch machen.
Dies soll als zusätzliche Sicherheitsvorkehrung agieren. Es kann ja mal sein, dass irgendwie die Session-ID "ausgespannt" wird. Wenn ich aber die SID noch mit einer IP verbinde, dann nützt ihm die SID auch nicht viel. Und ich glaube nicht, dass er die SID hat, und noch die zugehörige IP gespooft hat. In diesem Fall ist die SID wie ein Benutzername und die IP-Nummer das zugehörige Passwort.
So denke ich mir es zumindest... hehe ;-)

MfG J!M!
Seitenanfang Seitenende
25.12.2005, 23:16
Member
Avatar Xeper

Beiträge: 5291
#12

Zitat

Also, wenn du z.B. sagen wir mal in deinem Postfach drinne bist. Dann kappt irgendwie die Inet-Verbindung, aber du hast die Seite noch auf. Dann verbindest du dich wieder mit dem Inet, dann hat sich ja deine IP geändert. Wenn ich jetzt noch eine Aktion ausführen will, dann wird bei mir z.B. angezeigt, dass die Session an eine andere IP gebunden ist. Ich muss mich dann wieder neu anmelden.
Sowas möchte ich auch machen.
Oh ja das is ja sowieso klar wenn du kein logout machst gibts nen timeout auf der session oder gar keinen - dass kann man einstellen - da solltest du dich am besten selbst auf www.php.net informieren.
Solche Einstellungen kann man per ini_set() manipulieren, oder direkt in der php.ini des servers.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
26.12.2005, 11:40
...neu hier

Beiträge: 3
#13 Hallo!

Schau Dir mal diesen Link an, da findest du unter anderem die Bindung der Session an eine IP

http://www.phptuts.de/18/sessions.html

Gruß

Philipp
Seitenanfang Seitenende
03.01.2006, 01:25
Member

Beiträge: 30
#14 hi j!m!,

so sollte dein code wahrscheinlich funktionieren (ich hab nur den fehler korrigiert, den ich grad sah, keine ahnung obs noch mehr hat :-P):

PHP Code


<?php
$username 
$_REQUEST['username'];
$password $_REQUEST['password'];
$sql_query mysql_query("SELECT password FROM user WHERE
username='"
.stripslashes($_REQUEST['username'])."'" ) ;
$row mysql_fetch_array($sql_query);

if (
$password ==  $row['password'])
    {
        echo 
"Willkommen, $username!";
        }

    else

    {
        echo
"Der User und/oder das Passwort wurden nicht gefunden!";
    }
?>

Dies:

PHP Code


<?php
$row 
mysql_fetch_array($sql_query);
?>

macht einen array aus der obersten zeile die aus der datenbank kommt. Das ganze kannst du dann eben so abrufen:

PHP Code


<?php
$wert
$zeile['spaltenname'];
?>


__________
greez
honk
Seitenanfang Seitenende
04.01.2006, 01:35
...neu hier

Beiträge: 2
#15 Moin
War grad auch auf der suche nach so einem Login, nur mein problem ist das es bei mit nicht funktioniert.
Bein Brwoser gibt immer

Zitat

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in E:\Xampp\xampp\htdocs\login\login.php on line 15
Der User und/oder das Passwort wurden nicht gefunden!

aus. Woran kann das liegen??

Mein php code sieht z.ZT. so aus

$username=$_POST['username'];
$password=$_POST['password'];
$sql_query=mysql_query('SELECT password FROM user WHERE username like "'.$username.'" AND password like PASSWORD("'.$password.'")');

if (mysql_num_rows($sql_query)>0)
{
echo "Willkommen, $username!";
$SQL = "INSERT INTO member (online) VALUES ( NOW (''))";
}
else if (($username!=$test->nick) || ($password!=$test->passwort))
{
echo"Der User und/oder das Passwort wurden nicht gefunden!";
}

MFG

-=TeWeS=-
Seitenanfang Seitenende
Um auf dieses Thema zu ANTWORTEN
bitte erst » hier kostenlos registrieren!!

Folgende Themen könnten Dich auch interessieren: