Antworten auf deine Fragen:
Neues Thema erstellen

Kleiner Fehler oder großer BockMist?

Messiahs

Aktives Mitglied

Hallo erst mal!
Ich selber bin gerade dabei PhP mit Hilfe von Büchern und dem Internet zu erlernen.

Ich bin gerade dabei eine Passwort Abfrage zu erstellen , jedoch scheitere ich anscheinend an einer Kleinigkeit
Hier mal der Code
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>
<body>
<form action="switch.php" method="post">
  Password
  <input type="text" name="pass">
  Benutzer
  <input type="text" name="benutzer">
  <input type="submit" name="senden" value="Senden">
</form>
<?php
;

mysql_connect("localhost", "root", "") or die("Es konnte keine Verbindung zur Datenbank hergestellt werden!");
mysql_select_db("test") or die("Keine Tabelle gefunden!");


if (isset($_POST['senden'])) {

  $user_name_db = htmlentities($_POST['benutzer']);
  $user_passwort_db = htmlentities($_POST['pass']);

  $user_daten_abfrage = mysql_query("SELECT * FROM login WHERE user_name = '$user_name_db' AND user_passwort = '$user_passwort_db'");

  if (mysql_num_rows($user_daten_abfrage) > '0') {
    include('erfolgreich.inc');
  } else {
    include('fehlgeschlagen.inc');
  }
}


if (isset($_POST["pass"]) && $user_passwort) == {
  echo ("Password Richtig");                   
} else {
  echo ("Password Falsch");
 }


?>
</body>
</html>

Das Abfragen des Benutzers und des Passwortes über einer Datenbank funzt alles Perfekt , jedoch möchte ich haben wenn jemand ein Falsches PAsswort oder Benutzername eingibt , ein echo ausgegeben wir mit dem Test , Passwort ist Falsch bzw Benutzer

Hier nochmal der Code auszug meine Problems

PHP:
if (isset($_POST["pass"]) && $user_passwort) == {
  echo ("Password Richtig");                   
} else {
  echo ("Password Falsch");
 }

Mein Gedankweg war der das ich durch if (isset($_POST["pass"]) && $user_passwort) == {
abgleiche ob das Textfeld das selbe Passwort drine steht wie in der Datenbank.

Ich weis es ist vll totaler quatsch wie ich das hier geschrieben habe , würde mich über Hilfe sehr freuen!
 

sokie

Mod | Web

AW: Kleiner Fehler oder großer BockMist?

ich verstehe nicht ganz, warum du das noch einmal überprüfst.
in $user_daten_abfrage ist doch schon enthalten, ob username und Passwort zusammenpassen.
nach der Logik der Abfrage liefert mysql_num_rows() ja entwerder eine eins,wenn unsername und passwort zusammen passen, und 0 wenn nicht(dein Else-Fall).
also wäre es doch am einfachsten, da echo "hier passt was nicht(user/pass)" auch im else-Teil der Überprüfung aus zugeben, oder es direkt in der fehlgeschlagen.inc zu tun.

eine Anmerkung zu den "inc" Dateien - ihre inhalte können, wenn man sie im Browser aufruft klartext gelesen werden (evtl. sicherheitsrelevant).
 

Messiahs

Aktives Mitglied

AW: Kleiner Fehler oder großer BockMist?

Ich verstehe schon was du meinst , ich möchte jedoch haben wenn jemand ein Falsches Pw eingibt auch die passende echo Meldung kommt.

Derzeit ist es ja so das ein Fehler kommt wenn eines der Beiden Falsch ist jedoch nicht gsagt werden kann was falsch ausgefüllt wurde.

Mfg
 

stroyer

Aktives Mitglied

AW: Kleiner Fehler oder großer BockMist?

Dann musst du eine extrige Datenbankabfrage machen; zB prüfen ob der Benutzername vorhanden ist; wenn ja muss das Passwort falsch sein.
 
L

Lenny20

Guest

AW: Kleiner Fehler oder großer BockMist?

Guten Morgen,

schau dir das mal an... Hab ein paar Kommentare dazu geschrieben, um den Gedankenweg besser zu folgen...

PHP:
<?php

mysql_connect("localhost", "root", "") or die("Es konnte keine Verbindung zur Datenbank hergestellt werden!");
mysql_select_db("test") or die("Keine Tabelle gefunden!");

if (isset($_POST['senden'])) {

  $user_name_db = htmlentities($_POST['benutzer']);
  $user_passwort_db = htmlentities($_POST['pass']);
    
  // Überprüfen, ob Username in Datenbank steht
  $res = mysql_query("SELECT * FROM login WHERE user_name = '$user_name_db'");
  
  // Falls keine Zeilen gefunden wird, Error ausgeben
  if (mysql_num_rows($res) != 1) {
    echo 'Username existiert nicht!';
    exit();
  }
  
  // Andernfalls Zeile mit Daten holen, 
  // um User Passwort mit DB Passwort zu vergleichen
  $row = mysql_fetch_assoc($res);
  
  // Falls Passwörter nicht übereinstiummen, Error ausgeben
  if($user_passwort_db != $row['user_passwort']) {
    echo 'Passwort falsch!';
    exit();
  }

  // Hier läuft das Script weiter, falls alles OK ist...

}

?>
Ich hoffe das hilft dir ein wenig weiter...

Gruß Lenny
 

LowkaZ

Half Life

AW: Kleiner Fehler oder großer BockMist?

Ich würde definitiv nicht angeben ob Passwort nicht stimmt,
denn dann hat ein *****er schon die Info, dass der Benutzer existiert und kann dann nach dem Passwort suchen.
 

lostboi

Nicht mehr ganz neu hier

AW: Kleiner Fehler oder großer BockMist?

PHP:
if (isset($_POST["pass"]) && $user_passwort) == {
  echo ("Password Richtig");                   
} else {
  echo ("Password Falsch");
 }

Hallo.
Auf den ersten Blick sehe ich hier erstmal "nur" einen Syntaktischen Fehler.
Du setzt das "==" hinter die schließende Klammer der Wahrheitsprüfung und vergleichst zudem nicht gegen einen Wert.

So sollte es gehen:

PHP:
if (isset($_POST["pass"]) && ($user_passwort != '')) {
  echo ("Password Richtig");                   
} else {
  echo ("Password Falsch");
 }
 

Meathor

Php/Mysql erfahrener

AW: Kleiner Fehler oder großer BockMist?

PHP:
$user_daten_abfrage = mysql_query("SELECT * FROM login WHERE user_name = '$user_name_db' AND user_passwort = '$user_passwort_db'");

  if (mysql_num_rows($user_daten_abfrage) > '0') {
    include('erfolgreich.inc');
  } else {
    include('fehlgeschlagen.inc');
  }
}


if (isset($_POST["pass"]) && $user_passwort) == {
  echo ("Password Richtig");                   
} else {
  echo ("Password Falsch");
 }


?>
</body>
</html>

PHP:
if (isset($_POST["pass"]) && $user_passwort) == {
  echo ("Password Richtig");                   
} else {
  echo ("Password Falsch");
 }
