/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Mystisk (scope) problem i forbindelse med ~
Fra : Jesper Frank Nemholt


Dato : 18-02-01 03:49

Hej!

class DB_Link extends DB_Sql
{
var $classname = "DB_Link";

var $Host = "localhost";
var $Database = "collect";
var $User = "reader";
var $Password = "R1@d1r";
var $type = "mysql";
var $Debug = 0;
}

$q = new DB_Link;



Hvis jeg nu gerne vil lade $Database være styret udefra med en
$HTTP_POST_VARS["database"] og erstatter "collect" med dette, så virker det
ikke.
Jeg troede først at det var scope og lavede derfor en $GLOBALS[] reference,
men det går også galt.....

Hvad er årsagen ?


l8r/Jspr



 
 
Martin Mouritzen (18-02-2001)
Kommentar
Fra : Martin Mouritzen


Dato : 18-02-01 04:18

After I finished the 3 Pan Galactic Gargle Blasters, "Jesper Frank
Nemholt" <jfn@dassic.com> just offered me, he muttered some weird
stuff, and I had to correct this gibberish:

>$q = new DB_Link;
>Hvis jeg nu gerne vil lade $Database være styret udefra med en
>$HTTP_POST_VARS["database"] og erstatter "collect" med dette, så virker det
>ikke.

prøv med
$q->database = $HTTP_POST_VARS["database"];

lav evt. i din klasse 2 funktioner.

setDB($db) {
   $this->database = $db;
}
getDB() {
   return $this->database;
}

Så kan du bruge $q->setDB($HTTP_POST_VARS["database"]);
Det er bedre kode, og det gør det også nemmere for dig senere hen at
få til at virke med andet kode eller lignende :)
--
Martin Mouritzen. | http://www.trendy.dk
The truth is out there! Does anyone know the URL?

John Mørck Hansen (18-02-2001)
Kommentar
Fra : John Mørck Hansen


Dato : 18-02-01 12:24


"Jesper Frank Nemholt" <jfn@dassic.com> skrev
>
> Hvis jeg nu gerne vil lade $Database være styret udefra med en
> $HTTP_POST_VARS["database"] og erstatter "collect" med dette, så virker
det
> ikke.
> Jeg troede først at det var scope og lavede derfor en $GLOBALS[]
reference,
> men det går også galt.....
>
> Hvad er årsagen ?

Ja, årsagen er den at når du opretter dit database object så kender objektet
ikke din globale database variabel. DB_Mysql kalder en constructor når der
bliver oprettet et object af typen DB_Mysql og denne constructor kender jo
kun til den interne variabel $Database, og der for prøver at bruge den.

Løsningen er at lave en constructor i din Database class:

class DB_Link extends DB_Sql
{
function DB_Link( $dbToUser ) {
...
}
...
}

Så kan du bruge den sådan her:

$db = new DB_Link( $Database );


(John =






Søg
Reklame
Statistik
Spørgsmål : 177523
Tips : 31968
Nyheder : 719565
Indlæg : 6408677
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste