Avatar billede internet Nybegynder
07. december 2007 - 16:06 Der er 9 kommentarer

md5 og check login

Hej Eksperter

Jeg har en login system, som jeg har upsat ud fra denne artikel:
http://www.eksperten.dk/artikler/669

Jeg har nu fået systemet udbygget så den en oprettelses script, der krypterer det indtastet password.

Mit spørgsmål er så, hvordan får jeg php til at tjekke om det password der bliver indtastet ved login, passer med det krypterede i databasen.

Jeg har prøvet med følgende kode:
if($row['kodeord'] == md5($_POST['kodeord'])

Men det virker ikke.

Emil
Avatar billede internet Nybegynder
07. december 2007 - 16:12 #1
Hvis det kan hjælpe ser den fulde kode for check.php sådan ud:

<?php
ob_start();
session_start();
require("includes/top.php");
?>


<?php
$link = mysql_connect("$server", "$user", "$password");
mysql_select_db("$database", $link);

//Tjekker om både brugernavn og kodeord er indtastet.
if(empty($_POST['brugernavn']) || empty($_POST['kodeord']))
{
//Sender brugeren tilbage til formular.htm ved brug af en header
header("location: login.php");
exit;
}
//Hvis både brugernavn og kodeord er sat, går vi videre.
else
{
/*
Her bruger vi databasen for første gang, idet vi nu tjekker om der er
en bruger der har det brugernavn, der er indtasetet i formularen.
Vi bruger or die(mysql_error()) til at få mysql til at udskrive en fejl,
hvis der er noget galt med databasekaldet.
*/
$query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_POST['brugernavn'] ."'") or die(mysql_error());
//Tjekker om der er én rækker i databasen der har det indtasetde brugernavn
//Dette gør dog, at flere brugere ikke må have samme brugernavn!
if(mysql_num_rows($query) == '1')
{
//Laver databasekaldet om til en liset (et array) i php.
$row = mysql_fetch_array($query);
//Tjekker om kodeordet i databasen er lig med det indtastede kodeord

if($row['kodeord'] == md5($_POST['kodeord'])
{
//Brugeren har indtastet rigtige oplysninger, nu skal han gemmes i sessioner
$_SESSION['brugernavn'] = $_POST['brugernavn'];
//Derudover skal han sendes til en hemlig side, hvorpå der bliver tjekket om han er logget ind
header("location: login.php");
}
else
{
//Brugeren har skrevet et forkert kodeord
//Sender brugeren tilbage til formular.htm ved brug af en header
header("location: login.php");
exit;
}
}
//Brugernavnet fandtes ikke i databasen, derfor skal der udskrives en fejl.
else
{
//Brugeren har skrevet et forkert brugernavn
//Sender brugeren tilbage til formular.htm ved brug af en header
header("location: login.php");
exit;
}
}
?>

<?php
ob_flush();
?>
Avatar billede erikjacobsen Ekspert
07. december 2007 - 16:18 #2
Du sender brugeren videre til login.php uanset om passwordet er testet korrekt eller ej. Det er en god måde at holde brugerne væk på.
Avatar billede internet Nybegynder
07. december 2007 - 16:34 #3
Jeg har lavet login.php om. Når brugeren er logget ind vil den pågældende bruger se en medlemsside. Hvis de ikke er logget ind, vil den pågældende få en login formular.
Avatar billede shjorth Nybegynder
07. december 2007 - 16:44 #4
if($row['kodeord'] == md5($_POST['kodeord'])

Skal da om ikke andet ændres til:

if($row['kodeord'] == md5($_POST['kodeord']))
Avatar billede internet Nybegynder
07. december 2007 - 16:51 #5
Jeg får nu følgende fejl, efter at have rettet koden som shjorth foreslog:

Parse error: syntax error, unexpected T_ELSE in /hsphere/local/home/onlineof/check.php on line 55
Avatar billede internet Nybegynder
07. december 2007 - 16:58 #6
Jeg får ingen fejl nu, men der sker tilgengæld ikke noget når jeg trykker på login:

Koden til check.php ser sådan ud:

<?php
ob_start();
session_start();
require("includes/top.php");
?>

<div id="preamble_big">
<h3><span>Login</span></h3>

<?php
$link = mysql_connect("$server", "$user", "$password");
mysql_select_db("$database", $link);

//Tjekker om både brugernavn og kodeord er indtastet.
if(empty($_POST['brugernavn']) || empty($_POST['kodeord']))
{
//Sender brugeren tilbage til formular.htm ved brug af en header
header("location: login.php");
exit;
}
//Hvis både brugernavn og kodeord er sat, går vi videre.
else
{
/*
Her bruger vi databasen for første gang, idet vi nu tjekker om der er
en bruger der har det brugernavn, der er indtasetet i formularen.
Vi bruger or die(mysql_error()) til at få mysql til at udskrive en fejl,
hvis der er noget galt med databasekaldet.
*/
$query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_POST['brugernavn'] ."'") or die(mysql_error());
//Tjekker om der er én rækker i databasen der har det indtasetde brugernavn
//Dette gør dog, at flere brugere ikke må have samme brugernavn!
if(mysql_num_rows($query) == '1')
{
//Laver databasekaldet om til en liset (et array) i php.
$row = mysql_fetch_array($query);
//Tjekker om kodeordet i databasen er lig med det indtastede kodeord

if($row['kodeord'] == md5($_POST['kodeord']))
{
//Brugeren har indtastet rigtige oplysninger, nu skal han gemmes i sessioner
$_SESSION['brugernavn'] = $_POST['brugernavn'];
//Derudover skal han sendes til en hemlig side, hvorpå der bliver tjekket om han er logget ind
header("location: login.php");
}
else
{
//Brugeren har skrevet et forkert kodeord
//Sender brugeren tilbage til formular.htm ved brug af en header
header("location: login.php");
exit;
}
}
//Brugernavnet fandtes ikke i databasen, derfor skal der udskrives en fejl.
else
{
//Brugeren har skrevet et forkert brugernavn
//Sender brugeren tilbage til formular.htm ved brug af en header
header("location: login.php");
exit;
}
}
?>



</div>

                   
    </div>

    <div id="supportingText">


<?php
require("includes/footer.php");
?>   

    </div>

   
           

<?php
require("includes/menu.php");
?>       




</div>

<!-- These extra divs/spans may be used as catch-alls to add extra imagery. -->

<div id="extraDiv1"><span></span></div><div id="extraDiv2"><span></span></div><div id="extraDiv3"><span></span></div>
<div id="extraDiv4"><span></span></div><div id="extraDiv5"><span></span></div><div id="extraDiv6"><span></span></div>

</body>
</html>
<?php
ob_flush();
?>
Avatar billede internet Nybegynder
07. december 2007 - 17:45 #7
Jeg har lavet et lille eksempel:

<?php

$kodeord = "1234";
echo md5(1234)

?>

<br/>

<?php
echo md5($kordeord)
?>

Det skulle efter min mening gerne give to ens kodeord, men jeg får to forskellige, se evt. http://emilchristiansen.dk/test.php

Jeg tror måske at det er det der er galt - at koden til at oprette bruger og koden til check login giver to forskellige kodeord.

Koden til create.php ser sådan ud:

<?


if ($_POST['bruger'] == "" AND $_POST['pass'] == "") {

        print("    <script language='javascript'>

        location.href='opret.php?fejl=1';

        </script>");

}



elseif ($_POST['bruger'] == "") {

       

    print("    <script language='javascript'>

        location.href='opret.php?fejl=2';

        </script>");

}



elseif ($_POST['pass'] == "") {

       

    print("    <script language='javascript'>

        location.href='opret.php?fejl=3';

        </script>");

}



else



{


$bruger = $_POST['bruger'];

$pass = $_POST['pass'];

$pass_kryp = md5($_POST['password']);

$login = "login";





mysql_connect("$server", "$user", "$password");

mysql_select_db("$database");

$query = "SELECT id, brugernavn, kodeord FROM brugere WHERE brugernavn = '".$bruger."'";

$result = mysql_query($query)or die("MySQL fejl: " . mysql_error());

$test = mysql_fetch_array($result);



if (isset($test['brugernavn'])) {

print("    <font face='verdana' size='2' color='#ff0000'>

        <br><b>Brugernavnet \"$bruger\" er allerede optaget

        v&aelig;lg venligst et andet.</b></font><br><br>

        <font face='verdana' size='2' color='#000000' text-decoration='none'>

        <a href='opret.php'>Tilbage</a></font>");

}

else

{

$sql = "INSERT INTO brugere (id, brugernavn, kodeord) VALUES ('', '$bruger', '$pass_kryp')";

mysql_query($sql);

print("    <font face='verdana' size='2' color='#669900'>

        <b>Bruger: $bruger <br>

        Password: $pass <br>

        Er nu oprettet </b></font><br>

        <font face='verdana' size='2' color='#000000' text-decoration='none'>

        <a href='login.php'>Login</a></font>");

                }

}   

?>

Kan i gennemskue hvad der er galt?
Avatar billede internet Nybegynder
07. december 2007 - 17:55 #8
Jeg har nu løst problemet.

Der var en noget galt med navnet på variablerne, så $kodeord i check var tom, og så virker scriptet ikke.
Avatar billede fant0mas Nybegynder
07. december 2007 - 17:55 #9
echo md5($kodeord) i eksemplet har du en tastefejl:
$kordeord
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