Avatar billede bmdk Nybegynder
30. juli 2009 - 19:16 Der er 15 kommentarer og
1 løsning

Problemer med loginsystem

Hey eksperter!

Jeg er i øjeblikket igang med at lave et loginsystem til et site. Det virker som sådan, men jeg har et enkelt problem: når jeg har logget ind og trykker på "Back" i browseren eller klikker på et link tilbage til index siden, så vises loginboksen igen.

I får lidt kode:

INDEX.PHP
---------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
<title>tabsamling.dk</title>
    <link rel="stylesheet" href="./css/stylesheet.css" type="text/css" />   
</head>
<body>
    <div id="sitecontainer">
        <div id="top">
            <?php include('inc/doLogin.php');    ?>

            <div id="menu">
                <a href="index.php">index</a>
                søg
                forum
                kontakt
                efterspørg tab   
            </div>
        </div>
    </div>
       
        <?php
        include('inc/createMember.php');
        ?>
</body>
</html>


DOLOGIN.PHP:
------------
<?php
if(isset($_POST['login_submit']))
{
    include_once('control/MainCtr.php');
    include('model/Member.php');   
    session_start();
    $mainCtr = MainCtr::getInstance();
    $memberCtr = $mainCtr->MemberCtr();
    $form_user = $_POST['username'];
    $form_pass = $_POST['password'];
   
    $memberObj = $memberCtr->loginCheck($form_user, $form_pass);
   
    if($memberObj != null) {
        $_SESSION['memberObj'] = $memberObj;
    } else {
        $_SESSION['memberObj'] = null;
    }
}
    if(isset($_SESSION['memberObj'])) {
        echo $_SESSION['memberObj']->getFirstname();
    } else {
        echo "
            <form name=\'login\" method=\"post\">
                <input type=\"text\" name=\"username\" value=\"test\" /><br />
                <input type=\"password\" name=\"password\" value=\"test\" /><br />
                <input type=\"submit\" name=\"login_submit\" value=\"login\" />
            </form>
            ";
    }
?>

Nogen der har et bud på, hvorfor den gør det?

På forhånd tak for hjælpen :)
Avatar billede showsource Seniormester
30. juli 2009 - 19:37 #1
Der er jo noget kode vi ikke ser, me nsom debug kan du jo prøve at bruge

print_r($_SESSION);

så får du nok en ide om hvad som går galt
Avatar billede bmdk Nybegynder
30. juli 2009 - 19:48 #2
hey showsource,

Ja, der er noget kode I ikke ser, men jeg er ihvertfald sikker på, at den kan smide et objekt tilbage fra DB'en :) det er testet. Men for en sikkerheds skyld skriver jeg lige det resterende kode nederst i denne post.

Jeg prøvede at bruge print_r($_SESSION); og fik dette tilbage:

Array ( [memberObj] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => Member [firstname:Member:private] => Bo [lastname:Member:private] => Mortensen [email:Member:private] => bomortensen [username:Member:private] => mail@bo-mortensen.dk [description:Member:private] => assda [instrument:Member:private] => dunno [homepage:Member:private] => dunno ) )

Eneste jeg kan se er, at den på mærkværdig vis bytter rundt på username og email ;)

Det resterende kode:

MemberCtr.php:
--------------

<?php
include('data/MemberDb.php');

class MemberCtr {

        private $memberDb;
       
        function __construct() {
            $this -> memberDb = new MemberDb();
        }
       
    function newMember($memberObj) {
        $this -> memberDb->createMember($memberObj);
    }
   
    function loginCheck($username, $password) {
        return $this -> memberDb->loginCheck($username, $password);
    }
 
}
?>

MemberDb.php:
----------------

<?php
include('DbConnect.php');

class MemberDb {

    function __construct() {}

function loginCheck($username, $password) {
        $result = mysql_query("SELECT * FROM member WHERE username = '$username' AND password = '$password'") or die(mysql_error());
        $num_rows = mysql_num_rows($result);
       
        if($num_rows == 1) {
            $memberData = mysql_fetch_row($result);
            $id = $memberData[0];
            $firstname = $memberData[1];
            $lastname = $memberData[2];
            $username = $memberData[3];
            $password = $memberData[4];
            $email = $memberData[5];
            $description = $memberData[6];
            $instrument = $memberData[7];
            $homepage = $memberData[8];
           
            $memberObj = new Member($firstname, $lastname, $email, $username, $description, $instrument, $homepage);       
        } else if ($num_rows != 1) {
            $memberObj = null;
        };
            return $memberObj;       
    }   
   
}

