Avatar billede mcardle Nybegynder
26. december 2006 - 01:51 Der er 8 kommentarer og
2 løsninger

Jeg kan ikke få mine klasser til at virke

Hej eksperter.

Jeg har denne her klasse, men kan ikke få den til at virke. Jeg er lige ved at lære det, men sidder og kigger på nogle lettere eksempler i en bog.

Jeg har lavet det her, det er til at oprette forbindelse til MySQL, queries osv. Håber I kan hjælpe.


Class:
<?php

class sql{

function connect(){
  $dbhost = "???";
  $database = "???";
  $dbuser = "???";
  $dbpass = "???";
 
  mysql_connect($dbhost, $dbuser, $dbpass);
  mysql_select_db($database);
}

function q($sql_query){
    $query = mysql_query($sql_query) OR die(mysql_error());
    return $query;
}

function a($q){
    $array = mysql_fetch_array($q);
    return $array;
}

function close(){
    if(!mysql_close()){
      echo "<script type='text/javascript'>alert('Der kunne ikke lukkes for forbindelsen');</script>";
  }
}

}

?>

Document:
<?php
require_once("SSI/class.sql.php");
$sql = new sql;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>
    <title></title>
  </head>
<body>

<?php
$sql->connect();

$sql->q("SELECT * FROM chat");
while($sql->a($query)){
    echo $array["id"].'<br />';
}

$sql->close();
?>

</body>
</html>
Avatar billede arne_v Ekspert
26. december 2006 - 03:05 #1
uden at have kigget meget på din kode

skal

$sql->q("SELECT * FROM chat");

ikke være

$query = $sql->q("SELECT * FROM chat");

?
Avatar billede arne_v Ekspert
26. december 2006 - 03:06 #2
iøvrigt ville jeg nok gemme connection i klassen
Avatar billede arne_v Ekspert
26. december 2006 - 03:06 #3
(instansen hvis det skal være fint OOP'sk)
Avatar billede mcardle Nybegynder
26. december 2006 - 09:43 #4
Hmm, forstår ikke helt hvad du siger...

Hvad skal det være, hvis det IKKE skal være:
$query = $sql->q("SELECT * FROM chat"); ?

Sammenligner man bare variablen med funktionen i documentet og ikke i klassen?

<quote>
iøvrigt ville jeg nok gemme connection i klassen
</quote>

Er den ikke klassen da?

(instansen hvis det skal være fint OOP'sk) ?
Her er jeg bare lost ;o)
Avatar billede coderdk Praktikant
26. december 2006 - 14:12 #5
arne_v mener at du skal indkapsle variablene...
Sådan ville jeg gøre:

<?php

class sql
{
    var $_conn;
    var $_queries = array();
    var $_activeQuery;
    function connect()
    {
        $dbhost = "???";
        $database = "???";
        $dbuser = "???";
        $dbpass = "???";
       
        $this->_conn = mysql_connect($dbhost, $dbuser, $dbpass);
        mysql_select_db($database, $this->_conn);
    }
   
    function q($sql_query)
    {
        $query = mysql_query($sql_query, $this->_conn) or die(mysql_error());
        if ( $query !== false )
        {
            array_unshift( $this->_queries, $query );
            $this->_activeQuery = $query;
            return true;
        }
        return false;
    }
   
    function a($q)
    {
        $array = null;
        if ( $this->_activeQuery )
        {
            $array = mysql_fetch_array($this->_activeQuery, $this->_conn);
        }
        return $array;
    }
   
    function free()
    {
        if ( $this->_activeQuery )
        {
            @mysql_free_result( $this->_activeQuery );
            $this->_activeQuery = array_shift( $this->_queries );
        }
    }
   
    function num_rows()
    {
        return mysql_num_rows( $this->_activeQuery );
    }
   
    function close()
    {
        @mysql_close($this->_conn);
    }
}

?>

Bemærk at det ikke er testet eller noget :)
Avatar billede mcardle Nybegynder
26. december 2006 - 14:33 #6
Hmm, tror godt jeg kan se hvad I mener nu... :o)

Tak for det, tester det lige og vender stærkt tilbage...
Avatar billede mcardle Nybegynder
26. december 2006 - 14:47 #7
Det var dog fantastisk... Hold da op, hvor I trickser. Det virker fremragende. Læg et svar, så for i nogle points.

I filled with joy. :oD
Avatar billede arne_v Ekspert
26. december 2006 - 15:09 #8
jeg vill såmænd nok bare have nøjes med at gemme connection og så merge q og a og
lade den returnere data som retur værdi
Avatar billede arne_v Ekspert
26. december 2006 - 15:10 #9
svar fra mig
Avatar billede coderdk Praktikant
26. december 2006 - 22:21 #10
Svar fra mig :) Den kode jeg pastede prøvede jeg at designe så du skal bruge free() efter en query() - men så kan du bruge rekursive SQL-kald, queries i loops osv hvor den så bare gemmer result-handle... :) I.e.:

$db->query( "SELECT id, blah FROM tabel" );
while ( $r = $this->a() )
{
  $db->query( "UPDATE tabel2 SET bleh = " . ( $r['blah'] * 0x5f3759df ) . " WHERE noget > andet" );
  $db->free();
}
$db->free();
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging