[php] 2 niveau's mysql

Pagina: 1
Acties:

Onderwerpen


  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
ik wil 2 niveau's gebruiken voor extra beveiliging, dus dat bij een select query enkel maar gelezen kan worden door de user waarmee geconnect wordt met de mysql server.

Ik heb een register klasse die een singleton (instance of) klasse is, waar dus al men variabelen inzitten.

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
interface Singleton 
{
       static public function getInstance();
}

class Register implements Singleton
{
    static private $instance;
    private $options = array();

    function set($key, $var)
    {
        if (isset($this->options[$key]) == true)
        {
            throw new Exception('Unable to set var `' . $key . '`. Already set.');
        }
        $this->options[$key] = $var;
        return true;
    } 

    function remove($var)
    {
        unset($this->options[$var]);
    } 
   
    static public function getInstance() 
    {
        if( !self::$instance instanceof self ) 
        {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public function __get( $key ) 
    {
        if( isset($this->options[$key]) ) 
        {
            $return = $this->options[$key];
        }
        else 
        {
            $return = $key . " does noet exist!";
        }
        return $return;
    }
}
$config = Register::getInstance();
$config->set("readUsername", "user");
$config->set("readPassword", "hoi");
$config->set("readServer", "localhost");

$config->set("writeUsername", "root");
$config->set("writePassword", "hoi"); 
$config->set("writeServer", "localhost");

$config->set("table", "table");


owkey die klasse hebben we gehad, nu de rest iet of wat versimpelt

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
class mysql
{
    var $oConfig;
    
    private static function config()
    {
        global $oConfig;
        $oConfig = Register::getInstance();
    }

    private static function readConnection()
    {
        global $oConfig;
        if(empty($oConfig)) mysql::config();
        
        echo "<br />";
        var_dump($oConfig->readUsername);
        echo "<br />";
        var_dump($oConfig->readPassword);
        echo "<br />";
        var_dump($oConfig->readServer);
        
        if((isset($oConfig->readUsername) && isset($oConfig->readPassword) && isset($oConfig->readServer)))
        {
            echo "ok";
        }
    }

    public static function query()
    {
         mysql::readConnection();
    }
}
$test = mysql::query();


Nu ik krijg bij var_dumps effectief de waarden:
string(4) "user"
string(3) "hoi"
string(9) "localhost"

maar de isset werkt niet, alsook de empty.
Het vreemde is dat bij isset het zogezegd niet gezet is maar als ik dan een empty erop zet dan is die ook niet leeg.

[ Voor 0% gewijzigd door Precision op 20-11-2008 21:35 . Reden: poging tot wijzigen van titel, achteraf gezien ergens anders uitgekomen met vraag dan verwacht ]

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
nja aangezien er __get() wordt gebruikt kan isset hier dus niet gebruikt worden.
dusja opgelost :+ woehoew

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
flanderssoft schreef op donderdag 20 november 2008 @ 22:00:
nja aangezien er __get() wordt gebruikt kan isset hier dus niet gebruikt worden.
dusja opgelost :+ woehoew
En wat was je oplossing voor dit probleem? Ik liep er zelf pas ook tegenaan en dan kom je al snel bij rare constructies zoals

object->property === null

of iets dergelijks. Ik had gehoopt dat dat mooier kon...

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
@ doeternietoe
PHP:
1
2
3
4
    public function __isset($key)
    {
        return isset($this->options[$key]);
    }

dit toevoegen aan de eerste klasse, en dan gewoon aanroepen met isset().

[ Voor 1% gewijzigd door Precision op 20-11-2008 23:09 . Reden: foutje in de code ]

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
aha, nooit aan gedacht dat daar een magic method voor bestond :) Eigenlijk vrij logisch, nu ik het weet. Bedankt voor de tip. :)