Forum » Server-Side scripting » Database Class probleem
Lua/PHP scriptorrrrrr xD
Berichten: 120
avatar
Offline Stuur privebericht
Hallo criminalspoints.

Ik heb sinds kort mijn website online gezet, en ik heb daarbij een database class gemaakt, die ik op een rustige ochtend zou installeren.
Nu blijkt dit moeilijker als gedacht.

Verbind code:
Code | Selecteer Alles
minimaliseren
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
// Connect to MySQL
$link Connection::NewConnection$sql_config['hostname'], $sql_config['database'], $sql_config['username'], $sql_config['password'] );
if(!
$link)
{
$message  '' mysql_error() . '<br><br>Please inform a system administrator!';
echo <<<ENDHTML
<body bgcolor="#000000">


<center><table cellspacing='0' width='700' height='1%' style='border: 1px solid #444444; margin-bottom: 4px'  cellpadding='2' >
                        <tr>
                    <td height='35' width='700' background='' bgcolor='#333333' style='border-bottom: 1px solid #444444; text-align: left; padding-left:25px; vertical-align: middle;'>
                    <b><font color='#999999'>A MySQL has error occured!</b>
            </td>
            <TR>
                    <td bgcolor='#222222'  width='700' style='border-bottom:1px solid #444444;' height='25'>

                    <font color='#999999'>The website has failed to connect to the mysql server!<BR>
                    Error: 
$message </font>
            </td>
            
            
            </TR>


            </table></center>
ENDHTML;
exit();
}


Database Class:
Code | Selecteer Alles
minimaliseren
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
class Connection
      
{
        var 
$db_connection null;        // Database connection string
        
var $db_server null;            // Database server
        
var $db_database null;          // The database being connected to
        
var $db_username null;          // The database username
        
var $db_password null;          // The database password
        
var $CONNECTED false;           // Determines if connection is established

        /** NewConnection Method
         * This method establishes a new connection to the database. */
        
public function NewConnection($server$database$username$password)
        {
            
// Assign variables
            
global $db_connection$db_server$db_database$db_username$db_password;
            
$db_server $server;
            
$db_database $database;
            
$db_username $username;
            
$db_password $password;

            
// Attempt connection
            
try
            {
                
// Create connection to MYSQL database
                // Fourth true parameter will allow for multiple connections to be made
                
$db_connection mysql_connect ($server$username$passwordtrue);
                
mysql_select_db ($database);
                if (!
$db_connection)
                {
                    throw new 
Exception('MySQL Connection Database Error: ' mysql_error());
                }
                else
                {
                    
$CONNECTED true;
                }
            }
            catch (
Exception $e)
            {
                echo 
$e->getMessage();
            }
        }
}

let op, dit is slechts een deel van de database class.

ik hoop dat het op te lossen is.

Mvg, AeroXbird
EDIT: het is opgelost
Laatst gewijzigd door AeroXbird op 2010-07-25 12:11:54
25-07-2010 11:56
Dit topic is 274 keer bekeken door 46 verschillende leden
Reacties op: "Database Class probleem"
1 | 2 Volgende pagina
Berichten: 37
avatar
Offline Stuur privébericht
Hoe werd het opgelost, telkens uw antwoord plaatsen om zo meerdere topics en vragen te verkomen.
25-07-2010 12:30
Lua/PHP scriptorrrrrr xD
Berichten: 120
avatar
Offline Stuur privébericht
Het probleem lag dat ik een $link deed voor de connectie class.
ik heb het foutmeldingen in het class systeem geintergreerd.
25-07-2010 12:48
Vreemd
Berichten: 1246
avatar
Offline Stuur privébericht
Nog een probleem: ik zie nergens "$this".

