Avatar billede webstuff Nybegynder
09. oktober 2006 - 11:39 Der er 8 kommentarer og
1 løsning

Begynder spørgsmål om klasser

Hejsa allesammen

Jeg tænkte det var ved at være på tid jeg begyndte at lære noget om klasser.
Så jeg ville prøve at lave et lille simpelt loginsystem.
Jeg har denne kode:

Comm.php (Min klasse)
----------------------------
<?
class Comm{
    var $user_r, $pass_r;

    function Comm($user, $pass)
    {
        $this->user_r = "hej";
        $this->pass_r = "hej";
    }

    function login($user, $pass)
    {
        if($user == $this-user_r && $pass == $this->user_r)
        {
            $_SESSION["user"] = $this->user_r;
            $_SESSION["pass"] = $this-pass_r;
        }
    }
}
?>
----------------------------

Og denne kode: (index.php)
----------------------------
<?
session_start();
include("Comm.php");

if($_GET["submit"] == "yes")
{
    if($Comm->login($_POST["user"], $_POST["pass"]))
    {
        echo "User: ".$_SESSION["user"]."<br />";
        echo "Pass: ".$_SESSION["pass"]."<br />";
    }
    else
    {
        echo "Forkert!";
    }
}
else
{
?>


    <form action="?submit=yes" method="post">
    <input type="text" name="user">
    <input type="text" name="pass">
    <input type="submit" value="Login">
    </form>

<?
}
?>
----------------------------

Og jeg får denne fejlmeddelelse når jeg prøver at logge ind:

----------------------------
Fatal error: Call to a member function on a non-object in /srv/www/htdocs/web1423/html/akmedia/oop/index.php on line 7
----------------------------

Hvis nogen herinde kunne fortælle mig hvad jeg gør galt ville det være dejligt :-)
Jeg søger ikke efter en bedre løsning, for det findes sikkert, men jeg søger efter et svar som kan give mig en forståelse for hvad jeg gør forkert :-)

Mvh. Andreas
Avatar billede sw_red_6 Nybegynder
09. oktober 2006 - 11:50 #1
Det er fordi du ikke har oprettet et objekt af klassen.
prøv at sætte $Comm_obj = new Comm();
og brug $Comm_obj i stedet for $Comm
Avatar billede kinderaeg Nybegynder
09. oktober 2006 - 11:51 #2
Du skal først oprette et objekt, ud fra din klasse, for at du kan kalde den, det er ikke nok at du inkluderer selve klassen.

$comm = new Comm($user, $pass);

Desuden har du en fejl i din login-funktion i klassen:

function login($user, $pass) {
  if($user == $this-user_r && $pass == $this->user_r) {
    $_SESSION["user"] = $this->user_r;
    $_SESSION["pass"] = $this-pass_r;
  }
}

skulle være:

function login($user, $pass) {
  if($user == $this->user_r && $pass == $this->user_r) {
    $_SESSION["user"] = $this->user_r;
    $_SESSION["pass"] = $this->pass_r;
  }
}

Du mangler > to steder ;)
Avatar billede webstuff Nybegynder
09. oktober 2006 - 11:56 #3
Nu ser min index.php sådan her ud (har rettet fejlen i klasse):
-------------------------------
<?
session_start();
include("Comm.php");

$test = new Comm();

if($_GET["submit"] == "yes")
{
    if($test->login($_POST["user"], $_POST["pass"]))
    {
        echo "User: ".$_SESSION["user"]."<br />";
        echo "Pass: ".$_SESSION["pass"]."<br />";
    }
    else
    {
        echo "Forkert!";
    }
}
else
{
?>


    <form action="?submit=yes" method="post">
    <input type="text" name="user">
    <input type="text" name="pass">
    <input type="submit" value="Login">
    </form>

<?
}
?>
-------------------------------

Og jeg får disse fejl:

-------------------------------
Warning: Missing argument 1 for comm() in /srv/www/htdocs/web1423/html/akmedia/oop/Comm.php on line 5

Warning: Missing argument 2 for comm() in /srv/www/htdocs/web1423/html/akmedia/oop/Comm.php on line 5
-------------------------------

Og det kan jeg gætte mig til er fordi at jeg mangler nogle parametre når jeg siger:

$test = new Comm();

Men hvilke parametre skal jeg give den der? :-)
Avatar billede webstuff Nybegynder
09. oktober 2006 - 11:56 #4
Her er et link hvis det kan hjælpe på nogen måde:

http://www.akmedia.dk/oop/
Avatar billede webstuff Nybegynder
09. oktober 2006 - 11:58 #5
Jeg sad lidt og tænkte, og jeg behøver vel ikke?

    function Comm($user, $pass)
    {
        $this->user_r = "hej";
        $this->pass_r = "hej";
    }

Jeg kan vel nøjes med at skrive:

    function Comm()
    {
        $this->user_r = "hej";
        $this->pass_r = "hej";
    }

Så giver den i hvertfald ingen fejl, men jeg kan heller ikke logge ind :-)
Avatar billede webstuff Nybegynder
09. oktober 2006 - 12:27 #6
#kinderaeg: Har afvist dit svar, da jeg regner med flere vil kigge på det.
Du skal nok få dine point senere ;o)
Avatar billede kinderaeg Nybegynder
09. oktober 2006 - 12:55 #7
Ja, når du bare bruger "statiske variabler", kan du sagtens undvære paraketrene i din comm-funktion.

Din funktion login returnerer ikke noget, så den bliver aldrig true, du skal nok sætte den til at returnere true, hvis sammenligningen lykkes og false, hvis den mislykkes:

function login($user, $pass) {
  if($user == $this->user_r && $pass == $this->user_r) {
    $_SESSION["user"] = $this->user_r;
    $_SESSION["pass"] = $this->pass_r;
    return true;
  } else {
    return false;
  }
}
Avatar billede webstuff Nybegynder
09. oktober 2006 - 13:01 #8
Perfekt :-D

Det virker..

Opretter nok en masse spørgsmål om oop her de næste par dage - kan være jeg hører fra dig igen ;o)

Men læg et svar og du får point ;)
Avatar billede kinderaeg Nybegynder
09. oktober 2006 - 13:05 #9
Svar, igen ;)
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