mahedelMedlem sedan juli 2002105 inlägg blir så trött... har kikat på massa inlägg men hittar inget som funkar.
kör webbservern på en linux burk. använder "varchar" på kolumnen.
sql-sats... none case sensitive... vill ju kunna blanda små och stora bokstäver vid en inloggning för att passa alla. för vissa användare reggar med små och stora bokstäver sen kanske dom loggar in med bara små eller stora så det blir fel i inloggningen...
fick ett tips om http://se.php.net/strcasecmp men det vill inte heller funka eller jag kanske gör fel när jag inplanterar "strcasecmp".
aja hoppas någon vet.
tack på förhand
/Martin
Det vore bra med lite kod men ja ja.
select * from TABELL where lcase(LÖSENORD) like LCASE('inksicka_lösenord')
I php kanske det skulle se ut så här:
$sql = "select * from TABELL where lcase(LÖSENORD) like LCASE('$password')"
Du kanske också vill använda dig av strtolower i php för att göra inskickade till lowercase.
$password = strtolower($password);
mahedelMedlem sedan juli 2002105 inlägg tänkte skicka lite kod
tänkte skicka lite kod så alla får sammanhanget.
index.php:
i index.php finns det en form som skickar anv namn och password ($login_user och $login_pass).
sen skickas allt vidare till loggain.php:
<?
@session_start();
@session_register("login_user");
@session_register("login_pass");
@$pass = md5($pass);
@$login_user = $user;
@$login_pass = $pass;
?>
<?
if (!$loggain)
echo "<title>Komjunity.net</title><link rel=\"stylesheet\"
href=\"style.css\"><table width=\"400\" border=\"1\" bordercolo
cellpadding=\"2\" cellspacing=\"2\" bgcolor=\"#FFFFFF\"><tr><td
bordercolor=\"#FFFFFF\" class=\"maintext\">Fel!<br><br><font
face=\"verdana\" size=\"1\">Inloggningen gick inte att
fullfölja...</font></td><tr><td
bordercolor=\"#FFFFFF\"><a href=\"index.html\">Försök
igen</a></td></tr></table>";
?>
<?
if($loggain){
if($user=="")
{
echo "<font face=\"verdana\" size=\"1\">Användarnamn saknas!<br><a href=\"index.html\">Tillbaka</a>";
}
else if($pass=="")
{
echo "<font face=\"verdana\" size=\"1\">Lösenord saknas!<br><a href=\"index.html\">Tillbaka</font>";
}
else
{
require(".login");
}
?>
<?
}
?>
.login:
<?require("db.php")?>
<html>
<head>
<title><?=$login_user?> försöker logga in på <?include("doman.php");?></title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<?
if($login=1) {
$open = mysql_connect("localhost", "$dbu", "$dbp");
$sql = mysql_db_query("filip", "SELECT * FROM mingla WHERE username = '$login_user'", $open);
$rad = mysql_fetch_array($sql);
if($login_user == $rad["username"] & $login_pass == $rad["password"]) {
//echo("Du loggas in...");
echo("<script language=JavaScript>");
echo("self.location.replace('start.php')");
echo("</script>");
}
else {
echo "<title>Komjunity.net</title><link rel=\"stylesheet\"
href=\"style.css\"><table width=\"400\" border=\"1\" bordercolo
cellpadding=\"2\" cellspacing=\"2\" bgcolor=\"#FFFFFF\"><tr><td
bordercolor=\"#FFFFFF\" class=\"maintext\">Fel!<br><br><font
face=\"verdana\" size=\"1\">Inloggningen gick inte att fullfölja...</font></td><tr><td
bordercolor=\"#FFFFFF\"><a href=\"index.html\">Försök igen</a></td></tr></table>";
}
?>
</body>
</html>
<?
}
?>
@ndersMedlem sedan juni 200032 969 inlägg I php kan du använda strtoupper() för att göra om en sträng till versaler. I MySQL heter motsvarigheten UCase(). Om du jämför inmatat värde konverterat till endast versaler med fältinnehållet konverterat på motsvarande sätt borde du alltså få en jämförelse som är icke skiftlägeskänslig.
Om jag var du skulle jag ha med både användarnamn och lösenord i WHERE-delen av frågan, och sedan bara kontrollera om den gav något svar eller inte. SQL-frågan kan se ut så här:
$sql = mysql_db_query("filip", "SELECT * FROM mingla WHERE UCase(username) = '" . strtoupper($login_user) ."' AND UCase (password) = '" . strtoupper($login_pass) . "'", $open);
Jag hoppas att jag fick dit strängkonkateneringarna rätt, jag använder egentligen inte vare sig php eller MySQL. :)
Mvh,
mahedelMedlem sedan juli 2002105 inlägg LÖSNINGEN!!!
man är tvungen att köra strtoupper() på den andra raden under mysql frågan för att det ska fungera bra.
raden:
if($login_user == $rad["username"] & $login_pass == $rad["password"]) {
ersattes med:
if(strtoupper($login_user) == strtoupper($rad["username"]) && $login_pass == $rad["password"]) {
sen för att åäö skulle funka så använder jag mig av:
$variabel_fran_user_input_ruta = str_replace("Å","å",$variabel_fran_user_input_ruta);
$variabel_fran_user_input_ruta = str_replace("Ä","ä",$variabel_fran_user_input_ruta);
$variabel_fran_user_input_ruta = str_replace("Ö","ö",$variabel_fran_user_input_ruta);
@ndersMedlem sedan juni 200032 969 inlägg Jag rekommenderar ändå att du gör jämförelsen i SQL-frågan.
mahedelMedlem sedan juli 2002105 inlägg mm...
men när jag provade det så blev resultatet som innan case-sensitive.
då bytte jag för jag fick ett tips av en på en irc-kanal att byta som jag skrev.
/Martin
@ndersMedlem sedan juni 200032 969 inlägg Re: mm...
mahedel skrev:
men när jag provade det så blev resultatet som innan case-sensitive.
Du provade alltså med mitt kodexempel ovan? Då kan jag inte för mitt liv förstå resultatet.
Fördelar med att göra jämförelsen i SQL-frågan:
* Mindre kod.
* Du sparar prestanda, eftersom du inte behöver loopa igenom ett resultatset och göra jämförelser på varje post.
* Du sparar nätverkstrafik eftersom du egentligen inte behöver skicka någon data tillbaka från MySQL-servern till webservern. Det räcker egentligen med SELECT 1 FROM... och kontrollera om du får något tillbaka.
Mvh