Avatar billede brugersolsort Nybegynder
06. august 2011 - 15:24 Der er 6 kommentarer

Login system vil bare ikke virke

Hej. Jeg har fået nogle brugere på min hjemmeside til at teste mit log in system. Desværre så virker det kun nogle gange.

Hvad kan fejlen være?

Her er filen, hvor man logger ind:

<?php include "database.php"; php?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ (...)
<html xmlns="http://www.w3.org/ (...)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="container">
    <div id="welcome">
        <h3>Log ind og start eventyret.</h3>
<br><br>
        <p><form action="login-ok.php" method="post">
Brugernavn: <input type="text" name="brugernavn"><br>
Dit kodeord: <input type="password" name="password"><br><br><br>
<input type="submit" name="login" value="Login">
</form></p>
                        <br /><br />
       
    </div>
                    </div>
    </body>
</html>


Og login-ok.php filen står der følgende:


<?php
session_start();

include "database.php"; php?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ (...)
<html xmlns="http://www.w3.org/ (...)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="container">
        <div id="welcome">
        <h3>Log ind</h3>
        <p><?php require("config.php"); // Variabler til mysql hentes

$brugernavn = $_POST['brugernavn'];
$password = $_POST['password'];


if(empty($brugernavn) OR empty($password)) {
    echo 'Et af felterne er tomme'; }   
    else { // Denne klamme starter alt script der udføres HVIS begge felter er udfyldte.

// Her åbnes for mysql-serveren og der logges ind med data fra config.php.
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db); // Der åbnes for databasen defineret i config.php.

 
$result_pw = mysql_query("select password from users where brugernavn = '$brugernavn'") or die (mysql_error());
$result_user = mysql_query("select brugernavn from users where password = '$password'") or die (mysql_error());


// Her sker det egentlige tjek om brugernavn og password er dem som står i databasen.
// Der oprettes først et array med de data vi fik fra mysql før.
$array_user = mysql_fetch_array($result_user); // Først et med brugernavn.
$array_pw = mysql_fetch_array($result_pw); // Og et med password.
// Her tjeckes så om både array med brugernavn og password indeholder data
// magen til dem skrevet i felterne i html-formen
// PASSWORD KONTROL
if($array_user['brugernavn'] == $brugernavn AND $array_pw['password'] == $password) {
  echo 'Korrekt password.'; // Brugernavn og password passede!!

$_SESSION['brugernavn'] = $_POST['brugernavn']; //AF rettelse
$_SESSION['password'] = $_POST['password']; //AF rettelse



} // Her lukker vi condition TRUE fra password kontrol

else { // Her starter condition FALSE på password kontrol
echo 'forkert password';
} // Her lukkes condition FALSE på password kontrol.

} php?>
</p>

           
                                <br /><br />
       
    </div>
                    </div>
    </body>
</html>


Og sådan tjekker jeg om en bruger er logget ind:

<?php session_start();

include "database.php"; php?>

<?php if(isset($_SESSION['brugernavn']) && isset($_SESSION['password'])){ ?>

bla bla bla html kode her


<?php }
else{
echo 'Denne side kræver login adgang'; } php?>


Hvad gør jeg forkert? :(
Avatar billede olebole Juniormester
06. august 2011 - 16:02 #1
<ole>

Prøv med en problembeskrivelse. Hvad betyder f.eks: "Desværre så virker det kun nogle gange."? Hvad sker der, når tingene ikke virker - og hvad sker der ikke?

*) Hvad gør de brugere, der har succes, helt præcist - og hvilken browser bruger de?
*) Hvad gør de brugere, der ikke har succes, helt præcist - og hvilken browser bruger de?
*) Er det samme brugernavn og password, de har forsøgt med - eller kan evt. specialtegn skabe problemer?
*) Har de, der ikke kan logge ind, været logget ind før?
*) osv, osv, osv

Jeg har ikke kikket din kode efter i sømmende, men da fejlen ikke opstår konsekvent, ligger den overvejende sandsynligt ikke i koden alene - hvis overhovedet.

/mvh
</bole>
Avatar billede erikjacobsen Ekspert
06. august 2011 - 21:15 #2
Du har et gevaldigt problem her:

$result_pw = mysql_query("select password from users where brugernavn = '$brugernavn'") or die (mysql_error());
$result_user = mysql_query("select brugernavn from users where password = '$password'") or die (mysql_error());

hvor du får herrens bøvl hvis 2 brugere har samme password. Forklar os (og dig selv) hvad det egentlig er du prøver på.

Desuden: du skal du ikke afslutte med php?

<?php include "database.php"; php?>

men bare

<?php include "database.php"; ?>

(og er iøvrigt enig med Ole, hvis man ser bort fra hans stavefejl)
Avatar billede Nicklas_ Nybegynder
06. august 2011 - 22:33 #3
Dit problem opstår formodentligt som erikjacobsen har beskrevet.

Gør evt. brug af
select * from users where brugernavn = $brugernavn AND password = $password
eller lignende.. Du kunne også bare selecte brugernavn, password i første omgang, men det er op til dig..
Avatar billede olebole Juniormester
06. august 2011 - 22:51 #4
Erik >> Du mener ikke, det sømmer sig at slå hovedet på sømmet, mens man kikker koden efter i sømmene?
Avatar billede erikjacobsen Ekspert
06. august 2011 - 23:03 #5
Som digteren siger, Ole: "Sø, det sømmmer af søl øver øngen". (Ups. Der overtrådte jeg vist 2.1.8)
Avatar billede olebole Juniormester
06. august 2011 - 23:12 #6
- og en klog mand, han var! Folk med talebesvær bør skrive - ikke blive sangere  :)
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