School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become an Expert!

Join 307,099 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 2,033 people online right now. Registration is fast and FREE... Join Now!




Connection to the MYSQL using OOP

 
Reply to this topicStart new topic

> Connection to the MYSQL using OOP, We use the OOP classes to connect to our MYSQL database.

Rating  5
Kuggi
Group Icon



post 18 Jan, 2009 - 06:05 AM
Post #1


If you develop websites in PHP5 or later, you know to the 'new stuff' in PHP5 called OOP, this is a little guide to create a class to your website, so you can connect to your mysql database the OOP way.

First we create a class called "db".

CODE

<?PHP
class db
{
}
?>


We need some information to your database, so we can connect to the right one, we need information for the Hostname, Database name, username and password to the mysql database.

So now we create some variables to store the information:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;
}    


Before we can use the variables we need to set the information in the class contructor so the content of the variables is set every time we use the class.

CODE

public function db()
{
     $this->hostname = "Write your hostname here";
     $this->username = "Write your username here";
     $this->password = "Write your password here";
     $this->database = "Write your database name here";
}


Here you can see where to place the constructor:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
}    


The constructor runs every time you create an object of the class.

Now we can start to write our first function, the function that opens the connection to the database.

CODE

public function open_connection()
{
     try
     {
          $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
          $this->select_db = mysql_select_db($this->database);
     }
     catch(exception $e)
     {
          return $e;
     }
}


The function is placed under the constructor, but what does it do ?

the open_connection function trys to call the mysql_connect function and places the new conenction in the variable $this->connect, after that, it trys to select the right database and places the selected database in the variable $this->select_db, if the two trys returns any errors, then the function runs the Catch and returns the error message to the user.

Now our class look like:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
}


But, now the conenction is open, how about closing it ?

So now we create an function to close the connection, we can't let the database be open right.

CODE

     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }


We can place the function under the function thats opens the connection.

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
    
     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
}


Then, now its time to use our db class to something usefull, but how do we do that ?

First of all, we need to create some kind of function to handle all our queries to and from the database, so we don't need to rewrite it all the time, remember that an website uses a lot of queries to get all the content.

Lets start with the funtion to run queries.

CODE

public function query($sql)
{
     try
     {
          $this->open_connection();
          $sql = mysql_query($sql);
     }
     catch(exception $e)
     {
          return $e;
     }
     $this->close_connection();
     return $sql;
}


And what do that function do ?

The function opens the connection to the database and trys to run the query that the user writes, and returns the result to the user, so he or she can do whatever its needed to make the results readable for the viewer of the website.

Lets place it in the class:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
    
     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }

     public function query($sql)
     {
          try
          {
               $this->open_connection();
               $sql = mysql_query($sql);
          }
          catch(exception $e)
          {
               return $e;
          }
          $this->close_connection();
          return $sql;
     }
}


Now, we can start to use the class on our website, in the top of the index page, we starts by including the class, i have placed the class in a file called db.php.

CODE

<?PHP
     include('db.php');
?>


But thats not all, we need to initialize the class to use the functions.

CODE

<?PHP
     include('db.php');
     $db = new db();
?>


NOW we are ready to rock the web, lets make a simple test, to be sure that the class works.

CODE

<?PHP
     include('db.php');
     $db = new db();

     $db->query("SELECT data FROM table WHERE something = 'something'");
     if($sql)
     {
          while($r = mysql_fetch_array($sql))
          {
               echo $r['data'];
          }
     }
?>


This code should not work at all on your site, but gives you an idea of how you can use the class.

I hope that you can use this little guide to OOP Database connections.
Go to the top of the page
+Quote Post


Register to Make This Ad Go Away!

angrydwarfz
*



post 23 Jan, 2009 - 02:22 PM
Post #2
Great tutorial!
I have a question, though:
Is there a difference between assigning the according values to the user, host etc. in the constructor ( like you did ), and assigning them as we declare the properties?
php

class db
{
private $hostname='foo';
private $username='dude';
private $password='ilikepie';
private $database='dbnamegoeshere';
private $connect;
private $select_db;
}

Go to the top of the page
+Quote Post

mocker
Group Icon



post 23 Jan, 2009 - 04:06 PM
Post #3
If you include actual connection information in the class declaration, then your class is only usable for that exact connection, which pretty much defeats the whole re usability aspect of OOP.
In the tutorial it didn't parse any arguments for the constructor, but ideally the constructor would be passed in the actual hostname and other details, which it would then use. That way you can use the same general db class for all your connections.
Go to the top of the page
+Quote Post

