Gå til innhold

[Løst]Problem ved å kjenne igjen brukernavn


Anbefalte innlegg

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?

Lenke til kommentar
Videoannonse
Annonse

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.

Lenke til kommentar

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
Lenke til kommentar
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.

Lenke til kommentar

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.

Lenke til kommentar
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.

Lenke til kommentar

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
Lenke til kommentar
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.

Lenke til kommentar
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
Lenke til kommentar

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...