Mein Gedankweg war der das ich durch if (isset($_POST["pass"]) && $user_passwort) == {
abgleiche ob das Textfeld das selbe Passwort drine steht wie in der Datenbank.


OK... legen wir mal los

1.:

$user_daten_abfrage = mysql_query("SELECT * FROM login WHERE user_name = '$user_name_db' AND user_passwort = '$user_passwort_db'");

Man Fragt sicherheitshalber nur die Daten ab die man braucht... also:

$user_daten_abfrage = mysql_query("SELECT user_name, user_passwort
FROM login WHERE user_name = '$user_name_db' AND user_passwort = '$user_passwort_db'");

2.

Wie Lenny schon bemerkt hat Fehlt da was:

if (isset($_POST["pass"]) && $user_passwort) == {
echo ("Password Richtig");

Da soll mit der DB verglichen werden was aber nicht getan wird.... also musst du mit mysql_fetch_assoc erstlam die daten holen

3.

if (isset($_POST["pass"]) && $user_passwort) == {
echo ("Password Richtig");

Du hast da einen Vergleich Operator der mit nichts vergleicht.... daher kann das hier nicht funktionieren...
wie schon lostboi gesehen hat.

mfg
 

netbandit

Aktives Mitglied

AW: Kleiner Fehler oder großer BockMist?

nach der Logik der Abfrage liefert mysql_num_rows() ja entwerder eine eins,wenn unsername und passwort zusammen passen, und 0 wenn nicht(dein Else-Fall).

Nicht unbedingt; wenn mysql_num_rows beispielsweise 2,3 oder mehr liefert ist ein Login auch erfolgreich. Im schlimmsten Fall würde ich dann davon ausgehen, daß da manipuliert wurde.
Auf htmlentities alleine würde ich mich da nicht verlassen. Lieber mysql_real_escape_string (zusätzlich) benutzen. Und statt >0 lieber auf ==1 prüfen.

Und wie LowkaZ schon geschrieben hat; Meldungen ob ein Passwort passt oder nicht vereinfachen Hackversuche ungemein ;)

Alles andere wurde ja schon irgendwie geschrieben.
 

sokie

Mod | Web

AW: Kleiner Fehler oder großer BockMist?

???
ich verstehe die Antwort nicht. Ich bin eben nicht so sicher, was die Sache mit dem mysql_num_rows($user_daten_abfrage) angeht. Wie ich schon in #2 geschreiben hab, bin ich davon ausgegangen, dass dort allenfalls ein datensatz gefunden werden kann,der beide kriterien (also username und passwort) erfüllt, oder eben keinen, wenn die kombination der beiden nicht passt und/oder der username schon nicht existiert. - soweit mein eindruck dieser Sache. Nun kommst du und sagst es wären weitere Ergebnisse (zB 2,3...) möglich. wie kann so eine Sache zustande kommen?
 

netbandit

Aktives Mitglied

AW: Kleiner Fehler oder großer BockMist?

PHP:
<?php
  //angenommen die Daten kommen so unmaskiert per Eingabe (ist noch harmlos)
  $user_name_db = "' OR user_name!='xx";
  $user_passwort_db = "' OR user_passwort!='xx"; //


  $con = @mysql_connect('localhost','root','');
  $db  = @mysql_select_db('meinedb',$con);

  // meinedb enthält die Tabelle login mit zwei Datensätzen (user_name: user_passwort):
  // User_1 : IrgendeinPasswort
  // User_2 : 123Passwort321

  $sql = "SELECT * FROM login WHERE user_name = '$user_name_db' AND user_passwort = '$user_passwort_db'";
  $result=mysql_query($sql, $con);
  $max_rows=mysql_num_rows($result); // $max_rows -> 2


  $sql = "SELECT * FROM login WHERE user_name = '" . mysql_real_escape_string($user_name_db) . "' AND user_passwort = '" . mysql_real_escape_string($user_passwort_db) . "'";
  $result=mysql_query($sql, $con);
  $max_rows=mysql_num_rows($result); // $max_rows -> 0
?>

Im ersten Query wurden die Daten unmaskiert übernommen. Alle Datensätze deren Wert != xx ist werden auch berücksichtigt. In meinem Beispiel 2 Datensätze, ist also größer als 1
 

Meathor

Php/Mysql erfahrener

AW: Kleiner Fehler oder großer BockMist?

wobei bei tabellen wo ids verwendet werden auch ein doppel eintrag eines users möglich ist, wenn nicht vorher sorge getragen wurde das das nicht funktioniert...

also:

UID|NICK|PASS
1|ich|ich123
2|ich|ich123

wenn nun aber schon bei der planung der datenbank dieses Feld: NICK als UNIQUE Definiert werden keine daten angenommen die in diesem feld schon in einem anderen datensatz vorhanden sind!

erzeugt kann dieses zum beispiel so:

Code:
CREATE TABLE `test` (
 `UID` INT NOT NULL ,
 `NICK` VARCHAR NOT NULL ,
 `PASS` VARCHAR NOT NULL ,
 PRIMARY KEY ( `UID` ) ,
 UNIQUE (`NICK`));


mfg
 

Messiahs

Aktives Mitglied

AW: Kleiner Fehler oder großer BockMist?

Ich danke euch für die Tolle Hilfe , ich habe bereits einiges ab geändert und ausgebaut , mein Problem was ich in diesem Thred behandeln wollte ist bereits dank eurer Hilfe abgearbeitet, habe zwar einen etwas anderen Weg eingeschlagen aber die Ideen und Hilfen waren toll. Ich danke euch

Mfg
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben