Tag: class

PHP MySQL class example

by Matt Danger on Feb.27, 2007, under PHP

Here is an example of a PHP 4.2 MySQL connector class. It handles all basic database queries and input filtering and validation.

<?php
 
/****************************************************
*
* File:    class.mysql.php
* Author:  Matt West, http://mattdanger.net
* Date:    February 22, 2007
* Purpose: MySQL Class
*
****************************************************/
 
class MySQL_Connection {
 
	// Private variables
    var $handler;
    var $hostname;
    var $username;
    var $password;
    var $database;
 
	// Public variables
    var $result;
    var $num_rows;
 
    /**
     * Constructor: Construct the object.
     * @param string $hostname  Hostname of MySQL server (Default: localhost) 
     * @param string $username  Your MySQL account username
     * @param string $password  Your MySQL account password
     * @param string $database  The MySQL database to connect to
     */
    function MySQL_Connection($hostname, $username, $password, $database) {
 
        $this->hostname = $hostname;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
        $this->connect();
        $this->select_db();
 
    }
 
    /**
     * Destructor: Clean up
     */
    function __destruct() {
 
        $this->db_close();
 
    }
 
    /**
     * throw_error(): Print an error message
     * @param string $message   A descriptive error message that will print when invoked
     */
    function throw_error($message, $line = 0){
 
        $line = ( !empty($line) ) ? $line = ' on line ' . $line : '' ;
        die ('There was an error on line' . $line .' in class "' . __CLASS__ . '": ' . $message);
 
    }
 
    /**
     * connect(): Connect to MySQL
     */
    function connect() {
 
        $this->handler = mysql_pconnect($this->hostname, $this->username, $this->password) or $this->throw_error(mysql_error(), __LINE__);
 
    }
 
    /**
     * select_db(): Select the MySQL database
     */
    function select_db() {
 
        mysql_select_db($this->database, $this->handler) or $this->throw_error(mysql_error(), __LINE__);
 
    }
 
    /**
     * select(): Select a row or rows from the DB
     * @param string $table     Table name
     * @param array $columns    Either '*' or a list of columns to select
     * @param array $where      column => value
     * @param array $order_by   column1 => DESC, column2 => ASC
     * @param array $limit      1 or 30 or 0, 30 or 30, 60 (etc)
     * @param bool $debug       Returns query string if true
     * @returns MySQL resource
     */
    function select($table, $columns, $where = '', $order_by = '', $limit = '', $debug = 0) {
 
        if ( $table == '' || !sizeof($columns)) { return; }
 
        // Set up columns
        $tmp = '';
        if ( $columns != '*' ) {
 
            if ( is_array($columns) ) {
 
                foreach($columns as $column) {
 
                    $data .= '`' . $column . '`, ';
 
                }
 
                $columns = preg_replace( "/, $/" , "" , $data);
 
            } else {
 
                $columns = '`' . $columns . '`';
 
            }
 
        }
 
        // Set up the WHERE
        if ( !empty($where) ) {
 
            $tmp = '';
            foreach ($where as $key => $val) {
 
                $tmp .= '`' . $key . "` = '" . $this->escape_str($val) . "' AND ";
 
            }
 
            $where = ' WHERE ' . preg_replace( "/ AND $/" , "" , $tmp);
 
        }
 
        // Set up the ORDER BY
        $tmp = '';
        if ( !empty($order_by) ) {
 
            if ( is_array($order_by) ) {
 
                foreach($order_by as $val => $order) {
 
                    $tmp .= '`' . $val . '` ' . $order . ', ';
 
                }
 
                $order_by = ' ORDER BY ' . preg_replace( "/, $/" , "" , $tmp);
 
            } else {
 
                $order_by = ' ORDER BY ' . $order_by . ' DESC';
 
            }
 
        }
 
        // Set up the LIMIT
        $tmp = '';
        if ( !empty($limit) ) {
 
            if ( is_array($limit) ) {
 
                foreach ($limit as $num) {
 
                    $tmp .= $num . ', ';
 
                }
 
                $limit = ' LIMIT ' . preg_replace( "/, $/" , "" , $tmp);
 
            } else {
 
                $limit = ' LIMIT ' . $limit;
 
            }
 
        }
 
        $query = 'SELECT ' . $columns . ' FROM `' . $table . '`' . $where . $order_by . $limit;
 
        // Return query string for debugging purposes or just do the query
        if ( $debug ) {
 
            return $query;
 
        } else {
 
            // Perform the query
            return $this->query($query);
 
        }
 
 
    }
 
    /**
     * insert(): Insert data into a table
     * @param string $table Table to insert into
     * @param array $data   The column name & data
     * @param boolean $slashes True if you want to add 's to the string
     * @returns boolean True if successful, false if not.
     */
    function insert($table, $data, $slashes = false) {
 
        if ( $table == '' || $data == '' ) { return; }
 
        $fields = '';      
        $values = '';
 
        foreach($data as $key => $val) {
 
            $fields .= '`' . $key . '`, ';
            $val = ( $slashes == true ) ? addslashes($val) : $val;
            $values .= "'" . addslashes( stripslashes($val) ) . "'" . ', ';
 
        }
 
        $fields = preg_replace( "/, $/" , "" , $fields);
        $values = preg_replace( "/, $/" , "" , $values);
 
        mysql_query('INSERT INTO `' . $table . '` (' . $fields . ') VALUES (' . $values . ')', $this->handler) or $this->throw_error(mysql_error(), __LINE__);
 
    }
 
    /**
     * update(): Update data into a table
     * @param string $table Table to insert into
     * @param array $data   The column name & data
     * @param boolean $slashes True if you want to add 's to the string
     * @returns boolean True if successful, false if not.
     */
    function update($table, $data, $where, $slashes = false) {
 
        if ( $table == '' || $data == '' || $where == '') { return; }
 
        $string  = '';
        $tmp = '';
 
        foreach($data as $key => $val) {
            $string .= '`' . $key . "` = '" . $this->escape_str($val) . "', ";
        }
 
        $string = preg_replace( "/, $/" , "" , $string);
 
        if ( is_array($where) ) {
 
            foreach ($where as $key => $val) {
 
                $tmp .= $key . " = '" . $this->escape_str($val) . "' AND ";
 
            }
 
            $where = preg_replace( "/AND $/" , "" , $tmp);
 
        } else {
 
            $where = $where;
 
        }
 
        mysql_query('UPDATE `' . $table . '` SET ' . $string . ' WHERE ' . $where, $this->handler) or $this->throw_error(mysql_error(), __LINE__);
 
    }
 
    /**
     * delete(): Delete a row from a table
     * @param string $table Table to insert into
     * @param array $data   The column name & data
     */
    function delete($table, $data) {
 
        if ( $table == '' || $data == '') { return; }
 
        mysql_query('DELETE FROM `' . $table . '` WHERE `' . key($data) . "` = '" . $data[key($data)] . "'", $this->handler) or $this->throw_error(mysql_error(), __LINE__);
 
    }
 
    /**
     * query(): Query from MySQL. 
     * @param string $query The MySQL query
     * @returns MySQL resource
     *
     * Warning: This function is only ment to be called manually if being used in 
     * a development environment because it does not do any input validation.
     */
    function query($query) {
 
        if ( $query == '') { return; }
 
        $this->result = mysql_query($query, $this->handler) or $this->throw_error(mysql_error(), __LINE__);
        $this->num_rows = mysql_num_rows($this->result);
 
        if ($this->num_rows > 1) {
 
            $tmp_array = array();
            while ($row = mysql_fetch_assoc($this->result)) {
 
                array_push($tmp_array, $row);
 
            }
 
            $this->result = $tmp_array;
            return $this->result;
 
        } else {
 
            $this->result = mysql_fetch_assoc($this->result);
            return $this->result;
        }
 
    }
 
    function escape_str($string) {
 
    	if ( is_array($string) ) {
 
    		foreach($string as $key => $val) {
 
    			$str[$key] = $this->escape_str($val);
 
    		}
 
    		return $str;
    	}
 
    	if ( function_exists('mysql_escape_string') ) {
 
			return mysql_escape_string( stripslashes($string) );
 
		} else {
 
        	return addslashes( stripslashes($string) );
 
    	}
 
    }
 
 
    /**
     * close_connection(): Close connection to MySQL
     */
    function db_close(){
 
        mysql_close($this->handler);
 
    }
 
}
?>
Leave a Comment :, , more...

PHP 5 Email Class

by Matt Danger on Jan.25, 2007, under PHP

Here is an example class that you can use to send email to users. It includes a properly formatted email body meta information that should avoid most spam filters.

<?php
 
/****************************************************
*
* File:     class.email.php
* Purpose:  Email Class
* Author:   Matt West, http://mattdanger.net
* Date:     January 25, 2007
*
****************************************************/
 
class Email {
 
    // Public variables
    public $recipient;
    public $sender;
    public $reply_to;
    public $subject;
    public $body;
    public $cc;
    public $bcc;
    public $headers;
 
    /**
     * Constructor: Read in $file.
     * @param string $to        Recipient
     * @param array $from       "Sender's Name" => "Sender's Email"
     * @param string $subject   Email subject
     * @param string $body      Email body
     */
    public function __construct ($to, $from = array(), $subject, $body) {
 
        // Set receiver
        $this->receiver($to);
 
        // Set sender
        if ( !empty($from) ) {
 
            $this->sender = array( key($from) => $from[ key($from) ] );
 
        } else {
 
            $this->sender = array( $_SERVER['SERVER_ADMIN'] => $_SERVER['SERVER_ADMIN'] . '@' . $_SERVER['SERVER_NAME'] );
 
        }
 
        // Set subject
        $this->subject($subject);
 
        // Set body
        $this->body($body);
 
    }
 
    /**
     * receiver(): Set receiver of the email
     * @param array $send_to List of Names & Email addresses
     */
    public function receiver ($send_to) {
 
        foreach ($send_to as $name => $email) {
 
            if ( $this->email_is_valid($email) ) {
 
                if ( !is_numeric($name) ) { 
 
                    $this->recipient = ucfirst($name) . ' <' . $email . '>';
 
                } else {
 
                    $this->recipient = $email;
 
                }
 
                $this->recipient .= ', ';
 
            } else { 
 
                exit( $email . " is not a valid email address." ); 
 
            }
 
        }
 
        $this->recipient = preg_replace('/, $/', '', $this->recipient);
 
    }
 
    /**
     * sender(): Set send of the email
     * @param array $sender Name & Email address
     */
    public function sender ($sender) {
 
        if ( email_is_valid($sender[0]) ) {
 
            if ( !is_numeric( key($sender) ) ) { 
 
                $this->sender = ucfirst( key($sender) ) . ' <' . $email . '>';
 
            } else {
 
                $this->sender = $sender[0];
 
            }
 
        } else {
 
            exit( $sender[0] . " is not a valid email address." ); 
 
        }
 
    }
 
    /**
     * reply_to(): Set send of the email
     * @param array $reply_to Name & Email address
     */
    public function reply_to ($reply_to) {
 
        if ( email_is_valid($reply_to[0]) ) {
 
            if ( !is_numeric( key($reply_to) ) ) { 
 
                $this->reply_to = ucfirst( key($reply_to) ) . ' <' . $email . '>';
 
            } else {
 
                $this->reply_to = $sender[ key($reply_to) ];
 
            }
 
        } else {
 
            exit( $reply_to[0] . " is not a valid email address." ); 
 
        }
 
    }
 
    /**
     * cc(): Set Cc of the email
     * @param array $cc List of Names & Email addresses
     */
    public function cc ($cc) {
 
        foreach ($cc as $name => $email) {
 
            if ( email_is_valid($email) ) {
 
                if ( !is_numeric($name) ) { 
 
                    $this->cc = ucfirst($name) . ' <' . $email . '>';
 
                } else {
 
                    $this->cc = $email;
 
                }
 
                $this->cc .= ', ';
 
            } else { 
 
                exit( $email . " is not a valid email address." ); 
 
            }
 
        }
 
        $this->cc = preg_replace('/, $/', '', $this->to);
 
    }
 
    /**
     * bcc(): Set Bcc of the email
     * @param array $bcc List of Names & Email addresses
     */
    public function bcc ($bcc) {
 
        foreach ($bcc as $name => $email) {
 
            if ( !is_numeric($name) ) { 
 
                $this->bcc = ucfirst($name) . ' <' . $email . '>';
 
            } else {
 
                $this->bcc = $email;
 
            }
 
            $this->bcc .= ', ';
 
        }
 
        $this->bcc = preg_replace('/, $/', '', $this->to);
 
    }
 
    /**
     * set_headers(): Set email headers
     */
    public function set_headers () {
 
        $this->set_from();
 
        $this->headers  = "MIME-Version: 1.0rn"
                        . "From: ". $this->sender . "rn"
                        . "To: " . $this->recipient . "rn";
 
        if ( !empty($this->reply_to) ) $this->headers .= "Reply-To: " . $this->reply_to . "rn";
        if ( !empty($this->cc) ) $this->headers .= "Cc: " . $this->cc . "rn"; 
        if ( !empty($this->bcc) ) $this->headers .= "Bcc: " . $this->bcc . "rn"; 
 
        $this->headers .= "X-Priority: 1rn"
                        . "X-Mailer: PHP/" . phpversion() . "rn"
                        . "Content-type: text/html; charset=iso-8859-1rn";
 
    }
 
    /**
     * subject(): Sets the subject of the email.
     * @param string $subject The subject message.
     */
    public function subject ($subject) {
 
        // Strip any newlines
        $this->subject = str_replace('n', '', $subject);
 
    }
 
    /**
     * body(): Sets the body message of the email.
     * @param string $body The body message.
     */
    public function body ($body) {
 
        $this->body = $body;
 
    }
 
