Avatar billede razorblade Nybegynder
30. juli 2006 - 14:58 Der er 16 kommentarer og
1 løsning

Klasser og Parametre - Problem

Hej.

Det omhandler følgende script.

************************************************
1) <?PHP
2)
3) class dbConnect {
4)    private $conn;
5)
6)    public function __construct($host, $user, $pass, $db) {
7)        $this->conn = mysqli_connect($host, $user, $pass, $db);
8)    }
9)
10)    public function selectQuery($table, $field) {
11)        $result = mysqli_query($this->conn, "SELECT * FROM $table") or die(mysqli_error($this->conn));
12)
13)        $a=Array();
14)        while ($row = mysqli_fetch_array($result)) {
15)            $a[] = $row["$field"];
16)        } 
17)        return $a; 
18)    }
19) }
20)
21) $db = new dbConnect("localhost","root","210382","technolog");
22) $db->selectQuery("techno","Id_techno");
23)
24) foreach ($db->selectQuery() as $value) {
25)    echo "$value<br />";
26) }
27)
28) ?>
************************************************

Jeg modtager følgende fejl på ovenstående:

Warning: Missing argument 1 for dbConnect::selectQuery(), called in C:\dbtest.php on line 24 and defined in C:\dbtest.php on line 10

Warning: Missing argument 2 for dbConnect::selectQuery(), called in C:\dbtest.php on line 24 and defined in C:\dbtest.php on line 10

Notice: Undefined variable: table in C:\dbtest.php on line 11

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
************************************************

Det jeg gerne vil er at lave min klasse så dynamisk som muligt.
Sådan at den tabel den skal vælge og hvilket felt den skal udskrive sendes tilbage som en parameter.
Vil også meget gerne at der er mulighed for at sende endnu en parametre tilbage såsom "where id=1" altså der skal være mulighed for at indsætte en where clause hvis der er et behov for dette.

Håber det er forklaret på en forståelig måde :)
Avatar billede nielle Nybegynder
30. juli 2006 - 15:17 #1
Du har jo defineret din selectQuery()-funktion til at tage to parametre:

public function selectQuery($table, $field) {

- og derfor går det ikke at du kalder den uden nogen i linje 24:

foreach ($db->selectQuery() as $value) {
Avatar billede nielle Nybegynder
30. juli 2006 - 15:19 #2
<?PHP
class dbConnect {
    private $conn;

    public function __construct($host, $user, $pass, $db) {
        $this->conn = mysqli_connect($host, $user, $pass, $db);
    }

    public function selectQuery($table, $field) {
        $result = mysqli_query($this->conn, "SELECT * FROM $table") or die(mysqli_error($this->conn));

        $a = array();
        while ($row = mysqli_fetch_array($result)) {
            $a[] = $row["$field"];
        }

        return $a;
    }
}

$db = new dbConnect("localhost","root","210382","technolog");
$data = $db->selectQuery("techno","Id_techno");

foreach ($data as $value) {
    echo "$value<br />";
}
?>
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:27 #3
Super, det virker jo :)

Men hvad så hvis jeg også vil have mulighed for at tilføje en "where caluse" hvis der er behov for den?
Altså sådan at den virker om man sender where med eller ej ?

Og hop lige ind i det forrige spørgsmål og smid et svar nielle :)
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:31 #4
Det her fungerer f.eks. ikke

<?PHP
class dbConnect {
    private $conn;

    public function __construct($host, $user, $pass, $db) {
        $this->conn = mysqli_connect($host, $user, $pass, $db);
    }

    public function selectQuery($table, $field, $where) {
        $result = mysqli_query($this->conn, "SELECT * FROM $table $where") or die(mysqli_error($this->conn));

        $a = array();
        while ($row = mysqli_fetch_array($result)) {
            $a[] = $row["$field"];
        }

        return $a;
    }
}

$db = new dbConnect("localhost","root","210382","technolog");
$data = $db->selectQuery("techno","Id_techno","Id_techno=1");

foreach ($data as $value) {
    echo "$value<br />";
}
?>
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:32 #5
ah, glemte where :)

smid et svar nielle :P
Avatar billede nielle Nybegynder
30. juli 2006 - 15:33 #6
Skal du ikke bruge din $field en smule mere effektivt?

    public function selectQuery($table, $field, $where) {
        $result = mysqli_query($this->conn, "SELECT $field FROM $table $where") or die(mysqli_error($this->conn));

        $a = array();
        while ($row = mysqli_fetch_array($result)) {
            $a[] = $row["$field"];
        }

        return $a;
    }
Avatar billede nielle Nybegynder
30. juli 2006 - 15:36 #7
Din WHER kan måske også klare en smule mere elegant:

    public function selectQuery($table, $field, $where) {
        if ($where != "") $where = " WHERE $where";
        $result = mysqli_query($this->conn, "SELECT $field FROM $table$where") or die(mysqli_error($this->conn));

        $a = array();
        while ($row = mysqli_fetch_array($result)) {
            $a[] = $row["$field"];
        }
        return $a;
    }
Avatar billede nielle Nybegynder
30. juli 2006 - 15:36 #8
Så behøver du ikke selv at skrive WHERE :^)
Avatar billede nielle Nybegynder
30. juli 2006 - 15:38 #9
Eller sådan her:

    public function selectQuery($table, $field, $where = "") {
        if ($where != "") $where = " WHERE $where";
        $result = mysqli_query($this->conn, "SELECT $field FROM $table$where") or die(mysqli_error($this->conn));

        $a = array();
        while ($row = mysqli_fetch_array($result)) {
            $a[] = $row["$field"];
        }
        return $a;
    }

Så behøver du slet ikke at skrive 3. argument hvis du ikke skal bruge det.
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:40 #10
Det færdig resultat:

<?PHP

class dbConnect {
    private $conn;

    public function __construct($host, $user, $pass, $db) {
        $this->conn = mysqli_connect($host, $user, $pass, $db);
    }

    public function selectQuery($table, $field, $where) {
        if ($where != "") $where = " WHERE $where";
        $result = mysqli_query($this->conn, "SELECT $field FROM $table$where") or die(mysqli_error($this->conn));

        $a = array();
        while ($row = mysqli_fetch_array($result)) {
            $a[] = $row["$field"];
        }
        return $a;
    }
}

$db = new dbConnect("localhost","root","210382","technolog");
$data = $db->selectQuery("techno","techno","");

foreach ($data as $value) {
    echo "$value<br />";
}

?>
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:41 #11
Meget godt tænkt nielle.
Havde jeg selv lige overset, den forrige var jo ikke helt optimal...

Og smid så det svar - det har du fortjent :=)
Avatar billede nielle Nybegynder
30. juli 2006 - 15:41 #12
Svar :^)
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:43 #13
Du må også hellere smide et svar inde i det andet spørgsmål, erikjacobsen vil ikke have dem :)
Avatar billede nielle Nybegynder
30. juli 2006 - 15:44 #14
Nej det plejer han ikke at villa. Smid du bare et svar selv derinde og tag så dine point igen. :^)

Med denne spørgsmål har jeg fået rigelgt for idag. :^)
Avatar billede razorblade Nybegynder
30. juli 2006 - 15:47 #15
Hehe ok.. Ja det var jo også en slat.
Mere fordi jeg gerne ville have et hurtigt svar - og troede at flere point ville motivere flere :)

Men mange tak for din hjælp min ven.
Avatar billede nielle Nybegynder
30. juli 2006 - 16:03 #16
Jeg tror mere at det manglende antal bidragsydere skal ses i lyset af at det er søndag, og at det er prima badevejr ;^)
Avatar billede razorblade Nybegynder
30. juli 2006 - 17:43 #17
Det kan du have ret i.
Var også selv i vandet i går :)
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