Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Php Passwordcheck

Hallo zusammen

Das tönt für euch jetzt sicher simpel aber ich möchte gerne Wissen wie ich überprüfen kann, ob das im LogIn Formular eingegebene Passwort und der Benutzername mit einem der in MySQL gespeicherten Zeile übereinstimmen. (In MySQL ist das Passwort natürlich als md5 gespeichert)

Thanks Fabian Weber


Antworten zu Php Passwordcheck:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

PHP?

Einfach das Passwort aus dem Formular kurzerhand mit md5 verschlüsseln, dann damit eine Datenbankabfrage machen, ungefähr so:

<?php
$result 
mysql_query("SELECT * FROM passworttabelle WHERE passwort=&#39;".$meinMd5Passwort."&#39;");
?>


Bei null Resultaten war das Passwort dann wohl falsch ;)

Bei solchen Sachen ist optimalerweise vor der Query noch auf MySQL-Injections zu prüfen.

greez 8)
JoSsiF

Erstmal Danke..
Aber wird dann auch überprüft ob die Kombination von Benutzername und Passwort stimmt?

Thanks Fabian Weber

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo

Du Bekommst doch die angaben als HTTP_POST aus dem Formular

<?php
$passwort 
$_POST["passwort"];
$username$_POST["username"];
# so jetzt haste die Daten

$result mysql_query("SELECT * FROM passworttabelle WHERE passwort=&#39;".$meinMd5Passwort."&#39; AND username=&#39;".$username."&#39;");
?>


Und dann gilt ja:

Bei null Resultaten war das Passwort dann wohl falsch ;)
Du nimmst ja nur die Beiträge aus der Datenbak WHERE der username und das passwort ist.

danach kannste dann zum Beispiel mit

mysl_num_rows() arbeiten  ;D

gruß
der_webi

 

Danke! Mein Code sieht jetzt mal so aus:

  <?php
$passwort 
$_POST["passwort"];
$username$_POST["benutzername"];
$Md5Passwort md5($passwort);
$verbindung mysql_connect ("localhost",
"***""***")
or die (
"keine Verbindung möglich.
 Benutzername oder Passwort sind falsch"
);

mysql_select_db("***")
or die (
"Die Datenbank existiert nicht.");
$result mysql_query("SELECT * FROM users WHERE passwort=&#39;".$Md5Passwort."&#39; AND username=&#39;".$username."&#39;");
$num_rows mysql_num_rows($result); 
if (
$num_rows == 1)
{
 print 
"<p>Herzlich Willkommen im Midgliederbereich</p>
 
  <p>&nbsp;</p>"
;
}
elseif (
$num_rows OR $num_rows 1)
{
print 
"Falscher Benutzername oder Passwort
<form id=\"form1\" name=\"form1\" method=<\"post\" action=\"loginck.php\">
    <label></label>
    <p>
      <label></label>
    </p>
    <table width=\"290\" border=\"0\">
      <tr>
        <td width=\"118\">Benutzername</td>
        <td width=\"150\"><input name=\"benutzername\" type=\"text\" id=\"benutzername\" /></td>
        <td width=\"8\">&nbsp;</td>
      </tr>
      <tr>
        <td>Passwort</td>
        <td><input name=\"passwort\" type=\"password\" id=\"passwort\" /></td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><input type=\"submit\" name=\"Submit\" value=\"LogIn\" /></td>
        <td>&nbsp;</td>
      </tr>
    </table>
    <p>
      <label></label>
</p>
  </form>"
;
}
?

Jetzt habe ich aber noch ne spalte ok, in der y oder n steht. y für "Der Benutzer ist von einem Admin freigeschaltet" und n für "Der benutzer ist noch von keinem Admin freigeschaltet."

Wie lautet jetzt die dafür notwendige IF Abfrage, die ich hier einfügen muss ? ::

<?php if ($num_rows == 1)
{
 print 
"<p>Herzlich Willkommen im Midgliederbereich</p>
 
  <p>&nbsp;</p>"
;
}
?>

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Kannst du auch mit in die Datenbankabfrage reinschmeißen. Ich wage es nicht, das nochmal extra in Code zu fassen, denn das ist zu trivial.

Übrigens: Dein elseif-Zweig ist sinnlos. Denn der deckt genau das ab, was deine if-Bedingung nicht erfüllt. Ergo hätte es ein "normales" else getan.

Zudem ist die Logik falsch. Wenn zufällig mehr als 1 Resultat aus der DB geliefert wird, dann sagst du dem Nutzer etwas vonwegen falsches Passwort und so. Stimmt doch aber gar nicht. Du hast es einfach nur versäumt, diesen Spezialfall im Vorfeld zu verhindern, das Passwort hat aber offensichtlich gestimmt ;)

greez 8)
JoSsiF

Erstmal Danke!
Ich werde das mit dem elseif korrigieren!

Wenn zufällig mehr als 1 Resultat aus der DB geliefert wird

Es kann doch nicht sein dass der benutzername zweimal existiert? Und wenn doch, dass dann die Kombination von Benutzernamen und Passwort zweimal dieselbe ist... oder sehe ich das falsch? xD

EDIT: Wenn jetzt die spalte "ok" mit den werten "y" (=yes), "n" (=no) oder "a" (=Administrator) gefüllt werden kann, wie kann ich dann die if abfrage machen, ob der benutzer yes, no oder admin ist?
bisher hab ichs so, aber es funzt nicht ;D
<?php
$result 
mysql_query("SELECT * FROM users WHERE passwort=&#39;".$meinMd5Passwort."&#39; AND username=&#39;".$username."&#39;  AND ok=&#39;"OR a" &#39;");
?>

Thanks
Fabian Weber  
« Letzte Änderung: 19.04.07, 10:27:17 von Fabian Weber »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Es kann doch nicht sein dass der benutzername zweimal existiert?

Warum nicht? Wenn du es als Programmierer zulässt, ist es auh möglich. Es wird sicher selten oder gar nicht vorkommen, aber man muss diesen Fall trotzdem behandeln, just in case ;)

greez 8)
JoSsiF

Ok danke dass du mich erinnert hast ;);D Ich habe die Registrierung angepasst xD

Der Code sieht jetzt so aus, aber wenn ich nur in einem Feld eine Angabe mache, gibt es nie etwas aus:

<?php
$username 
$_POST[&#39;benutzername&#39;];
$passwort $_POST[&#39;passwort&#39;];
$vorname $_POST[&#39;vorname&#39;];
$nachname $_POST[&#39;nachname&#39;];
$strasse $_POST[&#39;strasse&#39;];
$nummer $_POST[&#39;nr&#39;];
$ort $_POST[&#39;ort&#39;];
$bank $_POST[&#39;konto&#39;];
$md5 md5($passwort);


$error "Es ist ein Fehler aufgetreten!";
if (empty(
$username))
{
$error $error."Sie haben keinen Benutzernamen angegeben<br>";
}
elseif (empty(
$passwort))
{
$error $error."Sie haben kein Passwort angegeben<br>";
}
elseif (empty(
$vorname))
{
$error $error."Sie haben keinen Vornamen angegeben<br>";
}
elseif (empty(
$nachname))
{
$error $error."Sie haben keinen Nachnamen angegeben<br>";
}
elseif (empty(
$strasse))
{
$error $error."Sie haben keine Strasse angegeben<br>";
}
elseif (empty(
$nummer))
{
$error $error."Sie haben keine Hausnummer angegeben<br>";
}
elseif (empty(
$ort))
{
$error $error."Sie haben Ihren Wohnort nicht angegeben<br>";
}
elseif (empty(
$bank))
{
$error $error."Sie haben keine Kontonummer angegeben<br>";
}
else
{

//Verbindung aufbauen
$verbindung mysql_connect ("localhost",
"***""***")
or die (
"keine Verbindung möglich.
 Benutzername oder Passwort sind falsch"
);

//Datenbank auswählen
mysql_select_db("***")
or die (
"Die Datenbank existiert nicht.");

//Überprüfen, ob der Benutzername schon existiert
$result mysql_query("SELECT * FROM users WHERE username=&#39;".$username."&#39;");
$num_rows mysql_num_rows($result); 
if (
$num_rows == 0)
{

//wenn der Benutzername noch nicht existiert
$eintrag "INSERT INTO users
(username, passwort, vorname, nachname, strasse, nummer, ort, konto, ok)

VALUES
(&#39;
$username&#39;, &#39;$md5&#39;,
 &#39;
$vorname&#39;, &#39;$nachname&#39;, &#39;$strasse&#39;, &#39;$nummer&#39;, &#39;$ort&#39;, &#39;$bank&#39;, &#39;n&#39;)";

$eintragen mysql_query($eintrag);
}
// Wenn Der Benutzername schon existiert 
else
{ print 
"Der Benutzername existiert leider schon!";
}}


?>




UND:

Wenn jetzt die spalte "ok" mit den werten "y" (=yes), "n" (=no) oder "a" (=Administrator) gefüllt werden kann, wie kann ich dann die if abfrage machen, ob der benutzer yes, no oder admin ist?
bisher hab ichs so, aber es funzt nicht ;D
<?php
$result 
mysql_query("SELECT * FROM users WHERE passwort=&#39;".$meinMd5Passwort."&#39; AND username=&#39;".$username."&#39;  AND ok=&#39;"OR a" &#39;");
?>
« Letzte Änderung: 19.04.07, 12:02:15 von Fabian Weber »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Der Code sieht grausam aus und ergibt auch keinen Sinn. Wenn du für jeden Fall mit elseif arbeitest, schließt du ja immer alle anderen Fälle aus. Frage doch lieber jedes Feld einzeln mit if ab und schreibe die zugehörige Fehlermeldung in eine String-Variable. So kannst du bei Bedarf mehrere Fehlermeldungen anhäufen.

Für die Datenbankabfrage wäre es günstig, wenn du dir mal die genaue Syntax reinziehst, denn deine Variante kann nicht funktionieren. So in der Art muss das werden:

<?php
$result 
mysql_query("SELECT * FROM users WHERE  passwort=&#39;".$meinMd5Passwort."&#39; AND username=&#39;".$username."&#39; AND (ok=&#39;y&#39; OR ok=&#39;a&#39;)");
?>


greez 8)
JoSsiF

Ok ja stimmt! Leuchtet mir ein ;) Danke ;D

Ich habe mir überlegt ob es nicht besser wäre wenn der User, der sich richtig einloggt, aber noch nicht freigeschaltet ist das erfahren würde... deshalb habe ich mir mal folgenden Schritt überlegt:

Mit welcher Funktion ist es möglich eine andere Ausgabe zu machen ob ok=y ok=n  oder ok=a,
bzw. wie kann ich den Wert der in der Spalte ok steht in eine Veriable bringen?
Hier das Prinzip wie ich es meine: (Es ist mir klar dass dieser Code nicht funktioniert)

<?php

$result 
mysql_query("SELECT * FROM users WHERE  passwort=&#39;".$meinMd5Passwort."&#39; AND username=&#39;".$username."&#39;");
//Hier muss der Teil stehen, welcher den Wert
//der Spalte ok in einer Variable speichert

if ($ok "y")
{
echo 
"Du bist ein user";
}
elseif (
$ok "n")
{
echo 
"Leider Wurdest du noch nicht freigeschaltet";
}
elseif (
$ok "a")
{
echo 
"Herzlich willkommen im Adminpanel.....";
}
?>


Thanks Fabian Weber    
« Letzte Änderung: 19.04.07, 12:33:48 von Fabian Weber »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Naja ist doch schon fast richtig. In dem Fall lässt du das ok wieder aus der Query raus (aber nett, dass wir mal drüber gesprochen haben), und behandelst das beim Auswerten.

Wie du die Ergebnisse deiner Query ausliest, das steht in jeder drittklassigen Dokumentation. Und man glaubt es kaum, aber sogar die offizielle PHP-Dokumentation enthält neben dem üblichen Programmier-Chinesisch meist Beispiele zu jeder Funktion: http://www.php.net/manual/de/function.mysql-fetch-array.php

Danke! Ich habe es jetzt hingekriegt!

Also, da ich es mit sessions noch nicht ganz begriffen
 habe, habe ich es jetzt mal mit cookies gemacht.
 Das Kennwort und der Benutzername werden in einem Cookie gespeichert,
wobei das Kennwort als md5 gespeichert ist.
Damit der Benutzer sich nicht immer einloggen
muss, sollte hier überprüft werden, ob das kennwort und benutzername schon in einem cookie gespeichert sind
und ggf. überprüfen.
Weiter unten (nicht im nachfolgenden Quellcode enthalten)
habe ich zum Test eine Funktion eingefügt, welche
bei falscher eingabe von Kennwort oder
Benutzernamen angibt, was eingegeben wurde.
wenn ich diese Seite jetzt aufrufe heisst es
ich habe im Formular das Passwort falsch eingegeben (In der MySQL Tabelle ist das Kennwort auch verschlüsselt gespeichert).
Im Feld, welches ausgibt,was ich beim Formular unter Passwort eingegeben habe erscheint dann die md5 des Kennwortes!
 Was ist der Fehler an folgendem Code? Falls ihr das jetzt nicht begriffen habt, schreibt es einfach ;)


 <?php
  
if (isset ($_COOKIE[&#39;username&#39;]) AND isset ($_COOKIE[&#39;passwort&#39;]))
  
  $meinMd5passwort $_COOKIE[&#39;passwort&#39;];
  $username $_COOKIE[&#39;username&#39;];
  }
  else
  {
$passwort $_POST["passwort"];
$username $_POST["benutzername"];
$meinMd5Passwort md5($passwort);
}
$verbindung mysql_connect ("localhost",
"***""***")
or die (
"keine Verbindung möglich.
 Benutzername oder Passwort sind falsch"
);

mysql_select_db("***")
or die (
"Die Datenbank existiert nicht.");
$result mysql_query("SELECT passwort, username, ok, vorname, 
nachname FROM users WHERE passwort=&#39;"
.$meinMd5Passwort."&#39; AND username=&#39;".$username."&#39;"); ?>

Thanks Fabian Weber   


EDIT: FEHLER HERAUSGEFUNDEN!
« Letzte Änderung: 19.04.07, 20:42:22 von Fabian Weber »

« Eilt! Java läßt sich nicht installierenPasswort "speichern" »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Login/Logout
Als Login, beziehungsweise Logout wird das An- und Abmeldung vom Zugriff auf geschützte Daten oder Rechner bezeichnet. Diese Methode wird meistens genutzt um private...

PHP
PHP steht für Personal Home Page und ist eine Skriptsprache die meist verwendet wird zur dynamischen Erzeugen von Internetseiten. PHP zeichnet sich durch die weite D...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...