Kuggi
Group Icon



post 24 Jan, 2009 - 01:09 AM
Post #4
QUOTE(angrydwarfz @ 23 Jan, 2009 - 02:22 PM) *

Great tutorial!
I have a question, though:
Is there a difference between assigning the according values to the user, host etc. in the constructor ( like you did ), and assigning them as we declare the properties?
php

class db
{
private $hostname='foo';
private $username='dude';
private $password='ilikepie';
private $database='dbnamegoeshere';
private $connect;
private $select_db;
}



You can do it both ways biggrin.gif
Go to the top of the page
+Quote Post

angrydwarfz
*



post 24 Jan, 2009 - 04:21 AM
Post #5
QUOTE(mocker @ 23 Jan, 2009 - 04:06 PM) *

If you include actual connection information in the class declaration, then your class is only usable for that exact connection, which pretty much defeats the whole re usability aspect of OOP.
In the tutorial it didn't parse any arguments for the constructor, but ideally the constructor would be passed in the actual hostname and other details, which it would then use. That way you can use the same general db class for all your connections.


Would it be efficient to create a parent class and then redefine the needed connection arguments in its children and using each of them for whatever connection we need?

php

class connection1 extends connection
{
private $database='anotherdb';
}
Go to the top of the page
+Quote Post

Kuggi
Group Icon



post 4 Feb, 2009 - 05:36 AM
Post #6
QUOTE(angrydwarfz @ 24 Jan, 2009 - 04:21 AM) *

QUOTE(mocker @ 23 Jan, 2009 - 04:06 PM) *

If you include actual connection information in the class declaration, then your class is only usable for that exact connection, which pretty much defeats the whole re usability aspect of OOP.
In the tutorial it didn't parse any arguments for the constructor, but ideally the constructor would be passed in the actual hostname and other details, which it would then use. That way you can use the same general db class for all your connections.


Would it be efficient to create a parent class and then redefine the needed connection arguments in its children and using each of them for whatever connection we need?

php

class connection1 extends connection
{
private $database='anotherdb';
}



It is more safe and normal to have the connection string at one place, so i don't think that you should do it that way.
Go to the top of the page
+Quote Post

Valek
Group Icon



post 8 Feb, 2009 - 08:11 PM
Post #7
QUOTE(mocker @ 23 Jan, 2009 - 07:06 PM) *

If you include actual connection information in the class declaration, then your class is only usable for that exact connection, which pretty much defeats the whole re usability aspect of OOP.


Indeed. Personally, I would recommend having a file called config.php that sets those variables. Something like this:

php
$config['host'] = "host";
$config['username'] = "username";
$config['password'] = "password";


And add this to your .htaccess file:

htaccess
<Files config.php>
order allow,deny
deny from all
</Files>


This will prevent others from accessing it externally, but will still allow your script to work with it.

You can load it up into a class like this (db.class.php):

php
class db {

public function __construct($config) {
mysql_connect($config['hostname'],$config['username'],$config['password']) or die("Could not connect!");
return true;
}

public function select_db($database) {
mysql_select_db($database) or die("Failed to select database!");
return true;
}
}


And pass it along like this:

php
require("config.php");
require("db.class.php");

$database = "Database you want to use. You can also set this in config.php if you prefer."
$db = new db($config);
$db->select_db($database);


Hope this is useful for you smile.gif

This post has been edited by Valek: 8 Feb, 2009 - 08:12 PM
Go to the top of the page
+Quote Post

surajm
*



post 27 Mar, 2009 - 03:01 AM
Post #8
QUOTE(Kuggi @ 18 Jan, 2009 - 06:05 AM) *

If you develop websites in PHP5 or later, you know to the 'new stuff' in PHP5 called OOP, this is a little guide to create a class to your website, so you can connect to your mysql database the OOP way.

First we create a class called "db".

CODE

<?PHP
class db
{
}
?>


We need some information to your database, so we can connect to the right one, we need information for the Hostname, Database name, username and password to the mysql database.

So now we create some variables to store the information:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;
}    


Before we can use the variables we need to set the information in the class contructor so the content of the variables is set every time we use the class.

CODE

public function db()
{
     $this->hostname = "Write your hostname here";
     $this->username = "Write your username here";
     $this->password = "Write your password here";
     $this->database = "Write your database name here";
}


Here you can see where to place the constructor:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
}    


