Vergleich zwischen Usereintrag und SQl Abfrage

airmexx

Grünschnabel
Hallo,

ich mache gerade ein "eigentlich" einfaches Login fenster.

Situation: Ich habe zwei eingabefelder für name und passwort
jetzt sollen diese beiden einträge mit der datenbank verglichen werden und wenn sie richtig sind steht drunter eingeloggt oder nicht

PHP:
<?php
$mysqlhost="localhost"; 
$mysqluser="patrick"; 
$mysqlpasswort="patrick";

$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpasswort);
$mysqldb="patrick"; // Datenbank heißt patrick

$db_sel = mysql_select_db($mysqldb, $connection);

error_reporting(E_ALL | E_STRICT);
if (!empty($_POST)){
	if (!empty($_POST['name']) && !empty($_POST['passwort'])){	
		$sqlname = "SELECT name FROM benutzer WHERE name =  " . $_POST['name'] . "";
		$ergebnisname = mysql_query($sqlname);		
		$sqlpw = "SELECT passwort FROM benutzer WHERE passwort =  " . $_POST['passwort'] . "";
		$ergebnispw = mysql_query($sqlpw);
			echo "mysql_result($ergebnisname)";
        if ($_POST['name'] == $ergebnisname && $_POST['passwort'] == $ergebnispw){ //Tippe mal das hier der Fehler sein wird
			echo "Du bist eingeloggt!";
		} else 	{	
			echo "Passwort oder Benutzername falsch!";
				}
	} else 	{
		echo "Bitte fuellen Sie alle Felder aus!";
			}        
 }
?>
 
Und was ist jetzt dein Problem/Anliegen?

Zu deinem Code:
Du machst zwei Abfragen, obwohl du eigentliche nur eine bräuchtest:
SQL:
SELECT name FROM benutzer WHERE name='name' AND passwort='passwort'
Allerdings solltest du unbedingt $_POST['...'] aus deinen SQL-Queries nehmen, denn sonst ist dein Skript sehr für SQL-Injections gefährdet. Siehe mein Tutorial: Sicherheit in PHP-Codes schaffen #3.

Was mir noch aufgefallen ist: Verschlüsselst du nicht dein Passwort? Eigentlich generiert man einen Hash vom Passwort und vergleicht es mit dem Hash in der Datenbank.
 
Erst einmal Danke...
Das mit dem SQL Query war bis jetzt faulheit gewesen und $_POST[] werde ich mal in eigene Variablen packen.

das problem ist das wenn ich jetzt bei der IF Abfrage die SQl mit dem dem Eingabewert vergleiche eine Fehlermeldung kommt oder er immer auf das "passwort oder benutzername falsch" springt

<php>error_reporting(E_ALL | E_STRICT);
if (!empty($_POST)){
if (!empty($_POST['name']) && !empty($_POST['passwort'])){
$name = $_POST['name'];
$passwort = $_POST['passwort'];
$sqlname = "SELECT name FROM benutzer WHERE name= " . $name . " AND passwort= " . $passwort . "";
$ergebnisname = mysql_query($sqlname);

if ($_POST['name'] == $ergebnisname){
} else {
echo "Passwort oder Benutzername falsch!";
}
} else {
echo "Bitte fuellen Sie alle Felder aus!";
}
}
?></php>
 
Ja du vergisst die Anführungszeichen im SQL-Query, so ist es richtig:
PHP:
$sqlname = "SELECT name FROM benutzer WHERE name='" . $name . "' AND passwort='" . $passwort . "' LIMIT 1";

Und wieso überprüfst du noch ob der Name im POST gleich dem vom SQL ist?
Außerdem gibt mysql_query nicht das erste Feld (bzw. Name) zurück!
Wenn das SQL-Query 1 Zeile zurückgibt, dann sind die Daten richtig, also:
PHP:
$sqlname = "SELECT name FROM benutzer WHERE name= " . $name . " AND passwort= " . $passwort . ""; 
$ergebnis = mysql_query($sqlname);	

if (mysql_num_rows($ergebnis) > 0)
{
  /* Daten richtig */
}
else
{
  /* Benutzername oder/und Passwort falsch! */
}
 
danke, es geht...
kannst mir noch mal in deinen worten das mysql_num_rows() erklären, ich hatte es
nämlich damit probiert ging leider nicht.

mysql_num_rows(): dieser befehl gibt die anzahl der datensätze an oder?
 
Ganz genau. Diese Funktion gibt die Anzahl der "selektierten" (SELECT) Datensätze zurück.
In unserem Fall gibt es nur einen Nutzer mit diesem Benutzernamen und diesem Passwort, also müssen wir lediglich überprüfen, ob [phpf]mysql_num_rows[/phpf] mehr als 0 zurückgibt (bzw. 1 ist).
 
Zurück