Gå til innhold

Problemer med login script


Anbefalte innlegg

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
Videoannonse
Annonse

$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 av kakkle
Lenke til kommentar

Sorry min feil....... Blingsa skikkelig på $row linja... :blush:

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

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 av Tha_Zaynt
Lenke til kommentar
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 av kakkle
Lenke til kommentar

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

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

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

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

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

@ 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 av kakkle
Lenke til kommentar

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

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

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 av Tha_Zaynt
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å
×
×
  • Opprett ny...