Avatar billede ny89 Nybegynder
05. november 2011 - 14:59 Der er 8 kommentarer og
1 løsning

Tjekke brugernavn og password

Hej,

Jeg har lavet følgende to script og mangler et script til at tjekke om mit login brugernavn og password er rigtigt.

Script users.php (oprettelse af brugere):
<?php // opret brugere
$DBhost = "localhost";
$DBuser = "";
$DBpass = "";
$DBname = "";
$table = "users";

$username = $_GET['username'];
$password = $_GET['password'];
mysql_connect($DBhost, $DBuser, $DBpass) or die ("Ingen forbindelse");
@mysql_select_db("") or die ("Fandt ikke DB");
$sqlquery = "INSERT INTO $table VALUES ('$username', '$password')";
$results = mysql_query("$sqlquery");
mysql_close();
?>



Script users.html (felter):
<html> <!-- Felter -->
<h3>shop.com</h3>
<b>Login</b><p>
<form action="xxxxx.php" method="GET"> <!-- Henvise til login siden -->
Username: <input type="text"  name="username" size="25"/>
Password: <input type="text"  name="password" size="25"/>
<input type="submit" value="login"/> <br> </p>
</form>

<b>Opret bruger </b>
<form action="users.php" method="GET">
Username: <input type="text"  name="username" size="25"/>
Password: <input type="text"  name="password" size="25"/>
<input type="submit" value="Opret bruger"/> <br> </p>
</form>
</html>

Nu mangler jeg et script til at tjekke mit login. Håber I kan hjælpe mig.
Avatar billede ny89 Nybegynder
05. november 2011 - 15:58 #1
Nogen der kan hjælpe ? :)
Avatar billede danco Nybegynder
05. november 2011 - 16:25 #2
For det første bør du kryptere passwordet i din database. Dette kan du gøre gennem PHP's egen sha1() eller md5().
Derudover fandt jeg lige en lille fejl i din kode, du skal ikke have anførselstegn omkring din variabel her:

$results = mysql_query("$sqlquery");
det skal derfor være:
$results = mysql_query($sqlquery);

Men selve login kan gøres på følgende måde.

$username = $_POST['username'];
$password = sha1($_POST['password']);

$sql = "SELECT id FROM users WHERE username='$username' AND pass='$password'";
$result = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($result) == 1) {
  // Login er korrekt
} else {
  // Login er ikke korrekt
}

Ovenstående kode er utestet men bør give dig en idé om fremgangsmåden.
Avatar billede Slettet bruger
05. november 2011 - 18:54 #3
Som danco er inde på, så bør du ikke gemme kodeordet i plain text, men som en hashcode. Eventuelt krydret med noget salt (et tilfældigt link om emnet her):
http://www.aspheute.com/english/20040105.asp

Husk også at sikre dig mod sql injections, ellers kan enhver logge på uden at kende brugernavn og password, og i værste fald lave rod i din database.
http://php.net/manual/en/function.mysql-real-escape-string.php
http://en.wikipedia.org/wiki/SQL_injection

Og hvis du har mulighed for det, så brug prepared statements (vha mysqli klasserne fra php).
http://php.net/manual/en/book.mysqli.php
http://en.wikipedia.org/wiki/Prepared_statement
Avatar billede ny89 Nybegynder
06. november 2011 - 09:15 #4
Undskyld det sene svar - blev forhindret.

Jeg har kigget på dit script og har ændret lidt. Når jeg kører det, kommer kommentaren "Fejl". Tror det er min sql, der er fejl i. Min tabel hedder users, som består af username og password.

<?php
$DBhost = "localhost";
$DBuser = "";
$DBpass = "";
$DBname = "";
$table = "users";

$username = $_GET['username'];
$password = sha1($_GET['password']);

mysql_connect($DBhost, $DBuser, $DBpass) or die ("Ingen forbindelse");

@mysql_select_db("") or die ("Fandt ikke DB");


$sql = "SELECT username FROM users WHERE username ='$username' AND password='$password'";
$result = mysql_query("$sql") or die (mysql_error());

if(mysql_num_rows("$result") == 1)
{
    echo ("Hej"); //login er korrekt
}
else
{
    echo ("Fejl");
}

?>
Avatar billede ny89 Nybegynder
06. november 2011 - 09:18 #5
Det går muligvis galt i sql og if(mysql_num_rows("$result") == 1) ???
Avatar billede ny89 Nybegynder
06. november 2011 - 09:56 #6
Tror jeg har fundet ud af det :)
Avatar billede danco Nybegynder
06. november 2011 - 13:03 #7
Der skal ihvertfald ikke "" rundt om $result eller $sql i din kode.
Avatar billede ny89 Nybegynder
06. november 2011 - 19:16 #8
Nej, præcis. det fandt jeg ud af til sidst. Smid et svar :)
Avatar billede danco Nybegynder
06. november 2011 - 19:22 #9
Du får et svar fra mig.
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
Computerworld tilbyder specialiserede kurser i database-management

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



IT-JOB

Banedanmark

Data Engineer

Cognizant Technology Solutions Denmark ApS

Senior Delivery Manager

Magasin

IT-projektleder

Udviklings- og Forenklingsstyrelsen

Tech Lead til Java-backend udviklingsteam