Avatar billede Slettet bruger
08. februar 2002 - 01:21 Der er 11 kommentarer og
1 løsning

Underligt...mit login system ikke case sensitive? What?

Jeg har følg. simplificerede kode:

<?php // login.php
include("db.php");
if ($status == 'logger_ind') {
$newpass = md5($password);
$sql = "SELECT * FROM profiler WHERE profilnavn = '$profilnavn' AND password = '$newpass'";
$result = mysql_query($sql);

if (mysql_num_rows($result) > 0) {
$tid = $row[oprettet];
$sql = "UPDATE profiler SET sidst_her = now(), oprettet = '$tid' WHERE profilnavn = '$profilnavn'";
echo "ok";
} else {
?>
<h3>Adgang n&aelig;gtet</h3>

forkert
<?PHP
}
} else {
?>
<h3>Login kr&aelig;vet</h3>
<p>Du skal v&aelig;re logget ind for at f&aring; adgang til denne del af sitet. Hvis du ikke allerede har oprettet en profil, s&aring; kan du <a href="opret_profil.php">g&oslash;re det her</a> og f&aring; &oslash;jeblikkelig adgang! <a href="fordele.php">Hvad er mine fordele?</a>
<p><form name="login2" method="get" action="test.php">
<input type="hidden" name="status" value="logger_ind">
<input type="hidden" name="side" value="<?PHP echo $side ?>">
<table cellspacing="0" cellpadding="2" border="0">
<tr>
    <td align="right" width="150">Profilnavn:</td>
    <td colspan="2"><input type="text" class="text" name="profilnavn" style="width: 147px" size="14"></td>
</tr>
<tr>
    <td width="150" align="right">Password:</td>
    <td colspan="2"><input type="password" class="text" name="password" style="width: 147px" size="14"></td>
</tr>
<tr>
    <td></td><td><input type="checkbox" class="check" name="gemlogin" onclick="return checkGemLogin2();"  value="ja"></td><td width="100%">Gem log ind</td>
</tr>
<tr>
    <td></td><td colspan="2"><input type="image" src="../../billeder/logind.gif" border="0" alt="Log ind"></td>
</tr>
</table>
</form>
<?php
}
?>

Den kan ses i aktion på www.divxit.dk/test.php

Jeg fatter minus af hvorfor, men jeg kan logge ind med mit brugernavn både med store og små bogstaver, bare passwordet er korrekt.
Avatar billede mygskys Nybegynder
08. februar 2002 - 01:57 #1
He-he... det er ikke din kode den er galt med. Jeg tror (jeg mener jeg kan huske) du skal sætte preferencen i SQL serveren. Jeg kan bare ikke lige hitte hvor?

mygskys
Avatar billede Slettet bruger
08. februar 2002 - 02:09 #2
mygskys> Det lyder fornuftigt, for når jeg kører queryen via PHPMyAdmin så giver det samme resultat uanset om det er store eller små bogstaver.

Jeg skriver til Azero i morgen og spørger hvad fanden de har gang i....det har også virket fint tidligere, men jeg tror de har opgraderet til en nyere version MySQL
Avatar billede a1a1 Novice
08. februar 2002 - 02:19 #3
er sql strengen forskellig???

(du md5 krypterer jo passwordet)
Avatar billede a1a1 Novice
08. februar 2002 - 02:35 #4
(naae password sku være rigtigt læser jeg lige ...:) )
Avatar billede morw Nybegynder
08. februar 2002 - 10:57 #5
Brug SELECT BINARY....
Avatar billede hathor Nybegynder
09. februar 2002 - 11:13 #6
Et problem ved at have et case sensitive login system er jo at folk kan oprette identiske brugere.

Hvilket hen af vejen kan give et problem hvis der er en fyr på dit message board som kalder sig Spassernar som er en helt flink fyr, og så en der kalder sig spassernar som er et røvhul uden lige.

Derfor bruger jeg i mit login system (der er case sensitive per default) det at jeg konverterer brugernavnet til lowercase inden jeg sender det til databasen. Hver gang jeg så skal udskrive brugernavnet konverterer jeg det så tilbage så begyndelses bogstavet er uppercase.
Avatar billede Slettet bruger
10. februar 2002 - 01:07 #7
morw> Hvad skal jeg bruge det til? Det er jo i WHERE sætningen det går galt...

MHT at folk kalder sig det samme tjekker jeg ved oprettelsen. Så hvis Mads er oprettet kan hverken mads, MADS eller mAdS oprettes.

Azero kunne ikke svare på en skid. De sendte min mail videre til den tekniske afdeling....
Avatar billede morw Nybegynder
10. februar 2002 - 15:31 #8
Hvorfor checker du ikke bare i php? Kan ikke se hvorfor det skal ske i mysql.

Ellers brug REGEXP:

SELECT * FROM profiler WHERE profilnavn REGEXP BINARY '$profilnavn' AND password REGEXP BINARY '$newpass';
Avatar billede morw Nybegynder
10. februar 2002 - 15:40 #9
Nå nu har jeg lavet en test og binary virker fint i where clausen:

SELECT id_c FROM mp_bruger_t where BINARY epost_c = 'mw@get2net.dk'

Finder bruger

SELECT id_c FROM mp_bruger_t where BINARY epost_c = 'MW@get2net.dk'

Finder ikke bruger

Du skal altså bare sætte BINARY foran:

$sql = "SELECT * FROM profiler WHERE BINARY profilnavn = '$profilnavn' AND BINARY password = '$newpass'";
Avatar billede morw Nybegynder
10. februar 2002 - 15:41 #10
og glem lige REGEXP. Det er et sikkerhedshul hvis folk sætter wildcards ind.
Avatar billede Slettet bruger
10. februar 2002 - 15:58 #11
morw> Nu virker det jo! Det lød ellers helt skævt i mine ører *G* Du har dælme fortjent dine point :)
Avatar billede morw Nybegynder
10. februar 2002 - 21:32 #12
Thanx ;-D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester