Avatar billede sting666 Nybegynder
12. april 2009 - 18:23 Der er 14 kommentarer

Fejl i script

Hej er der nogle der mon kan spotte en fejl i dette script,når jeg logger ind bliver jeg konstant smidt tilbage, hvor der står forkert bruger og password, men jeg har selv lavet bruger og pass...og sat dem ind i databasen.

<?php
$host="localhost"; // Host navn
$username=""; // Mysql brugernavn
$password=""; // Mysql password
$db_name=""; // Database navn
$tbl_name="brugere"; // Tabel navn

// Forbind til server og vælg database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Brugernavn og password sendt fra formen (main_login.php).
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row tæller rækker i tabellen
$count=mysql_num_rows($result);
// Hvis der findes et match på $myusername og $mypassword, er antallet af rækker lig 1

if($count==1){
// Registrerer $myusername, $mypassword og redirecter til filen "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:members.php");
}
else {
echo "Forkert brugernavn eller password";
}
?>
Avatar billede erikjacobsen Ekspert
12. april 2009 - 18:32 #1
Det er alt for gammeldags at bruge session_register

Brug $_SESSION arrayet i stedet for. Og du behøver desuden ikke gemme password.
Avatar billede sting666 Nybegynder
12. april 2009 - 18:40 #2
Jeg er ikke så god endnu til php vil du skriver rettelsen ind
Avatar billede majbom Novice
12. april 2009 - 18:58 #3
if($count==1){
// Registrerer $myusername, $mypassword og redirecter til filen "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:members.php");
}

rettes til:

if($count==1){
// Registrerer $myusername, $mypassword og redirecter til filen "login_success.php"
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
header("location:members.php");
}

men hvorfor gemme koden i sessionen?
Avatar billede sting666 Nybegynder
12. april 2009 - 19:10 #4
Det er en kode jeg har hentet på nettet og som sagt er jeg relativ ny i php.

Desværre vises samme resultat
Avatar billede sting666 Nybegynder
12. april 2009 - 19:11 #5
Har du et login script på hylden, der virker?
Avatar billede majbom Novice
12. april 2009 - 19:26 #6
prøv at ret:

echo "Forkert brugernavn eller password";

til:

echo "Forkert brugernavn eller password ($count)";

og fortæl hvad den skriver i parantesen når du prøver at logge ind
Avatar billede sting666 Nybegynder
12. april 2009 - 20:06 #7
Får denne besked Forkert brugernavn eller password ()
Avatar billede majbom Novice
12. april 2009 - 20:36 #8
så finder den ikke din bruger i databasen...

men jeg ville nok gøre det lidt anderledes for at forhindre sql-injections:

i stedet for:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

ville jeg lave:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername'";
$result=mysql_query($sql) or die(mysql_error());

$count_username = mysql_count_rows($result);

if($count_username>0){
  $sql="SELECT * FROM $tbl_name WHERE password='$mypassword'";
  $result=mysql_query($sql) or die(mysql_error());

  $count_pw = mysql_count_rows($result);
 
  if($count_pw>0){
      session_start();
      $_SESSION['myusername'] = $myusername;
      $_SESSION['mypassword'] = $mypassword;
      header("location:members.php");
  }else{
      echo "koden er forkert";
  }
}else{
  echo "brugeren findes ikke";
}
Avatar billede erikjacobsen Ekspert
12. april 2009 - 20:46 #9
Det er dog den mest elendige kode, jeg længe har set, splazz. Du tillader at man logger ind blot man kender et brugernavn og et password, men uden at det nødvendigvis er passwordet til det anførte brugernavn. Den er simpelthen for langt ude.

sting666: hvordan ser hele koden ud, der udskriver "Forkert brugernavn eller password ()" ?

Hvad gør du så på siden "members.php" for at sikre man er logget ind?
Avatar billede majbom Novice
12. april 2009 - 20:56 #10
det er sq da osse en fejl jeg har lavet dér, tror jeg skal hoppe i seng...

det jeg gerne ville have skrevet var det skulle hente brugernavn og kode fra db hvor brugernavn stemmer med det indstastede og derefter tjekke om koden stemmer med det indtastede...

nat nat :s
Avatar billede sting666 Nybegynder
12. april 2009 - 20:57 #11
Kender du et sted hvor jeg kan hente et godt script. Jeg har efterhånden hentet mange der ikke dur. Jeg har min forside (index) der er der en login form som medlemmer  kun kan bruge. Når de bliver logget ind skal de ind på en anden side.
Avatar billede majbom Novice
12. april 2009 - 21:01 #12
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

ville jeg lave:

$sql="SELECT username, password FROM $tbl_name WHERE username='$myusername'";
$result=mysql_query($sql) or die(mysql_error());

$count = mysql_count_rows($result);

if($count>0){
  $db_pass = mysql_fetch_assoc($result);
  if($db_pass['password']==$mypassword){
      session_start();
      $_SESSION['myusername'] = $myusername;
      $_SESSION['mypassword'] = $mypassword;
      header("location:members.php");
  }else{
      echo "koden er forkert";
  }
}else{
  echo "brugeren findes ikke";
}

desuden ville jeg nok kryptere koden inden den gemmes i databasen.

bedre erik? :)
Avatar billede erikjacobsen Ekspert
12. april 2009 - 21:06 #13
Det giver en bestået karakter. Dit første forsøg må give -3 ;)

Men vi skal stadig finde ud af hvad der er galt. Har spørgeren læst hvad jeg spørger om i #9?
Avatar billede majbom Novice
04. november 2010 - 11:29 #14
kan vi lukke hér?
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