Kleines Login Problem

EuroCent

Klappstuhl 2.0
Folgendes kleines Problem welches ich nicht zum beheben bekomme

Wenn jemand über das Login-Formular

Code:
$header
<if($error)>
<then>
<table class="tableborder" cellpadding="5" cellspacing="0" border="0" align="center">
<tr>
<td class="error" align="center"><span class="smallfont"><b>$error</b></span></td>
</tr>
</table><br />
</then>
</if>
<if($finish)>
<then>
<table class="tableborder" cellpadding="5" cellspacing="0" border="0" align="center" width="98%">
<tr>
<td class="finish" align="center"><span class="smallfont"><b>$finish</b></span></td>
</tr>
</table><br />
</then>
<else>
<form action="" method="post" enctype="multipart/form-data">
<table class="tableborder" cellpadding="3" cellspacing="1" border="0" align="center" width="59%">
<tr>
<td class="tabletitle" align="center"><span class="smallfont"><b>Einloggen?</b></span></td>
</tr>
<tr>
<td class="tablea">
<table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
<tr>
<td width="10%"><span class="smallfont"><b>Username:</b></span></td>
<td width="23%"><input class="input" type="text" value="" name="username" maxlength="100" /></td>
<td width="9%"><span class="smallfont"><b>Passwort:</b></span></td>
<td width="31%"><input class="input" type="password" value="" name="passwd" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="tableb" align="center"><span class="smallfont"><input class="input" type="submit" value="Einloggen" name="logged_send" /></span></td>
</tr>
</table>
</form><br />
</else>
</if>
$footer

Seinen Usernamen eingibt wird über prüft ob der Username a. existiert und ob das Passwort zum Username übereinstimmt

Das Funktioniert auch ganz gut

Nur muss der User exakt den Namen so schreiben wie er auch in der Datenbank gespeichert ist...

Wie kann ich es schaffen das er den eingegeben Username überprüft aber die Großschreibung/kleinschreibung dabei nicht beachtet?

hier der PHP-Code:

PHP:
<?php
session_start();
ob_start();

require("./lib/global.php");
$action = $_REQUEST['action'];

$sid = session_id();

if($action == '') {
if(!$userid) {
if(isset($_POST['logged_send'])){

$_SESSION['user'] = $_POST['username'];
$_SESSION['pass'] = md5($_POST['passwd']);

	if($_POST['username'] != '' && $_POST['passwd'] != ''){
		$sql_u = $db->query("SELECT * FROM mitglieder WHERE username='".htmlspecialchars($_POST['username'])."'");
			while($row = $db->fetch_array($sql_u)) {
				$username = $row['username'];
				$userpass = $row['userpass'];
			}
		if($_POST['username'] != $username) {
			$error = "Der eingegebene Username existiert nicht!";
		} elseif(md5($_POST['passwd']) != $userpass) {
			$error = "Passwort stimmt mit dem Usernamen nicht &uuml;berein!";
		} else {
			$finish = "Sie haben sich erfolgreich Eingeloggt!<br />";
			$finish .= "Sie werden jeden moment weitergeleitet!";
			$db->query("UPDATE mitglieder set usersess='".$sid."', online='1', lastlogin='".time()."', sesstime='".time()."', lastaction='".time()."' WHERE username='".addslashes($_POST['username'])."'");
			echo '<meta content="2 URL=./index.php?sid='.$sid.'" http-equiv="refresh" />';
		}
	} else {
	
		$error = "Die eingegebenen Daten sind nicht korrekt!";
		
	}

}

	eval("\$tpl->output(\"".$tpl->get("login")."\");");

} else {
	$finish = "Sie sind bereits eingeloggt!<br />";
	$finish .= "Sie werden jeden moment weitergeleitet";
	echo '<meta content="2 URL=./index.php?sid='.$sid.'" http-equiv="refresh" />';
	
	eval("\$tpl->output(\"".$tpl->get("login_error")."\");");
}
}
?>
 
Wenn das Feld nicht als binary markiert ist, prüft MySQL nicht auf Groß und Kleinschreibung.

Alternativ könntest du die SQL Funktion LOWER() benutzen:

SQL:
SELECT `id` FROM `table` WHERE lower(`name`) = lower('DEINE_VAR')
 
reicht es da nich wenn ich dieses angeben:

PHP:
<?php
$db->query("SELECT * FROM mitglieder WHERE username=lower('"..$username"') AND userpass=md5($userpass)");
?>
 
Sorry aber irgenwie steh ich aufm Schlauch...

Ich hab alles probiert mit lower()

Aber das funktioniert leider nicht...

Kann mir da jemand eventuell genauer sagen wie ich am besten das mache damit es richtig angezeigt wird?
 
reicht es da nich wenn ich dieses angeben:

PHP:
<?php
$db->query("SELECT * FROM mitglieder WHERE username=lower('"..$username"') AND userpass=md5($userpass)");
?>

PHP:
 <?php
$db->query("SELECT * FROM mitglieder WHERE username='".$username."' AND userpass='".md5($userpass)."'");
?>
reicht dir das als antwort ;)
 
Ja nee nicht wirklich

Ich möchte ja wenn ein User seinen Benutzernamen in klein schreibt aber sein Nick in der DB gross ist das er sich dennoch einloggen kann!

Das möchte ich bezwecken das heisst also das die Abfrage egal ob gross- oder Kleinschreibung vorkommt es einfach ignoriert
 
Hallo,

Im Prinzip wurde doch schon alles gesagt, musst es nur kombinieren:

PHP:
<?php
$db->query("SELECT * FROM mitglieder WHERE lower(username)=lower('" .htmlspecialchars($_POST['username'])."') AND userpass=md5($userpass)");
?>

So gehts nicht?

Markus
 
Hab ich doch auch schon gehabt

Nur bleibt das Problem das man den Namen exakt schreiben müsste was ich aber verhindern möchte... den es soll schliesslich egal sein wie man den namen schreib ob Gross oder Klein oder gar klein und Gross

Versteht ihr jetzt was ich will?

Es muss doch irgendwie möglich sein die Schreibweise zu ignorieren oder nicht?

Also es dann dennoch überprüfen ob der eingegebene Username richtig ist

Ich möchte lediglich nur wissen wie ich es schaffe das beim Input-Feld: username
egal ob man username oder Username oder gar UserName schreibt das die DB nur überprüft ob dieser Name vorhanden ist dabei soll er aber die GrossKlein schreibung nicht beachten sondern nur überprüfen ob es den Usernamen auch gibt
 
Hallo nochmal,

ich hab deine Aufgabenstellung schon verstanden..
Hast du dir mein SQL-Statement richtig angeschaut?
Genau das macht mein Statement. Er konvertiert den übergebenen Usernamen in Kleinbuchstaben, wie auch den Namen, der in der Spalte "username" in der Tabelle gespeichert ist..
Daher ist es sowohl egal, wie du deinen Usernamen eingibst (Gross/Klein/Gemischt) wie auch, ob der Username in der Datenbank in Gross/Klein oder gemischt geschrieben wird.

Kurzes Beispiel:

SQL:
CREATE TABLE usertest ( name VARCHAR(20) );

INSERT INTO userttest VALUES ('Dummy');

SELECT LOWER(name) FROM usertest; 

SELECT LOWER('DuMmY') FROM dual;

SELECT * FROM usertest WHERE LOWER(name) = LOWER('DUmMY');

Markus
 
Achso... okay.. dann hab ich dich missverstanden oder wollte es nicht richtig verstehen

Werd es jedenfalls testen

Danke dir/euch
 
Zurück