Oh, en waarom vang je die exception op?
Doe dat lekker ergens anders (niet binnen de class).
Bijvoorbeeld:
Code | Selecteer Alles
minimaliseren
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
try
{
// Connect to MySQL
Connection::NewConnection$sql_config['hostname'], $sql_config['database'], $sql_config['username'], $sql_config['password'] );
}
catch(
Exception $e)
{
$message  $e->getMessage();
echo <<<ENDHTML
<body bgcolor="#000000">


<center><table cellspacing='0' width='700' height='1%' style='border: 1px solid #444444; margin-bottom: 4px'  cellpadding='2' >
                        <tr>
                    <td height='35' width='700' background='' bgcolor='#333333' style='border-bottom: 1px solid #444444; text-align: left; padding-left:25px; vertical-align: middle;'>
                    <b><font color='#999999'>A MySQL has error occured!</b>
            </td>
            <TR>
                    <td bgcolor='#222222'  width='700' style='border-bottom:1px solid #444444;' height='25'>

                    <font color='#999999'>The website has failed to connect to the mysql server!<BR>
                    Error: 
$message<br><br>

                    Please inform a system administrator!</font>
            </td>
            
            
            </TR>


            </table></center>
ENDHTML;
exit();
}


Oh, en globals zijn ook lelijk..

Doe mij een plezier (en hopelijk daarmee jezelf), en plaats de hele class zodat ik (en andere) je kunnen helpen met het verbeteren er van.
25-07-2010 13:12
Lua/PHP scriptorrrrrr xD
Berichten: 120
avatar
Offline Stuur privébericht
Op verzoek van darrstar:
Code | Selecteer Alles
minimaliseren
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
class Connection
      
{
        var 
$db_connection null;        // Database connection string
        
var $db_server null;            // Database server
        
var $db_database null;          // The database being connected to
        
var $db_username null;          // The database username
        
var $db_password null;          // The database password
        
var $CONNECTED false;           // Determines if connection is established

        /** NewConnection Method
         * This method establishes a new connection to the database. */
        
public function NewConnection($server$database$username$password)
        {
            
// Assign variables
            
global $db_connection$db_server$db_database$db_username$db_password;
            
$db_server $server;
            
$db_database $database;
            
$db_username $username;
            
$db_password $password;

            
// Attempt connection
            
try
            {
                
// Create connection to MYSQL database
                // Fourth true parameter will allow for multiple connections to be made
                
$db_connection mysql_connect ($server$username$passwordtrue);
                
mysql_select_db ($database);
                if (!
$db_connection)
                {
                    throw new 
Exception('MySQL Connection Database Error: ' mysql_error());
                }
                else
                {
                    
$CONNECTED true;
                }
            }
            catch (
Exception $e)
            {
                echo 
$e->getMessage();
            }
        }

        
/** Open Method
        * This method opens the database connection (only call if closed!) */
        
public function Open()
        {
            global 
$db_connection$db_server$db_database$db_username$db_password$CONNECTED;
            if (!
$CONNECTED)
            {
                try
                {
                    
$db_connection mysql_connect ($db_server$db_username$db_password);
                    
mysql_select_db ($db_database);
                    if (!
$db_connection)
                    {
                        throw new 
Exception('MySQL Connection Database Error: ' mysql_error());
                    }
                    else
                    {
                        
$CONNECTED true;
                    }
                }
                catch (
Exception $e)
                {
                    echo 
$e->GetMessage();
                }
            }
            else
            {
                return 
"Error: No connection has been established to the database. Cannot open connection.";
            }
        }

        
/** Close Method
         * This method closes the connection to the MySQL Database */
         
public function Close()
         {
            global 
$db_connection$CONNECTED;
            if (
$CONNECTED)
            {
                
mysql_close($db_connection);
                
$CONNECTED false;
            }
            else
            {
                return 
"Error: No connection has been established to the database. Cannot close connection.";
            }
         }

      }
?>
25-07-2010 14:48
Vreemd
Berichten: 1246
avatar
Offline Stuur privébericht
http://www.php.net/manual/en/language.oop5.basic.php
Lees daar eens iets over $this aub

Dan kunnen al die lelijke globals weg...
25-07-2010 16:03
Lua/PHP scriptorrrrrr xD
Berichten: 120
avatar
Offline Stuur privébericht
Ik heb er naar gekeken, maar ik snap dat $this niet helemaal
en ik vind die examples ook niet bepaald duidelijk daar.
27-07-2010 23:30
Vreemd
Berichten: 1246
avatar
Offline Stuur privébericht
ok, laat ik het dan maar proberen uit te leggen:

Beginnend met een feit:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
var $db_connection null;        // Database connection string
        
var $db_server null;            // Database server
        
var $db_database null;          // The database being connected to
        
var $db_username null;          // The database username
        
var $db_password null;          // The database password
        
var $CONNECTED false;           // Determines if connection is established

Dat staat er nu voor spek en bonen (en gebruik aub "public" en niet "var", wat nog PHP 4 is)

Als je wilt dat het er niet voor spek en bonen staat, dan moet je die variabelen gaan gebruiken...
Maar die variabele spreek je niet aan via $CONNECTED, $db_server etc.
Maar via $this->CONNECTEC, $this->db_server etc.

voorbeeldje:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/** Open Method
        * This method opens the database connection (only call if closed!) */
        
public function Open()
        {
            if (
$this->CONNECTED)
                return 
true;

            
$this->db_connection mysql_connect ($this->db_server$this->db_username$this->db_password);

            if (
$this->db_connection)
            {
                if (
mysql_select_db ($this->db_database))
                {
                    return 
$this->CONNECTED true;
                }
            }

            throw new 
Exception('MySQL Connection Database Error: ' mysql_error());
        }

Geen lelijke global!

En zo moet je met objecten werken (tenzij je statische variabele gaat maken) wat ik een pro vindt.

PS. misschien dat ik morgen ochtend nog wat edit, ik ben moe
27-07-2010 23:50
Set sail, pirates!
Berichten: 370
avatar
Offline Stuur privébericht
$this is gewoon de variabele die het object waarin je werkt zelf bevat. Werkt alleen in object context though. Dat is logisch.

Als je een methode of een variabele van je class in de class zelf terug wilt roepen (wat heel handig is voor private access), dan kun je $this gebruiken.
Stel bijvoorbeeld dat je een methode hebt die een object zijn eigenschappen omzet in een array (ik noem maar wat). Dan zou je bijvoorbeeld $this->convertToArray(Exception $caughtshizzle) kunnen aanroepen als die methode bestond in de class waar je $this gebruikt.

Snap je dit wel?

Nieuwe reactie samengevoegd met originele reactie op 27.07.10 23:53:40:
Oh te laat
27-07-2010 23:53
Lua/PHP scriptorrrrrr xD
Berichten: 120
avatar
Offline Stuur privébericht
Dit heb ik nu:
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public $db_connection null;        // Database connection string
        
public $db_server null;            // Database server
        
public $db_database null;          // The database being connected to
        
public $db_username null;          // The database username
        
public $db_password null;          // The database password
        
public $CONNECTED false;           // Determines if connection is established

        /** NewConnection Method
         * This method establishes a new connection to the database. */
        
public function NewConnection($server$database$username$password)
        {
                
// Create connection to MYSQL database
                // Fourth true parameter will allow for multiple connections to be made
                
$this->db_connection mysql_connect ($this->server$this->username$this->passwordtrue);
                
mysql_select_db ($this->database);
                if (
$this->db_connection)
                {
                     return 
$this->CONNECTED true;
                }
                else
                {
                   throw new 
Exception('MySQL Connection Database Error: ' mysql_error());
                }
            }

maar ik krijg constant een error dat hij niet in object context is.
28-07-2010 00:15
Set sail, pirates!
Berichten: 370
avatar
Offline Stuur privébericht
Quote

$this is gewoon de variabele die het object waarin je werkt zelf bevat. Werkt alleen in object context though. Dat is logisch.



Je kunt het best even alle reacties lezen, ook die te laat zijn.
$this kun je alleen gebruiken als je je class in object context aan het werk zet. Dat komt omdat $this zelf ook een object bevat, en PHP maakt niet automatisch een object voor je aan (gelukkig)
28-07-2010 00:19
Reageer op: "Database Class probleem"
1 | 2 Volgende pagina
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden