Avatar billede udvikler Nybegynder
04. februar 2006 - 18:29 Der er 32 kommentarer og
1 løsning

en funktion som ikke laver forskel på store og små bogstaver

jeg skal bruge en funktion til mit loginsystem som ikke laver forskel på store og små bogstaver. Jeg skal bruge det fordi at hvis en bruger fx opretter sig med et navn som starter med stort bogstav, og senere hen prøver at logge ind med lille forbogstav, så siger den forkert brugernavn og/eller kodeord.
Avatar billede Slettet bruger
04. februar 2006 - 18:39 #1
Det gør SQL ikke.
Avatar billede Slettet bruger
04. februar 2006 - 18:40 #2
Ellers er der eregi[1] osv osv

[1] www.php.net/eregi
Avatar billede udvikler Nybegynder
04. februar 2006 - 18:49 #3
Hvordan skal jeg så indsætte eregi i mit dokument?

- har nemlig kigget lidt på det, og kan sku ikke forstå det helt.
Avatar billede Slettet bruger
04. februar 2006 - 18:51 #4
Hvordan ser dit dokument ud?
Avatar billede gizmo-gizmo Nybegynder
04. februar 2006 - 18:58 #5
Når du gemmer (og henter) brugernavne og adgangskoder kan du evt. bare omdanne alle store bogstaver til små, fx:
$brugernavn = strtolower($brugernavn);
Avatar billede udvikler Nybegynder
04. februar 2006 - 19:04 #6
Jeg kom i tanke om det samme som gizmo skriver, så det er lige præcis det jeg har gjort. Men wicez svar var dog også godt, og virkede sikkert. Så derfor læg et svar, du var hurtigst ;-)
Avatar billede udvikler Nybegynder
04. februar 2006 - 19:05 #7
ups, du har jo allerede lagt et svar hehe, nå men det er accepteret!
Avatar billede Slettet bruger
04. februar 2006 - 19:10 #8
Tak for point :)

Din metode løser på ingen måde problemet - det omgår problemet. En bruger der skriver sit nick som Wicez, vil herefter kun logge ind med wicez (Dette gælder dog kun, hvis du ikke bruger det direkte i din SQL (SQL er case insensitive)). En hashing af kodeordet / brugernavnet vil dog ødelægge forholdet mellem store / små bogstaver, da disse behandles forskelligt heri.
Avatar billede udvikler Nybegynder
04. februar 2006 - 19:16 #9
jeg forstår ikke helt hvad du mener med det du sagde om hashing, men med hensyn til det med at det ikke løser problemet er det ikke rigtigt. Jeg gør sådan her:

hvis man opretter en bruger ved navn JeNs så bliver det rettet til jens og jeg gør brugeren opmærksom på det. Når man så logger ind, så er det lige meget om man skriver Jens,jens,JENS,jENS,jEnS eller hvad man nu skriver så bliver man logget ind som den korrekte bruger - nemlig jens. Hvad er der ukorrekt ved det? :-)

forresten så har jeg også altid hørt at når man arbejder med mysql så er det ikke case sensitive, men det er det åbenbart :S for den logger kun en ind hvis man har skrevet det PRÆCIS som det står i databasen.
Avatar billede Slettet bruger
04. februar 2006 - 19:55 #10
Når du så skal outputte dit brugernavn, bliver han vist som jens og ikke JeNs..

Og det er muligvis fordi du har hashet[1] dit kodeord.

[1] www.php.net/md5
Avatar billede udvikler Nybegynder
04. februar 2006 - 20:55 #11
det gør da heller ikke noget at man bliver outputtet som jens :-)
det er jo hele idéen med det næsten.. hehe
Avatar billede Slettet bruger
04. februar 2006 - 21:01 #12
Ok.. suit yourself.
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:03 #13
jamen er der en fejl i det jeg gør ?
Avatar billede Slettet bruger
04. februar 2006 - 21:28 #14
Hvis jeg generelt havde 1eE7sp3Ak som brugernavn(prøver at gætte mig til, hvad du laver for en hjemmeside :o)), ville jeg bestemt gerne have vist samme brugernavn på listen over brugere. Og som sagt: SQL er case-insensitive!
Avatar billede webstuff Nybegynder
04. februar 2006 - 21:28 #15
Jeg vil sige det er pænere at bruger ucwords(); i stedet for strtolower();
Men du skal stadig huske at bruge det både når du opretter og når du logger ind :-)
Avatar billede webstuff Nybegynder
04. februar 2006 - 21:28 #16
strtolower(); = gør alle bogstaver små
ucwords(); = gør det første bogstav stort og resten små :-)
Avatar billede Slettet bruger
04. februar 2006 - 21:31 #17
Ahh. Det er valgfrit, om du vil have case-in-/sensitive MySQL.
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:33 #18
jo men mit problem er at jeg ligesom wicez siger ved at sql/mysql er case-insensitive, men det tyder på at alt på min apache server siger at det ikke er.

