Avatar billede simm Nybegynder
04. januar 2003 - 02:08 Der er 16 kommentarer og
1 løsning

Overføre variabel fra en funktion til en anden

Jeg forsøger at lære mig selv lidt objektorienteret programmering i PHP, fordi jeg bl.a. synes det giver en lidt pænere struktur. Men jeg har problemer med at overføre variabler fra en funktion til en anden - hvordan gør man det? Jeg troede, at når man erklærede en variabel for global, så ville dens scope spænde over hele klassen

Det er variablen $conn jeg har problemer med, når jeg forsøger at udtrække rækker fra min database med $minicms->showAllData(); får jeg at vide at $conn ikke findes...Selvom jeg har åbnet forbindelse til databasen lige ovenfor.

På forhånd tak for hjælpen!

vh. Simon

---

<?php
class MiniCMS {
    var $host, $dbuser, $dbpass, $dbname;

    function dbconnect($host, $dbuser, $dbpass, $dbname)
    {
        global $conn;
        $this->$conn = @mysql_connect($host, $dbuser, $dbpass)
        or die ("'Kunne ikke oprette forbindelse til databasen, grundet:' . mysql_error()");
        print ("Forbindelsen til databasen er oprettet\r\n");
        mysql_select_db($dbname);
        return $conn;
    } //function dbconnect end
   
    function showAllData()
    {
        global $query, $data;
        $this->$data = mysql_query("select * from salg",$conn);
        while ($query = mysql_fetch_row($data)) {
            print ("<table><tr>");
            print ("<td>.$query[bilmaerke].</td><td>.$query[aargang].</td><td>.$query[antal_km].</td><td>.$query[pris].</td>");
            print ("</tr></table>");
        } // while
        mysql_close($conn);
    } //function showAllData end
Avatar billede tipsen Nybegynder
04. januar 2003 - 02:16 #1
Tror måske noget i retning af følgende kan gøre tricket - men er ikke så hård til det objektorienterede - det kan godt være det er helt håbløst...

Se evt: http://dk.php.net/manual/en/language.oop.php

<?php
class MiniCMS {
    var $host, $dbuser, $dbpass, $dbname, $conn;

    function MiniCMS() {
      $this->host = 'hostname';
      $this->dbuser= 'username';
      $this->dbpass= 'password';
      $this->dbname= 'dbname';
    }

    function dbconnect($host, $dbuser, $dbpass, $dbname) {
        $this->$conn = @mysql_connect($host, $dbuser, $dbpass)
        or die ("'Kunne ikke oprette forbindelse til databasen, grundet:' . mysql_error()");
        print ("Forbindelsen til databasen er oprettet\r\n");
        mysql_select_db($dbname);
        return $conn;
    } //function dbconnect end
   
    function showAllData()
    {
        global $query, $data;
        $this->$data = mysql_query("select * from salg",$conn);
        while ($query = mysql_fetch_row($data)) {
            print ("<table><tr>");
            print ("<td>.$query[bilmaerke].</td><td>.$query[aargang].</td><td>.$query[antal_km].</td><td>.$query[pris].</td>");
            print ("</tr></table>");
        } // while
        mysql_close($conn);
    } //function showAllData end
Avatar billede simm Nybegynder
04. januar 2003 - 02:26 #2
Det virkede desværre ikke, tipsen, men tak fordi du ville forsøge i hvert fald :)
Avatar billede simm Nybegynder
04. januar 2003 - 02:36 #3
Havde i øvrigt checket manualen igennem for at finde løsninger på problemet, men jeg fik ikke noget ud af det.
Avatar billede tipsen Nybegynder
04. januar 2003 - 02:52 #4
Hvis du vil se nogle gode professionelle eksempler på oop:

http://pear.php.net/?devme=42
Avatar billede Slettet bruger
04. januar 2003 - 03:25 #5
Nu spørg jeg dumt:

Hvornår kalder du nogensinde din dbconnect?!

Lad iøvrigt $conn være et classmember ligesom $host etc. er det. Og referer hertil som $this->$conn fra de funktioner, der skal bruge den.
Avatar billede simm Nybegynder
04. januar 2003 - 03:40 #6
Hej Mercur8. Det gør jeg i de andre php-filer, jeg har. Forestil dig ovenstående kode, som en del af et centralt script, hvor jeg kan kalde de forskellige funktioner fra.

dvs. jeg har f.eks en fil, der hedder visalledata.php. I den kalder jeg ovenstående funktioner som ligger i en fil, der hedder functions.php, sådan:
<?php
include_once ("functions.php");
$minicms = new MiniCMS();
$minicms->dbconnect("localhost","","","skovlund");
$minicms->showAllData();

Har lavet $conn om til et classmember osv. men det ændrer intet
?>
Avatar billede Slettet bruger
04. januar 2003 - 03:52 #7
<?php
class MiniCMS {
    var $conn;

    function dbconnect($host, $dbuser, $dbpass, $dbname) {
        $this->$conn = @mysql_connect($host, $dbuser, $dbpass) or die("'Kunne ikke oprette forbindelse til databasen, grundet:' . mysql_error()");
        print("Forbindelsen til databasen er oprettet\r\n");
        mysql_select_db($dbname);       
    }
   
    function showAllData() {
        $data = mysql_query("select * from fll0109", $this->$conn) or die(mysql_error());
        while ($query = mysql_fetch_row($data)) {
            print("<table><tr>");
            print("<td>.$query[bilmaerke].</td><td>.$query[aargang].</td><td>.$query[antal_km].</td><td>.$query[pris].</td>");
            print("</tr></table>");
        }
        mysql_close($this->$conn);
    }
}
?>

Læs lidt mere om brugen af this og scopet af de variable i forb. med OO programmering i PHP.
Avatar billede Slettet bruger
04. januar 2003 - 03:57 #8
(Ser lige jeg fik ændret dit tabelnavn til 'fll0109' i stedet for 'salg'. Beklager :)
Avatar billede simm Nybegynder
04. januar 2003 - 04:41 #9
Mercury8: må desværre afvise dit svar, da det ikke fungerer stadigvæk... Jeg får stadig fejlmeddelelser der siger:


Notice: Undefined variable: conn in D:\html\skovlund\functionstest2.php on line 6
Notice: Undefined variable: conn in D:\html\skovlund\functionstest2.php on line 12
Avatar billede tipsen Nybegynder
04. januar 2003 - 04:44 #10
Det er ikke deciderede fejl-meddelelser, men snarere bemærkninger!
Avatar billede Slettet bruger
04. januar 2003 - 04:52 #11
Tjaa, det skal være:

$this->conn alle steder.

IKKE

$this->$conn
Avatar billede simm Nybegynder
04. januar 2003 - 04:53 #12
Jep, men er det ikke smartest at få dem fjernet også? ;) Ellers må Mercur8 lige sende mig et svar igen..
Avatar billede Slettet bruger
04. januar 2003 - 04:53 #13
Det havde du selv opdaget iøvrigt, hvis du havde fulgt mit sidste råd :)
Avatar billede simm Nybegynder
04. januar 2003 - 04:56 #14
det kan du ikke forlange her klokken 5 om morgenen *griner*
Avatar billede simm Nybegynder
04. januar 2003 - 04:57 #15
Mercur8, send et svar så får du point..

Tak for hjælpen begge to, nu kan jeg sove roligt i nat :)
Avatar billede Slettet bruger
04. januar 2003 - 05:00 #16
Svar ... igen.

Sov godt.
Avatar billede simm Nybegynder
04. januar 2003 - 05:09 #17
Lige over! :)
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