C++lerin Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 Hi, hab ihr ein großes Problem mit meinem login... Ich bau hier gerade ein Login. Mit Name und passwort. Die Tabellenstruktur sieht folgendermaßen aus: Spalten: Rollen_id, MA_PersNR, Passwort. Zur Erklärung in der Rollen-id steht entweder eine 1 oder eine o 1= Admin 0= Mitarbeiter Die Ma_PersNR beinhaltet die Personal Nummer. Passwort halt passwort. So nun folgender Code, den ich mir gebastelt hab, jedoch knallt es. Hab 2 Dateien einmal login.php (beinhaltet halt die Maske quasi HTML Code) und dann die Datei check.php die halt alles checked. hier die check.php die wichtig ist. <html><body> <?php $benutzer=$HTTP_POST_VARS['benutzer']; $pass=$HTTP_POST_VARS['pass']; $db=mysql_connect("localhost","root",""); mysql_select_db("tecsphere); $anfrage="SELECT * FROM login WHERE ma_pnr='".$_REQUEST[ma_pnr]."' AND passwort='$passwort' AND user_activated='1' AND user_gesperrt='0'"; $anfrage.=$benutzer; $anfrage.="'"; $anfrage.="'"; $ergebnis=mysql_query($anfrage); $anz=mysql_num_rows($ergebnis); if/$anz==1) { $zeile=mysql_fetch_row($ergebnis); if($pass==$zeile[1]) { print("<b>Login korrekt</b>"); print"<p>Klicken Sie hier zum Zugang:</p>); print("<a href='test.html'>Geschützer Bereich</a>"); } else { print("Benutzername korrekt, Passwort NICHT KORREKT!"); print("<a href='login.php'>Noch ein Versuch...</a>; } } else { print("Benutzername NICHT vorhanden!<br>"); print(" href='login.php'> Noch ein VErsuch..</a>; } mysql_close($db); ?> </body></html>[/PHP] Sorry, wenn ich falsch gepostet hab aber ich habs sehr eilig... Ich hoffe, irgendwer kann mir helfen... bitte es ist sehr wichtig Lg jule Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 zuerst mal musst du bei der SELECT abfrage auch auf gross/kleinschreibung achten!! dann habe ich auch gesehen dass du oben angibst das feld "MA_PersNR" in der DB zu haben und dann aber im SELECT nach "ma_pnr" fragst. da ist wohl schonmal der fehler zu suchen ebenso (SELECT) "passwort" in deiner tabelle "Passwort" if/$anz==1) ist auch falsch ->if($anz==1) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 $anfrage="SELECT * FROM login WHERE ma_pnr='".$_REQUEST[ma_pnr]."' AND passwort='$passwort' AND user_activated='1' AND user_gesperrt='0'"; $anfrage.=$benutzer; $anfrage.="'"; $anfrage.="'"; $ergebnis=mysql_query($anfrage); [/PHP] so muss es ja zwangsläufig zu nem sql syntax error kommen. da fehlt der spaltenname und die verküpfung für den user. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
C++lerin Geschrieben 8. März 2004 Autor Teilen Geschrieben 8. März 2004 Hi, hab die Groß und Kleinschreibung jetzt korregiert. Aber ich denke der Ausdruck ist falsch rollen_id='1' AND rollen_id='0'"; Mir fällt leider nix besseres ein wie die Abfrage konstriert werden soll? Bei dem Wert 1 soll der Admin erkannt werden und bei Wert 0 soll der Mitarbeiter erkannt werden. Hm, wo hab ich etwas vergessen? wg. Spaltename & Verknüpfung??? Sorry. <?php $benutzer=$HTTP_POST_VARS['benutzer']; $passwort=$HTTP_POST_VARS['pass']; $db=mysql_connect("localhost","root",""); mysql_select_db("tecsphere); $anfrage="SELECT * FROM login WHERE ma_pnr='".$_REQUEST[ma_pnr]."' AND passwort='$passwort' AND rollen_id='1' AND rollen_id='0'"; $anfrage.=$benutzer; $anfrage.="'"; $anfrage.="'"; $ergebnis=mysql_query($anfrage); $anz=mysql_num_rows($ergebnis); if($anz==1) { $zeile=mysql_fetch_row($ergebnis); if($pass==$zeile[1]) { print("<b>Login korrekt</b>"); print"<p>Klicken Sie hier zum Zugang:</p>); print("<a href='test.html'>Geschützer Bereich</a>"); } else { print("Benutzername korrekt, Passwort NICHT KORREKT!"); print("<a href='login.php'>Noch ein Versuch...</a>; } } else { print("Benutzername NICHT vorhanden!<br>"); print(" href='login.php'> Noch ein Versuch..</a>; } mysql_close($db); ?> </body></html>[/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 eigentlich musst du beim login gar nicht abfragen ob sich ein normaler benutzer oder admin anmeldet. du setzt eher nach erfolgreichen login ein flag dass der momentane benutzer admin oder normaler benutzer ist (z.b. ne session oder anderes) und so ist die abfrage natürlich quatsch, das nicht 0 und 1 gleichzeit sein kann... alles klar? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
C++lerin Geschrieben 8. März 2004 Autor Teilen Geschrieben 8. März 2004 hm...irgendwie ist mir das schon klar, doch fehlt mir momentan die Idee wie ich das in code ausdrücke... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 <?php $benutzer=$HTTP_POST_VARS['benutzer']; $passwort=$HTTP_POST_VARS['pass']; $db=mysql_connect("localhost","root",""); mysql_select_db("tecsphere); $anfrage="SELECT * FROM login WHERE ma_pnr='".$_REQUEST[ma_pnr]."' AND passwort='". $passwort ."'"; $ergebnis=mysql_query($anfrage); $anz=mysql_num_rows($ergebnis); if($zeile=mysql_fetch_row($ergebnis)) { print("<b>Login korrekt</b>"); print"<p>Klicken Sie hier zum Zugang:</p>); print("<a href='test.html'>Geschützer Bereich</a>"); } else { print("Benutzername oder Passwort falsch!<br>"); print(" href='login.php'> Noch ein Versuch..</a>; } mysql_close($db); [/PHP] PS: Es ist immer abzuraten bei der prüfung von PW und Login auszugeben welche der beiden eingaben falsch war, da dies zu einem sicherheitsrisiko führt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 und ohne dich jetzt überfordern zu wollen würde ich aus dem usernamen und dem passwort das du mit HTTP_POST_VARS bekommst mit der str_replace funktion ein einfaches hochkomma also das ' rausschneiden um "sql-injections"zu verhindern. das ist aber nur wirklich wichtig wenn die seite ins öffentliche internet kommt. sonst kann sich nämlich jeder der ein kleines bisschen ahnung vom thema hat in deine anwendung ohne benutzerdaten sogar als admin einloggen. musste ich leider vor kurzen am eigenen leibe erfahren. sorry, aber wenn ich diesen select * from logindaten where.... code sehe springt seit dieser erfahrung bei mir immer der alarm an... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
C++lerin Geschrieben 9. März 2004 Autor Teilen Geschrieben 9. März 2004 <?php if ( !isset($ma_pnr)) $ma_pnr=0; $benutzer = $HTTP_POST_VARS['ma_pnr']; $pass = md5($HTTP_POST_VARS['passwort']); //Passwort ist mit md5 verschlüsselt. if ((!isset($benutzer)) OR (!isset($pass))) { die("Name und Passwort ist nicht bekannt !"); } $db = mysql_connect("localhost","root",""); mysql_select_db("test"); $login_check .= "SELECT `password`,`rollen_id`"; // user_activated`,`user_gesperrt soll eigentlich nur rollen_id überprüft werden $login_check .= "FROM `login` "; $login_check .= "WHERE `ma_pnr` = '".$benutzer."' and 'passwort' = '".$pass."`"; $result = mysql_query($login_check,$db); $zeileholen = mysql_fetch_array($result); mysql_close($db); if(!$zeileholen || $zeileholen["password"] <> $pass) { echo("Benutzername oder Passwort falsch!!!"); } if($zeileholen["rollen_id"] == 0) { echo("Als Mitarbeiter eingeloggt"); echo("<a href='Mitarbeiter_account.php'> Geschützer Bereich</a>"); } if($zeileholen["rollen_id"] == 1) { echo("Als Admin eingeloggt"); echo("<a href='adminverwaltung.php'> Geschützer Bereich</a>"); } ?> <!--<a href="adminverwaltung.php">Geschützer Bereich</a>--> </body></html> Hi, hab jetzt das Problem das, er hier nen Fehler ausgibt. Ab hier knallt es: $zeileholen = mysql_fetch_array($result); Dabei hab ich ma_pnr jetzt auf null gesetzt, siehe oben.<html><body> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 9. März 2004 Teilen Geschrieben 9. März 2004 dein query sieht ja in rein so aus: SELECT `password`,`rollen_id`FROM `login` usw. da fehlt ein leerzeichen zwischen rollen_id und FROM! darüber hinaus darfst du kein tabellenfeld in hochkomma setzen also nicht SELECT 'password' FROM sondern SELECT password FROM auch für die anderen felder in der datenbank wie rollen_id und login willst du dir nicht erstmal ein tutorial zum thema mysql und php durchlesen?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.