Jeg er i et stort problem lige nu. Jeg er heller ikke glad for strtolower løsningen men altså... I mit tilfælde er sql case-sensitive.. det var det dog ikke før, og jeg har IKKE pillet ved php.ini eller andre php instillinger.. Hvad kan jeg så have gjort ?!
Avatar billede Slettet bruger
04. februar 2006 - 21:34 #19
webstuff det giver ingenlunde menig det du skriver.

og for det andet, leder du nok efter ucfirst(), da ucwords omdanner alle små forbogstaver store.

for det tredje, :), er den mest optimale - hvis man absolut vil genere sine besøgende - at smide en strtolower indeni: ucfirst(strtolower($foo));
Avatar billede Slettet bruger
04. februar 2006 - 21:34 #20
-aco- Du blander php og SQL sammen.. SQL er case-insensitive - php er meget følsom heroverfor. :)
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:34 #21
Hvordan gør man så at det er case-insensitive ? og forresten.. jeg bruger surftown som host, kan jeg godt ændre det personligt for mit site ? hvis ikke, er der så nogle som ved om deres instillinger for mysql er sat til case-insensitive ?
Avatar billede Slettet bruger
04. februar 2006 - 21:37 #22
Jeg ved ikke hvordan du ændrer det. Prøv at spørge google :)

Til gengæld ved jeg, at du sagtens kan sammenligne case-insensitive

SELECT id FROM users WHERE LOWER(username) = '". strtolower($_POST['username']) ."'"
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:38 #23
hvad er det lige præcis den SELECT gør ?
Avatar billede Slettet bruger
04. februar 2006 - 21:50 #24
Finder hvilke brugere der hedder det samme. Den omdanner strenge til små bogstaver, og derefter sammenligner $_POST['username'] (små bogstaver, også) med det nyomdannede felt i tabellen.
Avatar billede Slettet bruger
04. februar 2006 - 21:52 #25
dvs:

users.username = www.NoTenet.dK
$_POST['username'] www.nOteneT.Dk


SELECT id FROM users WHERE LOWER(NoTenet.dK (www.notenet.dk) = 'www.nOteneT.Dk (www.notenet.dk)'"
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:53 #26
aaah ok :)

Nu gælder det bare om at finde ud af hvordan man kan gøre mysql case-insensitive. Min ven google, fandt intet.
Avatar billede Slettet bruger
04. februar 2006 - 21:53 #27
Jamen brug dog min query. Den er der vel intet galt med? :)
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:55 #28
Hvor er jeg dog dum, jeg havde slet ikke indset at det løste alle mine problemer! :)

Tusinde tak skal du have, du har gjort et godt stykke arbejde!
Avatar billede Slettet bruger
04. februar 2006 - 21:55 #29
Selv tak. Jeg håber det kunne bruges. :)
Avatar billede udvikler Nybegynder
04. februar 2006 - 21:57 #30
Det kunne det helt sikkert ;)
Avatar billede fixxxer Nybegynder
05. februar 2006 - 10:50 #31
Nu har jeg ikke fulgt helt med, men hvis vi forestiller os at en bruger opretter sig:

INSERT INTO brugere SET brugernavn='JeNs';

Og når han senere skal logges ind:

SELECT brugernavn FROM brugere WHERE LOWER(brugernavn)=LOWER('$_POST['brugernavn']');

Så er problemet vel løst, og det hentede brugernavn er stadig formatteret korrekt?
Avatar billede fixxxer Nybegynder
05. februar 2006 - 10:52 #32
Jeg har ikke gået så meget op i sikkerhed og syntax i eksemplet, det skal blot illustrere min pointe.
Avatar billede Slettet bruger
05. februar 2006 - 17:42 #33
Ja. Det er hele idéen med det.. Det er ligegyldigt om du bruger php's eller SQL's strto-/lower funktion
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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