    /**
     * send(): Send the email
     * @returns boolean True if successful, false if not.
     */
    public function send () {
 
        if (mail ( $this->recipient, $this->subject, $this->body, $this->headers)) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * email_is_valid():    Check whether email address is valid
     * @param string $email Email address to check
     * @returns boolean     True if address is valid, false if not.
     */
    private function email_is_valid ($email) {
 
        if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
}
 
?>
Leave a Comment :, , more...

PHP photo resizing class example

by Matt Danger on Jan.12, 2007, under PHP

Here is an example of a PHP class that manages simple photo resizing and saving using the GD library.

<?php
 
/****************************************************
*
* Purpose: Photo Resizing Class
* Author:  Matt West, http://mattdanger.net
* Date:    January 12th, 2007
*
****************************************************/
 
class Photo {
 
    // Private variables
    private $orig_image;
    private $portrait_frame;    // 1 = Landscape, 2 = Portrait
    private $image_size;
    private $src_width;
    private $src_height;
    private $src_image;
    private $dest_height;
    private $dest_width;
    private $dest_image;
    private $ratio;
    private $scale;
 
    // Public variables
    public $allowed_types = array('jpeg', 'jpg', 'png', 'gif');
 
    /**
     * Constructor:         Contruct the photo object
     * @param array $photo  Array of photo data, usually $_FILES['photo_name']
     */
    public function __construct($photo) {
 
        $this->photo($photo);
 
    }
 
    /**
     * photo():             Create new image resource
     * @param string $photo Array of photo data
     */
    public function photo($photo) {
 
        $this->orig_image = $photo;
 
        // Confirm photo is an allowed type;
        if ( !in_array(ereg_replace('image/', '', $this->orig_image['type']), $this->allowed_types) ) {
 
            exit("Photo type is '" . $this->orig_image['type'] . "' which is not allowed");
 
        }
 
        // Get image X and Y values in order to determine photo framing
        $this->image_size = getimagesize($this->orig_image['tmp_name']);
        $this->src_width = $this->image_size[0];
        $this->src_height = $this->image_size[1];
        $this->dest_height = 0;
 
        // 1 = Landscape, 2 = Portrait
        $this->photo_framing = ($this->src_width > $this->src_height) ? 1 : 2 ;
 
        // Calculate the ratio at which to resize based on the dimentions
        $this->ratio = $this->src_width / $this->src_height;
 
    }
 
    /**
     * scale_to_width():    Sets the width of the resize value
     * @param int $width    Width in pixels
     * @returns boolean     Returns true if successful, false if it was not.
     */
    public function scale_to_width($width) {
 
        // Set the destination width value
        $this->dest_width = $width;
 
        // Calculate the value at which to scale the image
        $this->scale = ($this->ratio) ? $this->dest_width / $this->src_width : $this->dest_height / $this->src_height; 
 
        if ($this->scale_image()) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * scale_to_height():   Sets the height of the resize value
     * @param int $height   Height in pixels
     * @returns boolean     Returns true if successful, false if it was not.
     */
    public function scale_to_height($height) {
 
        // Set the destination height value
        $this->dest_height = $height;
 
        // Calculate the ratio at which to resize based on the dimentions
        $this->ratio = $this->src_width / $this->src_height;
 
        // Calculate the value at which to scale the image
        $this->scale = ($this->ratio) ? $this->dest_height / $this->src_height : $this->dest_width / $this->src_width ; 
 
        if ($this->scale_image()) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * scale_image():   Resize image proportionally
     * @returns boolean Returns true if successful, false if it was not.
     */
    private function scale_image () {
 
        if ($this->scale > 1) {
 
            exit ("The scale width supplied is larger than the original image. Please try a smaller number.");
 
        }
 
        $this->dest_width = $this->src_width * $this->scale;
        $this->dest_height = $this->src_height * $this->scale;
 
        if ( $this->dest_width >= $this->src_width && $this->dest_width >= $this->src_width ) $this->scale = 1;
 
        $this->src_image = imagecreatefromjpeg ($this->orig_image['tmp_name']);
 
        $this->dest_image = imagecreatetruecolor ($this->src_width * $this->scale, $this->src_height * $this->scale);
 
        if ( imagecopyresampled(   $this->dest_image, 
                                    $this->src_image, 
                                    0, 0, 0, 0, 
                                    $this->dest_width, 
                                    $this->dest_height, 
                                    $this->src_width, 
                                    $this->src_height) ) { 
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * save_photo():            Saves the resized photo
     * @param string $filename  The path and filename to save the file (ex: "/path/to/image.jpg")
     * @param int $compression  A number from 1-100 representing the level of compression. 100 is the least compression.
     * @returns boolean         Returns true if save was successful, false if it was not.
     */
    public function save_photo ($filename, $compression = 80) {
 
        if ( imagejpeg($this->dest_image, $filename, $compression) ) {
 
            $return_value = true;
 
        } else {
 
            $return_value = false;
 
        }
 
        imagedestroy($this->src_image);
        imagedestroy($this->dest_image);
        return $return_value;
 
    }
 
}
 
?>
Leave a Comment :, , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Send me a message on AIM!

Friends

Read what I read...