?>
Avatar billede bmdk Nybegynder
30. juli 2009 - 19:51 #3
... og for at undgå misforståelser:

Member constructoren:

    function __construct($firstname, $lastname, $email, $username, $description, $instrument, $homepage) {
        $this -> firstname = $firstname;
        $this -> lastname = $lastname;
        $this -> email = $email;
        $this -> username = $username;
        $this -> description = $description;
        $this -> instrument = $instrument;
        $this -> homepage = $homepage;
    }
Avatar billede showsource Seniormester
30. juli 2009 - 19:54 #4
Ja, nu er jeg ikke så meget til "class", men

[memberObj] => __PHP_Incomplete_Class Object ( ..............

fortæller vel at der er noget ged i koden ?
Avatar billede bmdk Nybegynder
30. juli 2009 - 19:56 #5
Det tror jeg du har ret i ;) men kan absolut ikke spotte hvor det går galt..
Avatar billede majbom Novice
30. juli 2009 - 20:00 #6
fra memberdb.php:

$instrument, $homepage);     
        } else if ($num_rows != 1) {
            $memberObj = null;
        };
            return $memberObj;     
    } 
   

der skal ikke være semikolon til sidst i linje 4 herover...
Avatar billede bmdk Nybegynder
30. juli 2009 - 20:06 #7
splazz,

Takker! det havde jeg ikke spottet :)

Det virker dog stadig ikke helt efter hensigten.. den tager stadig fejl af username og email.

Jeg prøvede lige at få fat i et member objekt direkte på index.php og den får de rigtige data ud.

Kode:

                    session_start();
                    include_once('control/MainCtr.php');
                    include('model/Member.php');
                   
                    $mainCtr = MainCtr::getInstance();
                    $memberCtr = $mainCtr->MemberCtr();
                   
                    $memberObj = $memberCtr->loginCheck("bomortensen", "m0rtensen");
                   
                    print_r($memberObj);


Output:
Member Object ( [firstname:Member:private] => Bo [lastname:Member:private] => Mortensen [email:Member:private] => mail@bo-mortensen.dk [username:Member:private] => bomortensen [description:Member:private] => assda [instrument:Member:private] => dunno [homepage:Member:private] => dunno )
Avatar billede bmdk Nybegynder
30. juli 2009 - 20:25 #8
O.k - har fået det til at fungere nu med, at email og username står rigtigt. Dvs objektet er "bygget" rigtigt op nu.

Mit problem er så bare stadig, at når man har trykket på login knappen og derefter trykker på index linket (der går til index.php), så kommer loginboksen frem igen!
Avatar billede bmdk Nybegynder
30. juli 2009 - 20:52 #9
Fik det til at virke! :) nogen af jer, der vil have point?
Avatar billede showsource Seniormester
30. juli 2009 - 20:57 #10
Ikke til mig, ihvertfald :O)
Avatar billede bmdk Nybegynder
30. juli 2009 - 21:05 #11
.. og dog! Får stadig fejlen:

Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;Member&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\wamp\www\index.php on line 15

Når jeg prøver at tilgå objektet på index med f.eks.:

echo $_SESSION['memberObj']->getFirstname();

Hvis jeg prøver med print_r($_SESSION['memberObj']);, så får jeg stadig de rigtig output, men med fejl:

__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => Member [firstname:Member:private] => Bo [lastname:Member:private] => Mortensen [email:Member:private] => mail@bo-mortensen.dk [username:Member:private] => bomortensen [description:Member:private] => assda [instrument:Member:private] => dunno [homepage:Member:private] => dunno )

anyone? :/
Avatar billede bmdk Nybegynder
30. juli 2009 - 21:11 #12
Fandt ud af det ;)

Skulle include member klassen FØR session_start() !
Avatar billede majbom Novice
30. juli 2009 - 21:27 #13
jeg springer også over, det var ikke dit problem jeg løste :)
det var bare en lille fejl
Avatar billede bmdk Nybegynder
30. juli 2009 - 22:24 #14
Helt i orden :) tak for hjælpen I to.
Avatar billede bmdk Nybegynder
30. juli 2009 - 22:24 #15
svar
Avatar billede majbom Novice
31. juli 2009 - 19:07 #16
selv tak :)
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