Abfragen Problem

EuroCent

Klappstuhl 2.0
Hab folgende Frage:

Bei meinem Login Formular gibt es ein glitze kleines Problemchen ^^

Ich möchte wenn ein User egal ob sein Name in der Datenbank Gross bzw. Klein geschrieben steht, sie einloggt das die POST überprüfung die gross klein schreibung nicht beachtet und somit mir keinen Fehler wie:

Passwort oder Username falsch aber dennoch eingeloggt bin

Beispiel:

User heisst: testuser

Nun möchte er sich per Formular einloggen schreibt aber alles Gross "TESTUSER" vermutlich Feststelltaste an :p

nun soll die POST-Variable $_Post['username'] in der Datenbank suchen aber dort weder die Gross noch die Kleinschreibung beachten damit der User keine Meldung erhält er habe sein Passwort oder Username falsch eingegeben aber dennoch eingeloggt

Wie kann man es realisieren?
Oder ist es überhaupt möglich dies zu realisieren?
 
Welches DBMS nutzt du? MySQL unterscheidet beispielsweise nur im Binärmodus zwischen Groß- und Kleinschreibung:
Code:
SELECT "foobar" = "FOOBAR";
SELECT BINARY "foobar" = "FOOBAR";
 
DBMS = Datenbankmanagementsystem, da du xampp installiert hast, wirst du wohl MySql haben.
Zeig uns mal den relevanten Code.

Wenn ich das richtig lese:
Code:
Passwort oder Username falsch eingegeben aber dennoch eingeloggt
funktioniert das Login, aber es kommt eine Meldung dass Username/Passwort falsch ist?
 
Ich meine welches Datenbanksystem du nutzt, etwa MySQL, PostgreSQL, SQLite, Oracle, etc. Bei XAMPP ist es MySQL.
 
Ich frage über MySQL ab in einer Funktion check_user($name, $pass) ob den der user in der Datenbank vorhanden ist wenn ja überprüfe Username und passwort mit den in der Datenbank

Hier mal der Teil aus der Functions.php

PHP:
<?php
function check_user($name, $pass) {

    $sql="SELECT userid
    FROM members
    WHERE username='".$name."' AND userpass=MD5('".$pass."') 
	LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $user=mysql_fetch_assoc($result);
        return $user['userid'];
    }
    else
        return false;
}

function logged_in() {

    $sql="SELECT userid
    FROM members
    WHERE usersess='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
      return ( mysql_num_rows($result)==1);
}

function getUserData($value) { 

    $sql="SELECT ".$value." 
    FROM members
    WHERE usersess='".session_id()."'
    LIMIT 1"; 
    $result= mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_array($result); 
     return $row[$value]; 
}
?>

Index.php Code-Abschnitt:

PHP:
<?php
if(isset($_POST['login'])) {
$userid=check_user($_POST['username'], $_POST['passwd']);
if ($userid!=false) {
login($userid);
}
}

if (!logged_in()) {
?>
<tr>
<td class="tablecat" align="center"><span class="normalfont"><b>Login</b></span></td>
</tr>
<!-- Login Formular Anfang -->
<tr>
<td class="tablea">
<form action="index.php?game=login" method="post" name="login">
<input name="userip" type="hidden" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />
<input name="usertime" type="hidden" value="<?php echo time(); ?>" />
<table cellpadding="1" cellspacing="0" border="0" width="100%">
<tr>
<td width="40%" align="right"><span class="smallfont"><b>General <img src="help.png" alt="Was bedeutet der Name &bdquo;General&rdquo;?" title="Was bedeutet der Name &bdquo;General&rdquo;?" onclick="fenster('index.php?tooltip=tooltip#general');" border="0" />:</b></span></td>
<td width="60%" align="left"><span id="username" class="smallfont">
<input type="text" name="username" value="" maxlength="50" class="input_login" /></span></td>
</tr>
<tr>
<td align="right"><span class="smallfont"><b>Passwort <img src="help.png" alt="F&uuml;r was ein &bdquo;Passwort&rdquo; eingeben?" title="F&uuml;r was ein &bdquo;Passwort&rdquo; eingeben?" onclick="fenster('index.php?tooltip=tooltip#password');" border="0" />:</b></span></td>
<td align="left"><span id="passwort" class="smallfont"><input type="password" name="passwd" value="" class="input_login" /></span></td>
</tr>
<?php
} else {
// Anderer Code
}
?>

Login.php Code:

PHP:
<?php
$pruefen = $db->query("SELECT * FROM members WHERE username='".htmlentities($_POST['username'])."'");
$row = $db->fetch_array($pruefen);

if(htmlentities($_POST['username']) == $row['username'] && md5($_POST['passwd']) == $row['userpass']) {
?>
<script type="text/javascript" language="javascript">
self.location.href='index.php';
</script>
<?php
} else {
?>
<table class="tableinborder" cellpadding="2" cellspacing="1" border="0" width="98%" align="center">
<tr>
<td class="tablecat" align="center"><span class="normalfont"><b>Login - Fehlgeschlagen:</b></span></td>
</tr>
<tr>
<td class="tableb" align="center" height="80"><span class="normalfont"><b>Passwort und/oder Username sind verkehrt bitte &Uuml;berpr&uuml;fe deine Angaben<br />Waren deine Angaben dennoch richtig bitte kontaktiere den Administrator der Seite!</b></span></td>
</tr>
</table>
<?php
}
?>
 
Hallo Lenox

Es ist im prinzip ganz einfach.
Also vergleichsoperator für den usernamen verwendest du einfach anstatt "=", "LIKE".

PHP:
$sql="SELECT userid
    FROM members
    WHERE username LIKE '".$name."' AND userpass=MD5('".$pass."') 
    LIMIT 1";


Grüße SimonErich
 
Hallo Lenox

Es ist im prinzip ganz einfach.
Also vergleichsoperator für den usernamen verwendest du einfach anstatt "=", "LIKE".

PHP:
$sql="SELECT userid
    FROM members
    WHERE username LIKE '".$name."' AND userpass=MD5('".$pass."') 
    LIMIT 1";


Grüße SimonErich

WHERE username LIKE($name)

so müsste es dann sein oder... irgendwie bekomm ich das nicht in meinem Kopf ich glaub ich sollte mal echt 12Stunden schlafen xDDD
 
Hallo Lenox

Nein lass einfach die Klammer weg aber mach ein Leerzeichen davor.
Mach einfach den ganz normalen String vertausch einfach nur "=" durch " LIKE ".
Also dann sollte es ungefähr so aussehen:_
PHP:
WHERE username LIKE '". mysql_real_escape_string($name) ."' ...

mysql_real_escape_string hab ich hier reingetan, damit dein Code vor SQL Injections geschützt ist!
 
Ich deutete bereits darauf hin, dass MySQL nur im Binärmodus zwischen Groß- und Kleinschreibung unterscheidet. Hier nun LIKE einzusetzen hat im Bezug auf Groß- und Kleinschreibung keine andere Wirkung als ein normaler Vergleich. Es wäre sogar eine Sicherheitslücke, da mit den Platzhalter % und _ ungenaue Suchen möglich sind.
 
Zurück