The constructor runs every time you create an object of the class.

Now we can start to write our first function, the function that opens the connection to the database.

CODE

public function open_connection()
{
     try
     {
          $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
          $this->select_db = mysql_select_db($this->database);
     }
     catch(exception $e)
     {
          return $e;
     }
}


The function is placed under the constructor, but what does it do ?

the open_connection function trys to call the mysql_connect function and places the new conenction in the variable $this->connect, after that, it trys to select the right database and places the selected database in the variable $this->select_db, if the two trys returns any errors, then the function runs the Catch and returns the error message to the user.

Now our class look like:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
}


But, now the conenction is open, how about closing it ?

So now we create an function to close the connection, we can't let the database be open right.

CODE

     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }


We can place the function under the function thats opens the connection.

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
    
     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
}


Then, now its time to use our db class to something usefull, but how do we do that ?

First of all, we need to create some kind of function to handle all our queries to and from the database, so we don't need to rewrite it all the time, remember that an website uses a lot of queries to get all the content.

Lets start with the funtion to run queries.

CODE

public function query($sql)
{
     try
     {
          $this->open_connection();
          $sql = mysql_query($sql);
     }
     catch(exception $e)
     {
          return $e;
     }
     $this->close_connection();
     return $sql;
}


And what do that function do ?

The function opens the connection to the database and trys to run the query that the user writes, and returns the result to the user, so he or she can do whatever its needed to make the results readable for the viewer of the website.

Lets place it in the class:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
    
     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }

     public function query($sql)
     {
          try
          {
               $this->open_connection();
               $sql = mysql_query($sql);
          }
          catch(exception $e)
          {
               return $e;
          }
          $this->close_connection();
          return $sql;
     }
}


Now, we can start to use the class on our website, in the top of the index page, we starts by including the class, i have placed the class in a file called db.php.

CODE

<?PHP
     include('db.php');
?>


But thats not all, we need to initialize the class to use the functions.

CODE

<?PHP
     include('db.php');
     $db = new db();
?>


NOW we are ready to rock the web, lets make a simple test, to be sure that the class works.

CODE

<?PHP
     include('db.php');
     $db = new db();

     $db->query("SELECT data FROM table WHERE something = 'something'");
     if($sql)
     {
          while($r = mysql_fetch_array($sql))
          {
               echo $r['data'];
          }
     }
?>


This code should not work at all on your site, but gives you an idea of how you can use the class.

I hope that you can use this little guide to OOP Database connections.


I did a small change to this code. now it's working perfectly. please try and enjoy oop.

here is the code...

$sql=$db->query("SELECT data FROM table WHERE something = 'something'");
if($sql)
{
while($r = mysql_fetch_array($sql))
{
echo $r['data'];
}
}
Go to the top of the page
+Quote Post

stephen.clark
*



post 29 Mar, 2009 - 10:21 AM
Post #9
QUOTE(surajm @ 27 Mar, 2009 - 03:01 AM) *

QUOTE(Kuggi @ 18 Jan, 2009 - 06:05 AM) *

If you develop websites in PHP5 or later, you know to the 'new stuff' in PHP5 called OOP, this is a little guide to create a class to your website, so you can connect to your mysql database the OOP way.

First we create a class called "db".

CODE

<?PHP
class db
{
}
?>


We need some information to your database, so we can connect to the right one, we need information for the Hostname, Database name, username and password to the mysql database.

So now we create some variables to store the information:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;
}    


Before we can use the variables we need to set the information in the class contructor so the content of the variables is set every time we use the class.

CODE

public function db()
{
     $this->hostname = "Write your hostname here";
     $this->username = "Write your username here";
     $this->password = "Write your password here";
     $this->database = "Write your database name here";
}


Here you can see where to place the constructor:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
}    


The constructor runs every time you create an object of the class.

Now we can start to write our first function, the function that opens the connection to the database.

CODE

public function open_connection()
{
     try
     {
          $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
          $this->select_db = mysql_select_db($this->database);
     }
     catch(exception $e)
     {
          return $e;
     }
}


The function is placed under the constructor, but what does it do ?

the open_connection function trys to call the mysql_connect function and places the new conenction in the variable $this->connect, after that, it trys to select the right database and places the selected database in the variable $this->select_db, if the two trys returns any errors, then the function runs the Catch and returns the error message to the user.

Now our class look like:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
}


But, now the conenction is open, how about closing it ?

So now we create an function to close the connection, we can't let the database be open right.

CODE

     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }


We can place the function under the function thats opens the connection.

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
    
     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
}


Then, now its time to use our db class to something usefull, but how do we do that ?

First of all, we need to create some kind of function to handle all our queries to and from the database, so we don't need to rewrite it all the time, remember that an website uses a lot of queries to get all the content.

Lets start with the funtion to run queries.

CODE

public function query($sql)
{
     try
     {
          $this->open_connection();
          $sql = mysql_query($sql);
     }
     catch(exception $e)
     {
          return $e;
     }
     $this->close_connection();
     return $sql;
}


And what do that function do ?

The function opens the connection to the database and trys to run the query that the user writes, and returns the result to the user, so he or she can do whatever its needed to make the results readable for the viewer of the website.

Lets place it in the class:

CODE

<?PHP
class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = "Write your hostname here";
          $this->username = "Write your username here";
          $this->password = "Write your password here";
          $this->database = "Write your database name here";
     }
    
     public function open_connection()
     {
          try
          {
               $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
               $this->select_db = mysql_select_db($this->database);
          }
          catch(exception $e)
          {
               return $e;
          }
     }
    
     public function close_connection()
     {
          try
          {
               mysql_close($this->connect);
          }
          catch(exception $e)
          {
               return $e;
          }
     }

     public function query($sql)
     {
          try
          {
               $this->open_connection();
               $sql = mysql_query($sql);
          }
          catch(exception $e)
          {
               return $e;
          }
          $this->close_connection();
          return $sql;
     }
}


Now, we can start to use the class on our website, in the top of the index page, we starts by including the class, i have placed the class in a file called db.php.

CODE

<?PHP
     include('db.php');
?>


But thats not all, we need to initialize the class to use the functions.

CODE

<?PHP
     include('db.php');
     $db = new db();
?>


NOW we are ready to rock the web, lets make a simple test, to be sure that the class works.

CODE

<?PHP
     include('db.php');
     $db = new db();

     $db->query("SELECT data FROM table WHERE something = 'something'");
     if($sql)
     {
          while($r = mysql_fetch_array($sql))
          {
               echo $r['data'];
          }
     }
?>


This code should not work at all on your site, but gives you an idea of how you can use the class.

I hope that you can use this little guide to OOP Database connections.


I did a small change to this code. now it's working perfectly. please try and enjoy oop.

here is the code...

$sql=$db->query("SELECT data FROM table WHERE something = 'something'");
if($sql)
{
while($r = mysql_fetch_array($sql))
{
echo $r['data'];
}
}



This may be a dumb question but, but what would be the advantages/disadvantages to using mysql_pconnect, instead of mysql_connect and having to open and close the database connection for every query?
Go to the top of the page
+Quote Post

saturnx
*



post 28 May, 2009 - 03:27 AM
Post #10
Hi guys,

Just thought i'd share my 2cents. Can't say i am a guru and only just recently picked up PHP again after a 2year absence. Ventured into another language when i switched jobs.

in my config.php
CODE

/** The name of the database */
define('DB_NAME','dbname');

/** MySQL database username */
define('DB_USER','dbuser');

/** MySQL database password */
define('DB_PASSWORD','dbpassword');

/** MySQL hostname */
define('DB_HOST', 'dbhost');



in my class-db.php
CODE

class db
{
     private $hostname;
     private $username;
     private $password;
     private $database;
     private $connect;
     private $select_db;

     public function db()
     {
          $this->hostname = DB_HOST;
          $this->username = DB_USER;
          $this->password = DB_PASSWORD;
          $this->database = DB_NAME;
     }
    
    // rest of class functions ....
}


in my web application pages
CODE

require_once('config.php');
require_once('class-db.php');
$db = new db();


I used to use $config['DB_HOST'], etc in my config file, until recently when discovered the use of define(), and i found it an eyesore *hehe* to see db($config) within my code pages.
Go to the top of the page
+Quote Post

mochitto
*



post 17 Nov, 2009 - 02:41 PM
Post #11
How to use in class?

CODE

$db = new db();

class news {
//....
public function top(){
  //$db->query("SELECT * FROM news LIMIT 10"); ??
}
//...
}


Thank

This post has been edited by mochitto: 17 Nov, 2009 - 02:42 PM
Go to the top of the page
+Quote Post


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 


Lo-Fi Version Time is now: 11/21/09 12:11PM

Live Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

Tutorials

Programming

Web Development

Reference Sheets

Code Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month