Eurokicker
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 28.03.2006, 19:40   #1
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt

mysql login mit php funktioniert nicht


hi leude,

eigentlich geht mein login. ich habe eine datenbank, in der ich erfolgreich die userdaten speichere und in einem loginformular wieder auslesen und vergleichen kann. einziges problem: es kann sich immer nur der user einloggen, der sich als letztes angemeldet hat...woran kann das liegen?

hier mein code für die anmeldung (eintragung in der db)
PHP-Code:
<?php

    error_reporting
(E_ALL);

    include (
'config.php');

    
$username =  $_POST['username'];
    
$passwort =  $_POST['passwort'];
    
$name $_POST['name'];
    
$vorname $_POST['vorname'];
    
$email $_POST['email'];
    
$managerid $_POST['htid'];
    
$account $_POST['account'];

    
$db_link mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS);
    
mysql_select_db ("user");

    
$sql "SELECT Username FROM TabUser;";

    
$userquery mysql_query($sql) OR die(mysql_error());

    
$row mysql_fetch_assoc($userquery);

    if (
$row['Username'] == $username OR $username == "")
        {
         
header("Location:baduser.html");
         }
    else
        {
         if (
$email != "" && ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$"$email))
             {
                  if (
$managerid != "")
                      {
                         if (
$account == "")
                             {
                                 
header("Location:badaccount.html");
                                 }
                         else
                             {
                                 if (
$account == "payaccount")
                                     {
                            
$query "INSERT INTO TabUser (UserID,Username,Passwort,Name,Vorname,Email,ManagerID,Account) VALUES (NULL,'$username','$passwort','$name','$vorname','$email','$managerid','$account')";

                            
$hinzufuegen=mysql_query($query) or die ("Fehler in Abfrage: $query. " mysql_error());

                                         
header("Location:paydanke.html");

                                         }
                                 else
                                     {
                            
$query "INSERT INTO TabUser (UserID,Username,Passwort,Name,Vorname,Email,ManagerID,Account) VALUES (NULL,'$username','$passwort','$name','$vorname','$email','$managerid','$account')";

                            
$hinzufuegen=mysql_query($query) or die ("Fehler in Abfrage: $query. " mysql_error());

                                         
header("Location:freedanke.html");

                                         }
                                 }
                    }
         else
                     {
                         
header("Location:badmanager.html");
                         }
                  }
    else
             {
             
header("Location:badmail.html");
             }
         }


?>
und hier der code für das einloggen (vergleich mit der db):

PHP-Code:
<?php

    error_reporting
(E_ALL);

    
$username $_POST['username'];
    
$passwort $_POST['passwort'];

    include (
'config.php');

    
$db_link mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS);
    
mysql_select_db ("user");

    
$sql "SELECT Username, Passwort FROM TabUser;";

    
$userquery mysql_query($sql) OR die(mysql_error());

    
$row mysql_fetch_assoc($userquery);

    if (
$row['Username'] == $username AND $row['Passwort'] == $passwort)
        {
         
header("Location:angemeldet.html");
         }

    else
        {
         
header("Location:badlogin.html");
         }
tobias82 ist offline   Mit Zitat antworten


Alt 29.03.2006, 07:14   #2
TP-Senior
 
Benutzerbild von newcommer
 
Registriert seit: Dec 2005
Ort: Saarland
newcommer ist auf einem guten Weg
Ich gehe mal davon aus, dass Dein Script zum Eintragen funktioniert (hab es jetzt nicht geprüft) ... Beim einloggen hast Du aber einen kleinen Denkfehler:

Du selektierst ALLE User aus der Datenbank ... d.h. Deine Abfrage führt dazu, dass die komplette Tabelle "aufgelistet" wird und nur der letzte Datensatz dann für Deine Abfrage stehen bleibt. So kommt es, dass ein Login immer nur für den letzten Datensatz möglich ist !!!

-> Du musst eine Eingrenzung der Daten schon beim Select machen:

