Toon posts:

[PHP] Kan iemand dit verklaren - String werkt alleen in fu..

Pagina: 1
Acties:
  • 93 views sinds 30-01-2008

Verwijderd

Topicstarter
Zouden jullie mij uit willen leggen waarom $access alleen in de functie zelf werkt?
En waarom helpt het niet als ik return $access; plaats boven de } van het be-eindigen van de functie?
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
// include.php
// parsetime: 0.03 seconds

require "$DOCUMENT_ROOT/connect.php";
if ($_COOKIE["username"] == "" AND $_COOKIE["memberid"] == "")
{   
    $select = "SELECT * FROM banned WHERE ip = '" . $REMOTE_ADDR . "'";
    $query = mysql_query($select) or die(mysql_error());
    if(mysql_num_rows($query) == 1)
    {
        // banned
        $banned = 1;
    }
}

else 
{
    $select = "SELECT * FROM `members` WHERE `username` = '" . $_COOKIE["username"] . "'";
    $query = mysql_query($select) or die(mysql_error());
    $list = mysql_fetch_array($query);
    if($list[status] == "banned")
    {
        $banned = 1;
        $update = "UPDATE `banned` SET `ip`='" . $REMOTE_ADDR . "'";
        $query = mysql_query($update);
    }
}

if($banned == 1)
{
    echo "Banned!"; 
    exit;
}
    
function protect($status) 
{  
    global $_COOKIE; 
    if ($_COOKIE["username"] == "" AND $_COOKIE["memberid"] == "" AND $_COOKIE["hash"] == "")
    {
        if($status == "all")
        {    
                $access = 1;   
        }    
        
        else 
        {   
            $access = 0;   
        }   
    }   

else
{   
    if($status == "admin")
    {   
            $query = mysql_query('SELECT `status` FROM `members` WHERE `username`="' . $_COOKIE['username'] . '" AND `id`="' . $_COOKIE['memberid'] . '" AND `password`="' . $_COOKIE[hash] . '" AND `status`="admin"');   
            $number = mysql_num_rows($query);    
            if($number != 1)
        {   
                $access = 0;   
        }   
            else 
        {   
                $access = 1;
        }   
    }   

    elseif($status == "elite")
    {   

            $query = mysql_query('SELECT `status` FROM `members` WHERE `username`="' . $_COOKIE['username'] . '" AND `id`="' . $_COOKIE['memberid'] . '" AND `password`="' . $_COOKIE[hash] . '" AND (`status`="admin" OR `status`="elite")');
            $number = mysql_num_rows($query);    
            if(!mysql_num_rows($query))
        {   
                    $access = 0;
        }   
        else 
        {
            $access = 1;   
            }   
    }   

    elseif($status == "member")
    {   
        $query = mysql_query('SELECT `id` FROM `members` WHERE `username`="' . $_COOKIE['username'] . '" AND `id`="' . $_COOKIE['memberid'] . '" AND `password`="' . $_COOKIE[hash] . '"');
        $number = mysql_num_rows($query);    
            if($number != "1")
        {   
            $access = 0;   
        }   
            else 
        {   
            $access = 1;   
        }   
    }   

    else 
    {   
        if($status == "all" OR !isset($status))
        {   
            $access = 1; 
        }   
    }   
}

if ($error_page!="true") 
{
    if($access == "0")
    {
        echo "<b>ERR: Must be logged in</b> ---";
        exit;
    }
}

return $access;
// hier werkt echo $access nog wel
}

function beveiliging($status)
{
    protect($status);
}

protect(all);
echo $access;
// resultaat van $access wordt niet gegeven

$var = protect(all); 
echo $var; // dit returnt de waarde van $access normaal 
// resultaat wordt nu wel gegeven!
?>
Bij het vervangen van
// hier werkt echo $access...
door;
PHP:
1
2
3
4
5
6
<?php
if($access) 
{
   echo $access; 
} 
?>
krijg ik bij de 1e wel gewoon 1 (output: 1), maar bij de 2e niet (bij // hier werkt echo $access niet meer).

[ Voor 134% gewijzigd door Verwijderd op 30-10-2003 17:52 ]


Verwijderd

Moet je niet return $access doen in die functie? je return namelijk niets..

Verwijderd

Topicstarter
Al geprobeerd, maar volgens mij is een string declareren in een functie ook genoeg.

Dit heeft geen resultaat:
PHP:
1
2
3
4
5
<?php
return $access;
// hier werkt echo $access nog wel
}
?>
Moet ik trouwens niet iets met GLOBAL doen met betrekking tot $access?

[ Voor 3% gewijzigd door Verwijderd op 30-10-2003 17:46 ]


Verwijderd

zet er dan bij return $access bij die protect functie en die functie roep je dan zo aan:

PHP:
1
2
3
4
<?
 $var = protect(all);
 echo $var; // dit returnt de waarde van $access normaal
?>


Shoot me if I'm wrong. :+

Verwijderd

Topicstarter
Interessant, maar waar wel *** dat waardes niet anders meegenomen kunnen worden in dit geval.

Werkt inderdaad, zie nieuwe update bovenaan van het php-script.

Okay;

Maar is het volgende nu efficient of dubbelop?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
require("../include.php");
$error_page = "true";
protect("elite");
$access = protect("elite");

if(!$access) {

echo"<b>Permission Denied</b><br>
Saiyan Arena no longer offers Dragonball-media due the following reasons:<br>
- Funimation doesn't allow us to offer the series online<br>
- Huge bandwidth usage (3000 downloads per day)<br>
- Too many people crying about the media<br>

<br><B>When will it possibly come back?</b><br>
Not sure, don't count on it to come back soon.";

} else {
?>

[ Voor 92% gewijzigd door Verwijderd op 30-10-2003 17:57 ]


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Net zoals in een hoop andere talen (Delphi, Java, C++) moet je in PHP elke variabele die je buiten de functie wilt gebruiken, ook er buiten declareren.

Het werken met global kan ook, maar is niet bepaald aan te raden (alhoewel het zeker de makkelijkste oplossing is).

  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 13-08 12:34
Check het hoofdstuk over variabelen, en dan in bijzonder het onderdeel over de scope van een variabele. Dit is wel tamelijk beginners-werk

Verwijderd

Als je $access nou eens op global zet, en $_COOKIE juist niet. $_COOKIE is een autoglobal.

En volg de tip van mijn voorganger op, lees de documentatie over variable scope.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sorry, maar aan "hier is mijn code en los het maar op" topics doen we niet. Debuggen zul je zelf moeten leren. Tip: probeer je probleem te isoleren door variabelen regelmatig af te drukken op je scherm. Dan kun je met de hand controleren of dat zou moeten kloppen of niet.

En idd, je moet ook gewoon de documentatie ernaast houden

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.