Toon posts:

[PHP] Klassen... *zucht*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een klasse aan het maken die een login van een persoon bijhoudt.
Hierin zitten de variabelen $login_name, $login_pass, $login_id en $sql.
nou wil ik binnen functie 2 van deze vars aanpassen, maar als ik dan doe:

PHP:
1
2
3
4
5
<?php
// voorbeeld 1
$this->$login_name = $row["naam"];
$this->$login_id = $CookieValue;
?>


wat het bijvoorbeeld zou moeten zijn is:
$this->$login_name = "Henk"
$this->$login_id = "12234"

maar met voorbeeld 1 krijg ik:
$this->$login_name = $this->$login_id = "12234"

als ik het de toewijzingen in voorbeeld 1 echter omdraai, dus zo:
PHP:
1
2
3
4
5
6
<?php
// voorbeeld 2
$this->$login_id = $CookieValue;
$this->$login_name = $row["naam"];
// toewijzingen omgedraaid tov voorbeeld 1
?>


dan krijg ik:
$this->$login_name = $this->$login_id = "Henk"

met andere woorden, beide vars krijgen de waarde van de laatste toewijzing aan èèn variabele :S

Het relevante stuk code is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
class LogIn
{
    var $login_name;
    var $login_pass;
    var $login_id;
    var $sql;

    function LogIn()
    {
        $this->$sql = mysql_connect("212.54.50.104", "hvz", "hvz");
        mysql_select_db("hvz", $this->$sql);
    }

    function checkUserLogin($CookieValue)
    {
        if (isset($CookieValue))
        {
            $result = mysql_query("SELECT count(*) FROM logins WHERE LID=\"$CookieValue\"", $this->$sql);
            $row = mysql_fetch_array($result, MYSQL_ASSOC);
            if ($row["count(*)"] >= 1)
            {
                $result = mysql_query("SELECT u.naam, u.UID, l.UID FROM users u, logins l WHERE u.UID = l.UID AND l.LID=\"$CookieValue\"", $this->$sql);
                $row = mysql_fetch_array($result, MYSQL_ASSOC);
                $this->$login_name = $row["naam"];
                $this->$login_id = $CookieValue;
                return true;
            }
            else
            {
                setCookie("LoginID");
                return false;
            }
        }
    }

    function getUserName()
    {
        return "\"".$this->$login_name."\"";
    }

    function getUserLID()
    {
        return "\"".$this->$login_id."\"";

    }
}

?>

  • jvreuls
  • Registratie: Januari 2002
  • Laatst online: 31-07 13:13
Het is gewoon
code:
1
$this->login_name = $row["naam"];

in plaats van
code:
1
$this->$login_name = $row["naam"];

(tweede $ dus weg)

Circuits Online


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:52
Typische demonstratie van waarom variabele variabelen slecht zijn.

PHP:
1
2
$this->$login_name = $row["naam"];
$this->$login_id = $CookieValue;


Je doet hier een assignment op het attribuut dat in $login_name staat, niet het attribuut met naam "login_name". Als in $login_naam bijvoorbeeld "blaat" staat, zal $this->blaat toegewezen worden.

In dit geval zijn $login_name en $login_id waarschijnlijk beide niet gedefinieerd, dus verwijzen ze allebei naar hetzelfde attribuut.

Wat jij wilde schrijven was:
PHP:
1
2
$this->login_name = $row["naam"];
$this->login_id = $CookieValue;


Dit probleem staat trouwens los van het gebruik van klassen.

Wil je voortaan eerst je code runnen met error reporting op E_ALL? Dan had je namelijk een warning gekregen voor het gebruik van de ongedefinieerde variabelen. Zie hierover ook de FAQ.