SELECT * FROM TabUser WHERE Username = '$_POST[username]'

Damit hast Du schon mal nur den Datensatz des Users, der sich gerade versucht anzumelden ... Jetzt musst Du nur noch prüfen ob das eingetragenen Passwort mit dem in der Datenbank übereinstimmt:

if($row[Passwort] == $_POST[passwort]) { header(...) } else { header(...) }

Denke das sollte Dir weiterhelfen ;-)
newcommer ist offline   Mit Zitat antworten
Alt 29.03.2006, 09:51   #3
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
danke für den tipp. kann es hier leider nicht ausprobieren...setze mich aber in c.a. 2 stunden nochma ran...was ich noch nicht ganz verstehe ist der * nach SELECT. heisst das hier soll alles rein was ich will (Username, Passwort, etc.) oder heisst das er wählt alles spalten aus, die für den gewählten user zählen?

danke nochmal für die hilfe!
tobias82 ist offline   Mit Zitat antworten
Alt 29.03.2006, 10:02   #4
TP-Senior
 
Benutzerbild von newcommer
 
Registriert seit: Dec 2005
Ort: Saarland
newcommer ist auf einem guten Weg
das mit dem * ist eine "dumme" Angewohnheit von mir ... damit werden alle Spalten des Datensatzes ausgewählt (und man muss sie nicht einzeln hinschreiben)
Vorteil: der Code wird kleiner
Nachteil: die Abfrage "kann" etwas länger dauern (aber nur relevant wenn über 50 Spalten in der Tabelle sind, man aber nur 2 benötigt :-))

Du kannst auch ruhig das Select von Dir nehmen (mit dem genannten Zusatz)
newcommer ist offline   Mit Zitat antworten
Alt 29.03.2006, 12:59   #5
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
irgendwie gehts nicht...er sagt in zeile 13 (der SELECT Befehl) ist ein t_string error....woran liegts? habe den WHERE vergleich auch in deiner version gemacht: selbes problem...

PHP-Code:
<?php

    error_reporting
(E_ALL);

    
$username $_POST['username'];
    
$passwort $_POST['passwort'];

    include (
'config.php');

    
$db_link mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS);
    
mysql_select_db ("user");

    
SELECT FROM TabUser WHERE Username $username;

    if (
$row['Username'] == $username AND $row['Passwort'] == $passwort)
        {
         
header("Location:angemeldet.html");
         }

    else
        {
         
header("Location:badlogin.html");
         }
tobias82 ist offline   Mit Zitat antworten
Alt 29.03.2006, 13:09   #6
TP-Senior
 
Benutzerbild von newcommer
 
Registriert seit: Dec 2005
Ort: Saarland
newcommer ist auf einem guten Weg
sorry, ich hatte nicht den ganzen String hingeschrieben ;-)

$sql = "SELECT Username, Passwort FROM TabUser WHERE Username = '$_POST[username]";
newcommer ist offline   Mit Zitat antworten
Alt 29.03.2006, 13:10   #7
TP-Senior
 
Benutzerbild von newcommer
 
Registriert seit: Dec 2005
Ort: Saarland
newcommer ist auf einem guten Weg
Ergänzung: Du musst nur den Select-Befehl in Deiner Abfrage ändern (also alles zwischen dem " und ") ... alles andere bleibt stehen (da fehlt in deinem zweiten Posting noch so einiges ;-)
newcommer ist offline   Mit Zitat antworten
Alt 29.03.2006, 13:15   #8
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
yeah!!! ich bin begeistert! es funzt!!!

weisst du denn auch wie man am besten einen logout gestaltet? bislang habe ich nur einen simplen verweis auf die startseite gemacht, von der aus man nur durch einen erfolgreichen login an die erweiterten funktionen kommt. habe dann auch irgendwas von sessions gelesen, konnte damit aber nich so viel anfangen...??

danke für deine hilfe!
tobias82 ist offline   Mit Zitat antworten
Alt 29.03.2006, 15:22   #9
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Die Session-Daten löschen:
PHP-Code:
session_destroy(); 
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 01.04.2006, 14:26   #10
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
werden die session daten automatisch angelegt wenn man sich "einloggt"? oder muss ich da noch ne session beim erfolgreichen überprüfen von pw und username erstellen und die vielleicht auch betiteln, bevor ich sie schliessen kann?
tobias82 ist offline   Mit Zitat antworten
Alt 01.04.2006, 18:08   #11
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Meistens benötigt man $Session[] bei einem Login.
Wenn Du keine Session hast, musst Du sie auch nicht zerstören (destroy)

Automatisch wird keine Session erzeugt, wie und warum auch?!
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 01.04.2006, 18:37   #12
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
muss ich denn eine session erstellen? es soll ein portal sein, in dem der user auf eine individuelle oberfläche zugreifen kann.
tobias82 ist offline   Mit Zitat antworten
Alt 01.04.2006, 21:56   #13
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Ja, dann musst nach erfolgreichem Login Du
eine Session starten und den User registrieren!

Jede geschützte seite muss dann mit folgendem beginnen:
PHP-Code:
<?php
session_start
();

if (!
session_is_registered('user'))
{
die (
'Sie müssen sich <a href="deineLogin.php" 
title="zum Einloggen hier klicken">einloggen</a>!'
);
}
?>
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 02.04.2006, 09:51   #14
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
müsste ich das mit dem session_start() nicht bereits beim einlog-vorgang machen und die SID an die nächste seite übertragen? habe mich da mal kundig gemacht...aber irgendwie peil ichs noch nicht so ganz. wenn ich die session in der selben datei starten müsste, müsste doch auch das php-skript in die selbe datei. wenn das aber dort ist, dann muss doch auch der <form action...> tag angepasst werden. dort steht dann sowas wie:

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">

aber wo soll nun '.SID.' rein???

wenn ich auf ne andre seite verweisen würde, würds ja so aussehn:

<form action="login.php? ' . SID . ' ">....

aber dann hätte ich an der stelle ja noch gar keine SID, weil ich da auch noch keine session gestartet habe....???!!!

danke für die hilfe!
tobias82 ist offline   Mit Zitat antworten
Alt 02.04.2006, 10:00   #15
TP-Senior
 
Registriert seit: Oct 2005
tobias82 macht alles soweit korrekt
ich habs allein hingekriegt. so langsam komm ich klar ;-)

die login.php bleibt extra und der form-tag in der anmeldeseite sieht so aus:

<form action="login.php" method="post">

also ganz normal.

die login.php sieht dann so aus:

PHP-Code:
<?php
    session_start
();

    
error_reporting(E_ALL);

    
$username $_POST['username'];
    
$passwort $_POST['passwort'];

    include (
'config.php');

    
$db_link mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS);
    
mysql_select_db ("user");

    
$sql "SELECT Username, Passwort FROM TabUser WHERE Username = '$_POST[username]';";

    
$userquery mysql_query($sql) OR die(mysql_error());

    
$row mysql_fetch_assoc($userquery);

    if (
$row['Username'] == $username AND $row['Passwort'] == $passwort)
        {
         
$s_id session_id();
         
header("Location:angemeldet2.php?$s_id");
         
$_SESSION["username"] = $username;
         }

    else
        {
         
header("Location:badlogin.html");
         }
?>
wichtig ist der header-tag. dort wird die session_id() übertragen.

auf der folgenden seite siehts dann erstmal so aus und dort wird dann auch der inhalt (hier $username) wiedergegeben:

PHP-Code:
<?php
session_start
();
echo 
$_SESSION["username"];
?>
vielen dank an meinen kopf!
tobias82 ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Traum-Talk > Webdesign & Co.
mysql login mit php funktioniert nicht mysql login mit php funktioniert nicht
« srollleiste | Flash über Dhtml/javascript ??? »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

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

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 0