Gå til innhold

[Løst]Problem ved å kjenne igjen brukernavn


Anbefalte innlegg

Skrevet

Heisann, har et lite problem her, og er ikke helt sikker på hvordan jeg skal løse dette..

 

Jeg har laget en meldingsfunksjon på min side.

og har en input der folk skriver inn brukernavnet til den de vil sende melding til, men problemet er forskjellen på store og små bokstaver..

 

Si en kaller seg aBc, og noen skriver abc i inputen, meldingen blir da lagt inn i databasen med mottaker abc.

 

når meldingen da blir hentet ut med SELECT * FROM meldinger WHERE mottaker='".$_SESSION['brukernavn']."', så kommer ikke meldingen opp siden $_SESSION['brukernavn'] er aBc.

 

Så det jeg lurer på er egentlig hvordan jeg kan løse dette så brukerene slipper å skille mellom små og store bokstaver?

Videoannonse
Annonse
Skrevet

Godt spørsmål. = er pr. default ikke «case sensitive», ergo spørringen skal fungere som den skal med mindre du behandler resultatet «case sensitivt». Dog, du vil få det problem hvis dataene er UTF-8 og tilkoblingen ikke benytter UTF-8 samtidig som brukernavnet inneholder særnorske bokstaver.

Skrevet

jeg har et spm. hvis brukernavn aBc er lagret i databasen, og man kjører "SELECT id WHERE username = 'abc'";

 

vil det funke? - jeg spør fordi jeg er usikker på om sql'en/databasen er case sensitive..

Skrevet (endret)

Jonas: ja det er en mulighet :)

 

Ernie: om du mener collation i databasen så er den latin1_swedish_ci, men hva mener du med om tilkoblingen benytter UTF-8?

 

EDIT: men på f.eks. brukerinnloggingen så funker det jo fint, brukernavnet mitt der er jo Yankes. Selvom jeg skriver yankes så blir jeg jo logget inn. Funkerer jo på samme måten der. SELECT * FROM brukere WHERE brukernavn='".$_POST['brukernavn']."'

 

EDIT2: det virker som om det ikke funker når jeg skal hente ut noe som er lik en $_SESSION. Da klarer den ikke å skille mellom store og små bokstaver, men den gjør jo det når jeg henter ut noe som er lik en $_POST. hmmm

Endret av YaNkEs
Skrevet

Den inneholder brukernavnet sånn brukeren skrev det når han registrerte seg!

altså med både store og små bokstaver..

Skrevet
prøv med "WHERE mottaker LIKE 'brukernavn';"

 

like skal ikke være case sensitive.

like er ikke case-sensitive i mysql, men er det i postgresql der du kan bruke ilike for case-insensitive.

lower() er lik for begge databasene.

Skrevet

Ville ha tatt Jonas på ordet og referert til brukere på id, så slipper du masse styr.

 

Gjør det også enklere med tanke på å registrere to forskjellige bruker som heter abc og aBc, som du kanskje ikke har tatt høyde for under registrering.

Skrevet (endret)
Lagre mottakere med IDer og ikke brukernavn, så unnslipper en det problemet.

 

Nei det gjør han da absolutt ikke?

Han må jo SELECT (id) FROM brukere WHERE bruker = 'input'

 

Som ha sa, det fungerte ikke.

Endret av php_user
Skrevet

php_user, slutt å uttal deg om ting du ikke har peiling på. For å linke innhold opp mot brukere så bruker man alltid en tall-id knyttet opp mot et brukernavn. Noe annet er simpelthen dårlig praksis og helt uakseptabelt. Å sammenligne tekster i MySQL er i utgangspunktet ikke case-sensitivt, så dette funker absolutt. Om han sier det ikke fungere, så har han gjort noe feil.

Skrevet
jeg har et spm. hvis brukernavn aBc er lagret i databasen, og man kjører "SELECT id WHERE username = 'abc'";

 

vil det funke? - jeg spør fordi jeg er usikker på om sql'en/databasen er case sensitive..

Det skal i utgangspunktet fungere ja.

 

 

Ernie: om du mener collation i databasen så er den latin1_swedish_ci, men hva mener du med om tilkoblingen benytter UTF-8?

Nja, det er ikke direkte det jeg mener. Det jeg skal frem til er at du vil få problemer med store/små særnorske bokstaver (strengt tatt alle bokstaver utover A-Z) slik du beskriver hvis dataene inn er UTF-8, samtidig som du ikke har tatt hensyn til dette ved lagring og har lagret det som ISO-8891-1/latin1. Dvs. hvis du får inn brukernavnet som UTF-8 og tilkoblingen er som standard (ikke kjørt noe ala. SET NAMES) vil jeg anta du får de problemene du beskriver, men dog bare med brukernavn som inneholder særnorske bokstaver. Gjelder ditt problem også de uten særnorske bokstaver kan du se bort fra det.

Skrevet

@PHP_user, han henter jo ut brukernavn og legger det i session ved innloggning, hvorfor kan han ikke gjøre det samme med id?

 

Som sagt flere ganger, og hente ut unik bruker id er veien og gå, for og sammenligne id oppmot brukernavn..

Skrevet (endret)

For det første; ja, jeg bruker MySQL

 

For det andre; Ernie, problemet mitt gjelder alle bokstaver, har ikke testet dette med æøå o.s.v. Jeg har testet det med mitt brukernavn "Yankes" og om jeg skriver "yankes", finner ikke scriptet meldingen.

 

For det tredje; jeg lagerer selvfølgelig alle brukerene med en BrukerID, men har ikke laget noen session med ID'ene, men jeg har lagret brukernavn i session, så jeg bruker det til å hente ut ting.

 

Så jeg kan jo bytte om og legge til ID i en session, og bruke det istedet..

Men uansett så hadde det vært kjekt med et svar på dette problemet, tilfelle jeg skulle møte på det igjen.

 

Men jeg synes det er merkelig som jeg skrev over her, når jeg henter ting via $_POST så går det helt fint selvom det er store eller små bokstaver, men når jeg henter ting via $_SESSION så går det ikke. Hvorfor skjer det?

 

EDIT: php_user, det er feil! kan lett få til dette om jeg bruker ID'en i stedet for brukernavnet.

Endret av YaNkEs
Skrevet
EDIT: php_user, det er feil! kan lett få til dette om jeg bruker ID'en i stedet for brukernavnet.

 

hva er problemet da?

 

Problemet er for det første at jeg ikke tenkte på det før Jonas nevnte det.

Og for det andre så vil jeg fortsatt ha et svar på problemet om jeg skulle møte på det seinere en gang.

Skrevet (endret)
php_user, slutt å uttal deg om ting du ikke har peiling på. For å linke innhold opp mot brukere så bruker man alltid en tall-id knyttet opp mot et brukernavn. Noe annet er simpelthen dårlig praksis og helt uakseptabelt. Å sammenligne tekster i MySQL er i utgangspunktet ikke case-sensitivt, så dette funker absolutt. Om han sier det ikke fungere, så har han gjort noe feil.

 

Man flytter bare problemet, egentlig. En eller gang må navnet brukeren skriver inn sjekkes om det eksisterer i databasen. Nå, det er mer logisk å gjøre det når man sender melding, så sender vet det er riktig skrevet, men er i bunn og grunn samme problem.

 

visual name <-> id konventering har samme problemstillingen. Om du ikke vil at det bare skal kunne sendes melding via linker, eller at brukeren skal memorisere id'er..

Endret av Terrasque

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...