Tha_Zaynt Skrevet 17. februar 2005 Del Skrevet 17. februar 2005 Jeg har laget et loginscript til en lanside...det har gått fint frem til nå, men etter jeg la til noen mysql-spørringer så fungerer det ikke lenger. Når jeg skal logge meg inn, får jeg bare beskjeden: "Feil brukernavn eller passord! , zaynt, "kryptert passord"" jeg har lagt til brukernavn og det krypterte passordet bare for å debugge, men jeg ser ikke noen feil...både brukernavnet og det krypterte passordet stemmer over ens med det i databasen og $feil outputter ikke noe som helst. her er scriptet: <?php session_start(); include("config.php"); $link = mysql_connect($mySQLhost, $mySQLuser, $mySQLpass) or die("Could not connect: " . mysql_error()); mysql_select_db($mySQLdb); $brukernavn = strtolower($_POST['brukernavn']); $pass = md5($_POST['pass']); if(!$_POST['brukernavn']){ $feil = 1; echo"Du skrev ikke inn noe brukernavn!<br/>"; } if(!$_POST['pass']){ $feil = 1; echo"Du skrev ikke inn noe passord!<br/>"; } $q =("SELECT uid, passord FROM users WHERE brukernavn = '$brukernavn'"); $row = mysql_fetch_array(mysql_query($q)); if ($row['passord'] == $pass and $row['uid'] !=="" ){ $feil = 1; echo"Din konto er ikke aktivert!"; } if($row['passord'] == $pass and $row['uid'] == "") { if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES ('$brukernavn',NOW(),'$ip')")){ $_SESSION["bruker"] = $brukernavn; header("Location: http://nisselink.sjurvaage.com/minside/"); } if(mysql_affected_rows() < 1){ if(mysql_query("UPDATE logg SET dato = NOW(), ip = '$ip' WHERE brukernavn = '$brukernavn'")){ $_SESSION["bruker"] = $brukernavn; header("Location: http://nisselink.sjurvaage.com/minside/");}} } $q =("SELECT uid, passord FROM users WHERE brukernavn = '$brukernavn'"); $row = mysql_fetch_array(mysql_query($q)); if($feil != 1 || $brukernavn != $row['brukernavn'] || $pass != $row['passord']){ echo"Feil brukernavn eller passord! $feil, $brukernavn, $pass"; } ?> Lenke til kommentar
kakkle Skrevet 18. februar 2005 Del Skrevet 18. februar 2005 (endret) $q =("SELECT uid, passord FROM users WHERE brukernavn = '$brukernavn'"); $row = mysql_fetch_array(mysql_query($q)); Du mangler mysql_query her... f.eks: $q =("SELECT uid, passord FROM users WHERE brukernavn = '$brukernavn'"); $res = mysql_query($q) or die("FEIL: $q<br>".mysql_error()); $row = mysql_fetch_array(mysql_query($res)); EDIT: HEHEHE... Det er øynene man først blir blind på, ja... Endret 18. februar 2005 av kakkle Lenke til kommentar
Tha_Zaynt Skrevet 18. februar 2005 Forfatter Del Skrevet 18. februar 2005 det kan jo nesten ikke være den queryen som er feil siden jeg får til å hente fram innholdet i $row['passord'] Lenke til kommentar
kakkle Skrevet 18. februar 2005 Del Skrevet 18. februar 2005 (endret) Sorry min feil....... Blingsa skikkelig på $row linja... Er vel meg som ikke er helt vant med å se at det skrives i ett på den måten... Men en annen ting jeg ser av koden din, er at $feil kun blir definert dersom de en av de if setningene blir gjennomført... Har du kjørt en liten debug, og skrevet ut passord fra form og passord fra database og sjekket at det er likt ? Tror den siste if setningen din også blir litt feil, dersom du vil oppnå det jeg tror du vil oppnå: Dersom $feil ikke er 1(altså feil i form, eller ikke aktivert bruker), så skal if setningen kjøres, hvis passord er feil, skal if setning kjøres, hvis brukernavn er feil skal if setning kjøres... Det vil si at dersom de forrige if setningene ikke har gått igjennom, så vil denne kjøres... Du vil kanskje kjøre den hvis brukernavn og passord er feil OG feil er ulik 1 ? Eller har jeg misforstått ? Det blir i såfall slik, tror jeg: if($feil != 1 && ($brukernavn != $row['brukernavn'] || $pass != $row['passord'])){ echo"Feil brukernavn eller passord! $feil, $brukernavn, $pass"; } Endret 18. februar 2005 av kakkle Lenke til kommentar
Tha_Zaynt Skrevet 18. februar 2005 Forfatter Del Skrevet 18. februar 2005 du har forstått det riktig ja.. skal prøve koden din når jeg kommer hjem. Lenke til kommentar
Tha_Zaynt Skrevet 18. februar 2005 Forfatter Del Skrevet 18. februar 2005 (endret) jeg fant queryen som var feil...jeg hadde glemt å ta ut feltet brukernavn, men nå får jeg ikke noen feilmelding.. koden: <?php session_start(); include("config.php"); $link = mysql_connect($mySQLhost, $mySQLuser, $mySQLpass) or die("Could not connect: " . mysql_error()); mysql_select_db($mySQLdb); $bruker = strtolower($_POST['bruker']); $pass = md5($_POST['pass']); if(!$_POST['bruker']){ $feil = 1; echo"Du skrev ikke inn noe brukernavn!<br/>"; } if(!$_POST['pass']){ $feil = 1; echo"Du skrev ikke inn noe passord!<br/>"; } $q =("SELECT uid, passord FROM users WHERE brukernavn = '$bruker'"); $row = mysql_fetch_array(mysql_query($q)); if ($row['passord'] == $pass and $row['uid'] !=="" ){ $feil = 1; echo"Din konto er ikke aktivert!"; } if($row['passord'] == $pass and $row['uid'] == "") { if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES ('$bruker',NOW(),'$ip')")){ $_SESSION["brukernavn"] = $bruker; header("Location: http://nisselink.sjurvaage.com/minside/"); } if(mysql_affected_rows() < 1){ if(mysql_query("UPDATE logg SET dato = NOW(), ip = '$ip' WHERE brukernavn = '$bruker'")){ $_SESSION["brukernavn"] = $bruker; header("Location: http://nisselink.sjurvaage.com/minside/");}} } $q =("SELECT brukernavn, uid, passord FROM users WHERE brukernavn = '$bruker'"); $row = mysql_fetch_array(mysql_query($q)); if($feil != 1 && ($bruker != $row['brukernavn'] || $pass != $row['passord'])){ echo"Feil brukernavn eller passord! feil er lik $feil, $bruker og $row[brukernavn], $pass og $row[passord]"; } ?> Endret 18. februar 2005 av Tha_Zaynt Lenke til kommentar
kakkle Skrevet 18. februar 2005 Del Skrevet 18. februar 2005 (endret) jeg fant queryen som var feil...jeg hadde glemt å ta ut feltet brukernavn, men nå får jeg ikke noen feilmelding.. Er ikke det en fordel, da ? Eller funker det ikke som det skal ? Du bør alltid skrive ut en feilmelding med mysql_error() dersom en spørring går feil. F.eks: $q ="SELECT uid, passord FROM users WHERE brukernavn = '$bruker'"; $res = mysql_query($q) or die ("Det ble en feil i spørringen:<br>Spørring:$q<br>".mysql_error()); $row = mysql_fetch_array($res); Her får du også sjekket at sql spørringen blir slik du forventer at den skal være. F.eks kanskje $bruker er tom. Også får du ut hva mysql siter om feilen. Hva var det forresten du la til da det sluttet å fungere ? /kakkle EDIT: Småplukk... Endret 18. februar 2005 av kakkle Lenke til kommentar
The_PuNk Skrevet 18. februar 2005 Del Skrevet 18. februar 2005 (endret) ok, hehe kanskje litt dårlig forklart. Det funker fortsatt ikke, men nå får jeg ikke noen feilmelding. Skal sjekke mysql error når jeg komer hjem. Men jeg er sikker på at brukernavn, passord osv fungerer som det skal nå. EDIT: Oops var innlogget med en annen konto viste det seg Endret 18. februar 2005 av The_PuNk Lenke til kommentar
Tha_Zaynt Skrevet 18. februar 2005 Forfatter Del Skrevet 18. februar 2005 ok, nå har jeg funnet feilen, men hva netyr den? Det ble en feil i spørringen: Spørring:SELECT uid, passord FROM users WHERE brukernavn = 'zaynt' Duplicate entry 'zaynt' for key 2 Lenke til kommentar
kakkle Skrevet 18. februar 2005 Del Skrevet 18. februar 2005 (endret) Det betyr at brukernavn er satt til å være unik, og at det allerede er registrert brukernavnet zaynt, vil jeg tro... Det vil si at det nok er en feil i sjekken om brukernavn eksisterer. Det kan du fikse ved å telle antall rader som spørringer returnerer. Dersom den er større enn 0, finnes brukernavnet fra før: $q ="SELECT uid, passord FROM users WHERE brukernavn = '$bruker'"; $res = mysql_query($q) or die ("Det ble en feil i spørringen:<br>Spørring:$q<br>".mysql_error()); $finnes = mysql_num_rows($res); if($finnes > 0) { print "brukernavnet finnes fra før, velg et annet"; } else { $row = mysql_fetch_array($res); // og resten av koden som legger til ny bruker her. } Husk å avslutte denne else blokken på rett plass... Evt kan du avslutte dersom brukernavnet finnes på denne måten: [code] $q ="SELECT uid, passord FROM users WHERE brukernavn = '$bruker'"; $res = mysql_query($q) or die ("Det ble en feil i spørringen:<br>Spørring:$q<br>".mysql_error()); $finnes = mysql_num_rows($res); if($finnes > 0) { die("brukernavnet finnes fra før, vennligst trykk på tilbake knappen, og velg et annet"); } // og resten av koden som legger til ny bruker her. } EDIT :La til en 0 /Kakkle Endret 18. februar 2005 av kakkle Lenke til kommentar
Tha_Zaynt Skrevet 18. februar 2005 Forfatter Del Skrevet 18. februar 2005 men dette er jo ikke et registrerings-script...det er et login-script. Brukernavnet skal ikke skrives over...dessuten er det i en Select-spørring feilen oppstår og den gjør jo ikke annet enn å hente ut info. Brukernavnet er ikke satt til å være unik i tabellen users heller. Lenke til kommentar
kakkle Skrevet 20. februar 2005 Del Skrevet 20. februar 2005 (endret) kan du poste strukturen på mysql tabellen ? Feltnavn og type, evt attributter på feltene... ? Sikker på at ikke brukernavn er satt som primærnøkkel, da ? Lurer på om mysql kanskje sjekker primærnøkler og sånt ved hver spørring, kanskje ? Mener ihvertfall at den feilmeldingen betyr at et felt som er primærnøkkel har to verdier som er like /Kakkle Endret 20. februar 2005 av kakkle Lenke til kommentar
Tha_Zaynt Skrevet 21. februar 2005 Forfatter Del Skrevet 21. februar 2005 Dette er strukturen på tabellen logg: id smallint(4) UNSIGNED ZEROFILL Not null auto_increment (primary) brukernavn varchar(50) Not null (unique) tid datetime default:Yes NULL ipadresse varchar(50) Not null Lenke til kommentar
Torbjørn Skrevet 21. februar 2005 Del Skrevet 21. februar 2005 Jeg ser en INSERT der.. if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES ('$bruker',NOW(),'$ip')")){ $_SESSION["brukernavn"] = $bruker; hvorfor er det ikke den som gir duplicate key error? Lenke til kommentar
Tha_Zaynt Skrevet 21. februar 2005 Forfatter Del Skrevet 21. februar 2005 Jeg ser en INSERT der.. if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES ('$bruker',NOW(),'$ip')")){ $_SESSION["brukernavn"] = $bruker; hvorfor er det ikke den som gir duplicate key error? Det lurer jeg også på...det kan jo hende at det er her feilen ligger selv om den sier at det er i SELECT-spørringen. Ser noen feil i oppsettet da? Påenget er jo at den skal hoppe over INSERT'en hvis brukernavnet står der fra før, men det kan hende at feilmeldingen stopper det. Skriver jeg da bare en @ foran det hele hvis jeg vil stoppe feilmeldingen? slik?: @if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES ('$bruker',NOW(),'$ip')")){ Lenke til kommentar
kakkle Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 (endret) @ skal i tilfelle settes foran mysql_query... Jeg for min del liker ikke å gjøre dette... Jeg er for feilmeldinger... Har du evt prøvd med et annet brukernavn enn zaynt ? Og du burde vel kanskje kjøre en "or die"-sjekk på den insert queryen også.... evt. sette resultatet av spøøringen til en variabel, og teste om denne er sann eller ikke. dersom den ikke er sann, skriver du ut spørring og mysql_error() /kakkle EDIT: smågodt, eller plukk, kanskje... Endret 22. februar 2005 av kakkle Lenke til kommentar
Tha_Zaynt Skrevet 23. februar 2005 Forfatter Del Skrevet 23. februar 2005 skjønner ingenting jeg...nå får jeg denne feilmeldingen: Det ble en feil i spørringen: Spørring: SELECT uid, passord FROM users WHERE brukernavn = 'zaynt' Column count doesn't match value count at row 1 koden ser nå slik ut: <?php session_start(); include("config.php"); $link = mysql_connect($mySQLhost, $mySQLuser, $mySQLpass) or die("Could not connect: " . mysql_error()); mysql_select_db($mySQLdb); $bruker = strtolower($_POST['bruker']); $pass = md5($_POST['pass']); $ip = $REMOTE_ADDR; if(!$_POST['bruker']){ $feil = 1; echo"Du skrev ikke inn noe brukernavn!<br/>"; } if(!$_POST['pass']){ $feil = 1; echo"Du skrev ikke inn noe passord!<br/>"; } $q ="SELECT uid, passord FROM users WHERE brukernavn = '$bruker'"; $res = mysql_query($q) or die ("Det ble en feil i spørringen:<br>Spørring: $q<br>".mysql_error()); $row = mysql_fetch_array($res); if ($row['passord'] == $pass and $row['uid'] !=="" ){ $feil = 1; echo"Din konto er ikke aktivert!"; } if($row['passord'] == $pass and $row['uid'] == "") { if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES (NOW(),'$ip')") or die("Det ble en feil i spørringen:<br>Spørring: $q<br>".mysql_error())){ $_SESSION["bruker"] = $bruker; header("Location: http://nisselink.sjurvaage.com/minside/"); } if(mysql_affected_rows() < 1){ if(mysql_query("UPDATE logg SET dato = NOW(), ip = '$ip' WHERE brukernavn = '$bruker'") or die ("Det ble en feil i spørringen:<br/>Spørring: $q<br>".mysql_error())){ $_SESSION["bruker"] = $bruker; header("Location: http://nisselink.sjurvaage.com/minside/");}} } $q ="SELECT uid, passord FROM users WHERE brukernavn = '$bruker'"; $res = mysql_query($q) or die ("Det ble en feil i spørringen:<br>Spørring: $q<br/>".mysql_error()); $row = mysql_fetch_array($res); if($feil != 1 && $pass != $row['passord']){ echo"Feil passord! $feil, $bruker $row[brukernavn], $pass $row[passord]"; } else{ echo"Brukernavnet $bruker eksisterer ikke i vår database!"; } ?> Lenke til kommentar
Torbjørn Skrevet 23. februar 2005 Del Skrevet 23. februar 2005 argh. nå roter du fælt: if (mysql_query("INSERT INTO logg (brukernavn,tid,ipadresse) VALUES (NOW(),'$ip')") or die("Det ble en feil i spørringen:<br>Spørring: $q<br>".mysql_error())){ du skriver jo ikke ut spørringen som feiler ("INSERT..."), men istedet $q, som inneholder spørringen lenger oppe. Lenke til kommentar
Tha_Zaynt Skrevet 23. februar 2005 Forfatter Del Skrevet 23. februar 2005 (endret) ahhh....skjønner...brukte litt copy & paste der, men nå har jeg rettet opp i koden og fant feilen med INSERT'en. Men nå får jeg en ny feilmelding som jeg ikke skjønner... Spørring: INSERT INTO logg (brukernavn,tid,ipadresse) VALUES (zaynt,NOW(),'193.216.17.148') Unknown column 'zaynt' in 'field list' EDIT; Fant feilen, manglet en fnutt Endret 23. februar 2005 av Tha_Zaynt Lenke til kommentar
Tha_Zaynt Skrevet 23. februar 2005 Forfatter Del Skrevet 23. februar 2005 Men så kommer tusenkronersspørsmålet: Hvordan viser jeg hvem som har vært pålogget f.eks de 15min når jeg har lagret brukernavn, tid (datetime) og ipadressen ? 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å