Yankes Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 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
Ernie Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 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 Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 (endret) Lagre mottakere med IDer og ikke brukernavn, så unnslipper en det problemet. Endret 5. februar 2009 av Jonas Lenke til kommentar
Wackamole Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 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.. Lenke til kommentar
Yankes Skrevet 4. februar 2009 Forfatter Del Skrevet 4. februar 2009 (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 4. februar 2009 av YaNkEs Lenke til kommentar
Wackamole Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 sjekk hva $_SESSION variabelen inneholder Lenke til kommentar
Yankes Skrevet 4. februar 2009 Forfatter Del Skrevet 4. februar 2009 Den inneholder brukernavnet sånn brukeren skrev det når han registrerte seg! altså med både store og små bokstaver.. Lenke til kommentar
Terrasque Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 prøv med "WHERE mottaker LIKE 'brukernavn';" like skal ikke være case sensitive. Lenke til kommentar
OIS Skrevet 4. februar 2009 Del Skrevet 4. februar 2009 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
Terrasque Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 Sant det, men mysql har ikke ilike, og jeg antar at han bruker mysql. Lenke til kommentar
ButterScotch Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 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. Lenke til kommentar
Wackamole Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 bare legge brukerid i en session variabel, evt. hashe (?) den for sikkerhet (?).. Lenke til kommentar
Thomas. Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 (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 5. februar 2009 av php_user Lenke til kommentar
Jonas Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 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
Ernie Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 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
Wackamole Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 @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.. Lenke til kommentar
Yankes Skrevet 5. februar 2009 Forfatter Del Skrevet 5. februar 2009 (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 5. februar 2009 av YaNkEs Lenke til kommentar
Thomas. Skrevet 5. februar 2009 Del Skrevet 5. februar 2009 EDIT: php_user, det er feil! kan lett få til dette om jeg bruker ID'en i stedet for brukernavnet. hva er problemet da? Lenke til kommentar
Yankes Skrevet 5. februar 2009 Forfatter Del Skrevet 5. februar 2009 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
Terrasque Skrevet 6. februar 2009 Del Skrevet 6. februar 2009 (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 6. februar 2009 av Terrasque Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå