Avatar billede zyxep Nybegynder
14. september 2006 - 10:55 Der er 12 kommentarer

fejl ved login system (hjemmelavet)

Hey.

jeg har lavet et login system med sha krypteret password osv men når jeg skriver et brugernavn som findes går den stadig videre og siger "du er logget ind"

ved ikke hvad fejlen er håber i kan se den.

<?php
ob_start();
session_start();
require_once("includes/function.inc.php");

if($_POST["submit"])
{
  $password = SHA1($_POST["password"]);
  $username = $_POST["username"];
  $ok = true;
}
elseif($_COOKIE["username"])
{
  $username = $_COOKIE["username"];
  $password = SHA1($_COOKIE["password"]);
  $ok = true;
}
else
{
  header("LOCATION: index.php");
}

if($_POST["autologin"] == "on")
{
  setcookie("username", "$username",time()+3600);
  setcookie("password", "$password",time()+3600);
}

if($ok)
{
  $query = mysql_query("SELECT * from users where username = '$username' && password = '$password'") or die(mysql_error());
  if(!$query)
  {
    $message = "ugyldigt brugernavn";
  }
  else
  {
    if($row = mysql_fetch_array($query))
    {
      $dbpassword = $row["password"];
    }
    if(!$dbpassword == $password)
    {
      $message = "forkert kodeord";
    }
    elseif($dbpassword == $password)
    {
      $login = true;
    }
    $_SESSION["userinfo"] = $row;
    $_SESSION["aktiv"] = true;
    mysql_query("UPDATE users set online = '1' where id = '$row[id]'") or die(mysql_error());
    header("Location: index.php");
    }
}
?>
Avatar billede michael_stim Ekspert
14. september 2006 - 10:59 #1
if($row = mysql_fetch_array($query))
if($row == mysql_fetch_array($query))
Avatar billede coderdk Praktikant
14. september 2006 - 11:11 #2
michael_stim, Nej, jeg tror nu den er god nok, han tester om han kan hive en række ud ;)
Avatar billede coderdk Praktikant
14. september 2006 - 11:12 #3
if($dbpassword != $password)
Avatar billede coderdk Praktikant
14. september 2006 - 11:12 #4
og ikke if(!$dbpassword == $password)
Avatar billede zyxep Nybegynder
14. september 2006 - 11:15 #5
coderdk.

$query = mysql_query("SELECT * from users where username = '$username' && password = '$password'") or die(mysql_error());
  if(!$query)
  {
    $message = "ugyldigt brugernavn";
  }

den den ikke rigtig går igennem.. :S
Avatar billede coderdk Praktikant
14. september 2006 - 11:38 #6
skal && ikke være AND ?
Avatar billede Slettet bruger
14. september 2006 - 17:44 #7
Du kan begge dele.
Avatar billede michael_stim Ekspert
14. september 2006 - 22:33 #8
coldgate>>Ikke i SQL
Avatar billede coderdk Praktikant
15. september 2006 - 00:47 #9
Jo, den er god nok http://dev.mysql.com/doc/refman/4.1/en/logical-operators.html
Ved ikke rigtig om det er standard SQL - Men MySQL forstår det... Ville dog stadig bruge AND i SQL ;)
Avatar billede dkfire Nybegynder
15. september 2006 - 23:07 #10
Hvis jeg var dig, ville jeg tjekke om brugeren, ved submit, har udfyldt alle felter.

Før if($row = mysql_fetch_array($query)), prøv at tjekke hvor mange rækker din forespørgelse har fundet, du kan evt. skrive antalet ud under testfasen.

Du sætter dine to sessionvariabler, selvom et password måske ikke er rigtig, dette vil bevirke at en bruger vil være logget ind selv om han/hun skriver et forkert password.
Du skal nok sætte dem inde i elseif($dbpassword == $password) sætningen hvor du tjekker om der er tastet et rigtig kodeord. Noget ala:

else
  {
    if($row = mysql_fetch_array($query))
    {
      $dbpassword = $row["password"];
    }
    if(!$dbpassword == $password)
    {
      $message = "forkert kodeord";
    }
    elseif($dbpassword == $password)
    {
      $login = true;
      $_SESSION["userinfo"] = $row;
      $_SESSION["aktiv"] = true;
      mysql_query("UPDATE users set online = '1' where id = '$row[id]'") or die(mysql_error());
    }

    header("Location: index.php");
    }

Håber det hjælper.
Avatar billede zyxep Nybegynder
16. september 2006 - 11:35 #11
dkfire..

fik hjælp af en i min skole med mit login system..

det ser nu sådan her ud.

if(isset($_POST["submit"]))
{
  $password = SHA1($_POST["password"]);
  $username = $_POST["username"];
  $query = mysql_query("SELECT * FROM users WHERE username = '" . $username . "'") or die(mysql_error());
  if(mysql_num_rows($query) == 0)
  {
    $message1 = "ugyldigt brugernavn";
  }
  elseif($row = mysql_fetch_array($query))
  {
  $dbpassword = $row["password"];
  if($dbpassword != $password)
  {
    $message2 = "forkert kodeord";
  }
  elseif($dbpassword == $password)
  {
    if($_POST["autologin"] == "on")
    {
    setcookie("username", "$username",time()+3600);
    setcookie("password", "$password",time()+3600);
    }
    $_SESSION["userinfo"] = $row;
    $_SESSION["aktiv"] = true;
    mysql_query("UPDATE users set online = '1' where id = '$row[id]'") or die(mysql_error());
    header("Location: index.php");
  }
  }
}

men jeg kan ikke lige gennemskue det med autologin har jo den if sætning med det og den vil virke hvis man tryker på checkfeltet..

men jeg har ikke helt gennemskuet det med cookiesne hvordan jeg skal bruge dem.. skal jo lave noget "checklogin" med både sessions og cookies..
Avatar billede Slettet bruger
17. september 2006 - 12:30 #12
michael_stim> Jo i mySQL kan du godt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester