Loginproblem

StefanR

Erfahrenes Mitglied
Hallo ich habe da ein kleines Problem, bei einem Loginscript.

Ich will mich via Username und Passwort (md5 verschlüsselt) anmelden, nur leider geht das nicht, der Username und das Passwort (md5) liegen in einer Datenbank.

Hier mal der SQL-String.
PHP:
if (isset($_REQUEST['login'])){
			$sql="SELECT userName, userPass FROM user WHERE userName='".$_REQUEST['username']."' AND userPass='".md5($_REQUEST['pass'])."' LIMIT 1";
			$result=mysql_query($sql)or die(mysql_error());
			if ($result==true){
				echo "super";
			}
			else {
				echo "Mist";
			}
		}
 
Mhh kommen denn irgendwelche Fehlermeldungen oder gibt "Mist" aus? Laut Code seh ich erstmal keine Fehler. Wird denn die Schleife laut if ($_REQUEST['login']) überhaupt ausgeführt?
 
Ich bin jetzt mal auf Fehlersuche gegangen und will die gefundenen Datensätze ausgeben, also wie viele es sind, logischerweise muss es ja einer sein, weil ich den SQL-String auf ein Suchergebniss begrenzt habe, aber es kommen 0 Ergebnisse.

Hier mal der Code
PHP:
if (isset($_REQUEST['login'])){
			$username=$_POST['username'];
			$password=$_POST['pass'];
			$sql="SELECT u_ID FROM user WHERE u_name='".$username."' AND u_pass=MD5('".$password."') LIMIT 1";
			$result=mysql_query($sql)or die(mysql_error());
			$row=mysql_num_rows($result);
			echo $row;
			echo $username, $password;
			
		}

edit: Ich habe einen Fehler bei der md5 Übergabe zum Passwort, aber welchen, ich kann keinen sehen.
 
Zuletzt bearbeitet:
Hallo Stefan!

Probier mal folgende Abfrage:
PHP:
<?
if (isset($_REQUEST['login'])){
            $username=$_POST['username'];
            $password=$_POST['pass'];
            $password2=MD5($password); 
            $sql="SELECT u_ID FROM user WHERE u_name='$username' AND u_pass='$password2') LIMIT 1";
            $result=mysql_query($sql)or die(mysql_error());
            $row=mysql_num_rows($result);
            echo $row;
            echo $username, $password;
            
        }
?>

Bin mir nicht ganz sicher.

mfg Hoizwurm
 
Ich check das einfach nicht, egal was ich mache es funktioniert zur Zeit einfach nicht. Ohne md5 funktioniert es, aber sobald ich den String mit md5-Verschlüsselung vergleichen will, geht es nicht mehr.
 
Hallo Stefan!

Weiß bei deinem Problem auch nicht weiter. Aber ich habe das Problem für
mich so gelöst. (Habe ich aus einem anderen Script raus):

PHP:
<?
//Meine Datenbankverbindung
require("connect.php");

// Abfrage ob in den Variablen was drin sonst zurück zum Start
if (!$user OR !$pass) {
	header("location: index.php");
	exit; }

//Abfrage aller Daten aus der Datenbank
@$outcome=mysql_query("SELECT * FROM users WHERE user='$user'");
require("failure.php");
$access=mysql_fetch_array($outcome);

//Prüfvariable setzen
$verify=0;

// Wenn Daten stimmen weiterleiten auf Admin Seite, 
// Loginzeit usw. in Login Tabelle speichern und Cookie setzen
// Prüfvariable auf 1 Setzen
if ($user==$access["user"] AND md5($pass)==$access["password"])
	{
	header("location: admin.php");
	@$outcome=mysql_query("SELECT * FROM login WHERE user='$user'");
	require("failure.php");
	$access2=mysql_fetch_array($outcome);
	if ($access2["user"]==$user)
		{
		@$outcome=mysql_query("DELETE FROM login WHERE user='$user'");
		require("failure.php");
		}
	$username=$access["user"]; $loginid=md5(uniqid($username));
	$currenttime=time();
	@$outcome=mysql_query("INSERT INTO login VALUES (NULL,'$username','$loginid','$currenttime')");
	require("failure.php");
	$currenttime=time()+$timeout;
	setcookie("session", $loginid, $currenttime); // cookie for setting user id
	setcookie("username", $username, $currenttime); // cookie for setting username
	$verify=1;
	}

// Wenn Prüfvariable 0 ist (Falsche Zugangsdaten)
if ($verify==0)
	{
	echo $textwarning[1];
	}
?>

Vielleicht hilfts dir weiter,

mfg Hoizwurm
 
Jetzt stellt sich noch die Frage wie du die Daten in der Datenbank speicherst ... ich hatte nämlich mal den Fall, dass folgende 2 Abfragen unterschiedliche Ergebnisse bringen:

PHP:
$sql = "INSERT INTO tabelle (MD5($password))";

PHP:
$sql = "INSERT INTO tabelle (".md5($password).")";

Keine Ahnung warum, aber die Methode MD5 hat unterschiedliche Ergebnisse geliefert. Vergleiche doch mal die Werte.
 
Ich hab meine Loginscripte immer nach diesem Muster hier aufgebaut:

PHP:
<?PHP
$result = mysql_query("SELECT * FROM s4f_member WHERE (nick = '$username16') AND (password = '$password16')");
$row = mysql_fetch_array($result);
if (mysql_num_rows ($result) > 0 && $row["aktiviert"] == 1) {
		echo "<center>Erfolgreich eingeloggt. Sie werden weitergeleitet...";
		$datenrichtig = true;
		$user_eingeloggt = true;
		$userid = $row["id"];
	}
elseif(mysql_num_rows ($result) > 0 && $row["aktiviert"] == 0) {
$datenrichtig = false;
$user_eingeloggt = false;
	echo "Ihr Account ist noch nicht aktiviert. Sollten sie keinen Aktivierungskey erhalten haben, kontaktieren sie bitte einen Administrator.<br>
	<a href=\"javascript:history.back()\">Back</a>";
}
else{
$datenrichtig = false;
$user_eingeloggt = false;
	echo "Falsches Passwort/Username, bitte versuche sie es erneut.<br>
	<a href=\"javascript:history.back()\">Back</a>";
}

if ($datenrichtig) {
  session_register ("userid"); ?>
  <meta http-equiv="Refresh" content="2; url=index.php?site=admin&<?=session_name()?>=<?=session_id()?>">
  <?php }
?>

mfg mAu
 
Zurück