Location: PHPKode > scripts > phpHoo3 > phphoo3/mysql.php.txt
<?

// phpHoo3 - a yahoo-like link directory written for PHP3/4
// Copyright (C) 1999/2001 Rolf V. Ostergaard http://www.cable-modems.org/phpHoo/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

Class MySQL
{
    var $DBASE;        // Name of database to use
    var $USER;         // Database username
    var $PASS;         // Database R/W password
    var $SERVER;       // Server name
    var $CAT_TBL;      // MySQL table name for the categories table
    var $LNK_TBL;      // MySQL table name for the links table

	var $CONN = "";
	var $TRAIL = array();

    // constructor:
    function MySQL()
    {
        global $SQL_DBASE;
        global $SQL_USER;
        global $SQL_PASS;
        global $SQL_SERVER;
        global $SQL_CAT_TBL;
        global $SQL_LNK_TBL;

        $this->DBASE = $SQL_DBASE;
        $this->USER  = $SQL_USER;
        $this->PASS  = $SQL_PASS;
        $this->SERVER = $SQL_SERVER;
        $this->CAT_TBL = $SQL_CAT_TBL;
        $this->LNK_TBL = $SQL_LNK_TBL;
    }

	function error($text)
	{
		$no = mysql_errno();
		$msg = mysql_error();
		echo "[$text] ( $no : $msg )<BR>\n";
		exit;
	}

	function init ()
	{
		$user = $this->USER;
		$pass = $this->PASS;
		$server = $this->SERVER;
		$dbase = $this->DBASE;

		$conn = mysql_connect($server,$user,$pass);
		if(!$conn) {
			$this->error("Connection attempt failed");
		}
		if(!mysql_select_db($dbase,$conn)) {
			$this->error("Dbase Select failed");
		}
		$this->CONN = $conn;
		return true;
	}

//	*****************************************************************
//						MySQL Specific methods
//	*****************************************************************


	function select ($sql="", $column="")
	{
		if(empty($sql)) { return false; }
		if(!eregi("^select",$sql))
		{
			echo "<H2>Wrong function silly!</H2>\n";
			return false;
		}
		if(empty($this->CONN)) { return false; }
		$conn = $this->CONN;
		$results = mysql_query($sql,$conn);
		if( (!$results) or (empty($results)) ) {
			mysql_free_result($results);
			return false;
		}
		$count = 0;
		$data = array();
		while ( $row = mysql_fetch_array($results))
		{
			$data[$count] = $row;
			$count++;
		}
		mysql_free_result($results);
		return $data;
	}

	function insert ($sql="")
	{
		if(empty($sql)) { return false; }
		if(!eregi("^insert",$sql))
		{
			echo "<H2>Wrong function silly!</H2>\n";
			return false;
		}
		if(empty($this->CONN))
		{
			echo "<H2>No connection!</H2>\n";
			return false;
		}
		$conn = $this->CONN;
		$results = mysql_query($sql,$conn);
		if(!$results)
		{
			echo "<H2>No results!</H2>\n";
			echo mysql_errno().":  ".mysql_error()."<P>";
			return false;
		}
		$results = mysql_insert_id();
		return $results;
	}

	function sql_query ($sql="")
	{
		if(empty($sql)) { return false; }
		if(empty($this->CONN)) { return false; }
		$conn = $this->CONN;
		$results = mysql_query($sql,$conn);
		if(!$results)
		{
			echo "<H2>Query went bad!</H2>\n";
			echo mysql_errno().":  ".mysql_error()."<P>";
			return false;
		}
		return $results;
	}

	function sql_cnt_query ($sql="")
	{
		if(empty($sql)) { return false; }
		if(empty($this->CONN)) { return false; }
		$conn = $this->CONN;
		$results = mysql_query($sql,$conn);
		if( (!$results) or (empty($results)) ) {
			mysql_free_result($results);
			return false;
		}
		$count = 0;
		$data = array();
		while ( $row = mysql_fetch_array($results))
		{
			$data[$count] = $row;
			$count++;
		}
		mysql_free_result($results);
		return $data[0][0];
	}


//	*****************************************************************
//						phpHoo Specific Methods
//	*****************************************************************

	function get_Cats ($CatParent= "")
	{
		if(empty($CatParent) || ($CatParent == "0"))
		{
			$CatParent = "IS NULL";
		} else {
			$CatParent = "= $CatParent";
		}
		$sql = "SELECT CatID,CatName FROM $this->CAT_TBL WHERE CatParent $CatParent ORDER BY CatName";
		$results = $this->select($sql);
		return $results;
	}

//	The primer for a recursive query
	function get_ParentsInt($CatID="")
	{
		if(empty($CatID) || ($CatID == "0")) { return false; }
		unset($this->TRAIL);
		$this->TRAIL = array();
		$this->get_Parents($CatID);
	}

//	Use get_ParentsInt(), NOT this one!
//	The power of recursive queries

	function get_Parents ($CatID="")
	{
		if( (empty($CatID)) or ("$CatID" == "NULL")) { return false; }
		$sql = "SELECT CatID,CatParent,CatName from $this->CAT_TBL where CatID = $CatID";

		$conn = $this->CONN;
		$results = mysql_query($sql,$conn);
		if( (!$results) or (empty($results)) ) {
			mysql_free_result($results);
			return false;
		}

		while ( $row = mysql_fetch_array($results))
		{
			$trail = $this->TRAIL;
			$count = count($trail);
			$trail[$count] = $row;
			$this->TRAIL = $trail;
			$id = $row["CatParent"];
			$this->get_Parents($id);
		}
		return true;
	}

	function get_CatIDFromName($CatName="")
	{
		if(empty($CatName)) { return false; }
		$sql = "SELECT CatID from $this->CAT_TBL where CatName = '$CatName'";
		$results = $this->select($sql);
		if(!empty($results))
		{
			$results = $results[0]["CatID"];
		}
		return $results;
	}

	function get_CatNames($CatID="")
	{
		if($CatID == 0) { return "Top"; }
		$single = false;
		if(!empty($CatID))
		{
			$single = true;
			$CatID = "WHERE CatID = $CatID";
		}
		$sql = "SELECT CatName from $this->CAT_TBL $CatID";
		$results = $this->select($sql);
		if($single)
		{
			if(!empty($results))
			{
				$results = $results[0]["CatName"];
			}
		}
		return $results;
	}

	function get_AllCats()
	{
        $cat = $this->CAT_TBL;
		$sql = "SELECT CatID,CatName FROM $cat";
		$results = $this->select($sql);
		return $results;
	}

	function get_Links($CatID = "")
	{
		if(empty($CatID))
		{
			$CatID = "= 0";
		} else {
			$CatID = "= $CatID";
		}

		$sql = "SELECT * FROM $this->LNK_TBL WHERE  (Approved != 0) AND CatID $CatID ORDER BY LinkName";
		$results = $this->select($sql);
		return $results;
	}

	function get_OneLink($LinkID = "")
	{
		if(empty($LinkID)) {
			$err_msg = "No LinkID given.";
			return false;
		}

		$sql = "SELECT * FROM $this->LNK_TBL WHERE LinkID=$LinkID";
		$results = $this->select($sql);
		return $results;
	}

	function get_Submissions()
	{
		$sql = "SELECT * FROM $this->LNK_TBL WHERE  (Approved = 0) ORDER BY Url";
		$results = $this->select($sql);
		return $results;
	}

	function get_CatFromLink($LinkID="")
	{
		if(empty($LinkID)) { return false; }
		$sql = "SELECT CatID FROM $this->LNK_TBL WHERE LinkID = $LinkID";
		$results = $this->select($sql);
		if(!empty($results))
		{
			$results = $results[0]["CatID"];
		}
		return $results;
	}

	// Check if a CatID is indeed in the table of valid categories
	function isValidCatID($CatID="")
	{
		if ($CatID=="") { return false; }
		if ($CatID=="0") { return true; }
		$sql = "SELECT * FROM $this->CAT_TBL WHERE CatID = $CatID";
		$results = $this->select($sql);
		if (empty($results)) { return false; }
		return true;
	}

	function search ($keywords = "")
	{
		if(empty($keywords)) { return false; }

		$DEBUG = ""; // set DEBUG == "\n" to see this query

		$keywords = trim(urldecode($keywords));
		$keywords = ereg_replace("([    ]+)"," ",$keywords);

		if(!ereg(" ",$keywords))
		{
			// Only 1 keyword
			$KeyWords[0] = "$keywords";
		} else {
			$KeyWords = explode(" ",$keywords);
		}

		$sql = "SELECT DISTINCT LinkID,CatID,Url,LinkName,Description FROM $this->LNK_TBL WHERE (Approved != 0) AND ( $DEBUG ";
		$count = count($KeyWords);

		if( $count == 1)
		{
			$single = $KeyWords[0];
			$sql .= " (Description LIKE '%$single%') OR (LinkName LIKE '%$single%') OR (Url LIKE '%$single%') ) ORDER BY LinkName $DEBUG ";
		} else {
			$ticker = 0;
			while ( list ($key,$word) = each ($KeyWords) )
			{
				$ticker++;
				if(!empty($word))
				{
					if($ticker != $count)
					{
						$sql .= " ( (Description LIKE '%$word%') OR (LinkName LIKE '%$word%') OR (Url LIKE '%$word%') ) OR $DEBUG ";
					} else {
						// Last condition, omit the trailing OR
						$sql .= " ( (Description LIKE '%$word%') OR (LinkName LIKE '%$word%') OR (Url LIKE '%$word%') ) $DEBUG ";
					}
				}
			}
			$sql .= " ) ORDER BY LinkName $DEBUG";
		}

		if(!empty($DEBUG)) { echo "<PRE>$sql\nTicker [$ticker]\nCount [$count]</PRE>\n"; }

		$results = $this->select($sql);
		return $results;
	}

	function suggest ($postData="",&$err_msg)
	{
		$err_msg="";

		if( (empty($postData)) or (!is_array($postData)) ) {
			$err_msg = "No data submitted or not an array of data";
			return false;
		}

		$CatID = $postData["CatID"];
		$Url = addslashes($postData["Url"]);
		$Description = addslashes($postData["Description"]);
		$LinkName = addslashes($postData["LinkName"]);
		$SubmitName = addslashes($postData["SubmitName"]);
		$SubmitEmail = addslashes($postData["SubmitEmail"]);
		$SubmitDate = time();

		if(!$this->isValidCatID($CatID)) {
			$err_msg = "Invalid category.";
			return false;
		}
		if(empty($Url)) {
			$err_msg = "No URL specified.";
			return false;
		}
		if(empty($Description)) {
			$err_msg = "No description given.";
			return false;
		}
		if(empty($LinkName)) {
			$err_msg = "No link name given.";
			return false;
		}
		if(empty($SubmitName)) {
			$err_msg = "No name given.";
			return false;
		}
		if(empty($SubmitEmail)) {
			if ($REQUIRE_SUBMIT_EMAIL) {
				$err_msg = "No email address given.";
				return false;
			} else {
				$SubmitEmail = "anonymous";
			}
		}

		$Approved = 0;
		if($this->AUTOAPPROVE) { $Approved = 1; }

		$sql = "INSERT INTO $this->LNK_TBL ";
		$sql .= "(CatID,Url,LinkName,Description,SubmitName,SubmitEmail,SubmitDate,Approved) ";
		$sql .= "values ";
		$sql .= "($CatID,'$Url','$LinkName','$Description','$SubmitName','$SubmitEmail',$SubmitDate,$Approved) ";
		$results = $this->insert($sql);

		// Set cookie to remember name and email
		setcookie("UserName", $SubmitName,time()+3600*24*30*6);
		setcookie("UserEmail", $SubmitEmail,time()+3600*24*30*6);

		return $results;
	}

	function update ($postData="",&$err_msg)
	{
		$err_msg="";

		if( (empty($postData)) or (!is_array($postData)) ) {
			$err_msg = "No data submitted or not an array of data";
			return false;
		}

		$LinkID = $postData["LinkID"];
		$CatID = $postData["CatID"];
		$Url = addslashes($postData["Url"]);
		$Description = addslashes($postData["Description"]);
		$LinkName = addslashes($postData["LinkName"]);
		$SubmitName = addslashes($postData["SubmitName"]);
		$SubmitEmail = addslashes($postData["SubmitEmail"]);
		$SubmitDate = time();

		if(!$this->isValidCatID($CatID)) {
			$err_msg = "Invalid category.";
			return false;
		}
		if(empty($Url)) {
			$err_msg = "No URL specified.";
			return false;
		}
		if(empty($Description)) {
			$err_msg = "No description given.";
			return false;
		}
		if(empty($LinkName)) {
			$err_msg = "No link name given.";
			return false;
		}
		if(empty($SubmitName)) {
			$err_msg = "No name given.";
			return false;
		}
		if(empty($SubmitEmail)) {
			if ($REQUIRE_SUBMIT_EMAIL) {
				$err_msg = "No email address given.";
				return false;
			} else {
				$SubmitEmail = "anonymous";
			}
		}

		$Approved = 0;
		if($this->AUTOAPPROVE) { $Approved = 1; }

		$sql = "UPDATE $this->LNK_TBL SET ";
		$sql .= "CatID=$CatID,";
		$sql .= "Url='$Url',";
		$sql .= "LinkName='$LinkName',";
		$sql .= "Description='$Description',";
		$sql .= "SubmitName='$SubmitName',";
		$sql .= "SubmitEmail='$SubmitEmail',";
		$sql .= "SubmitDate=$SubmitDate,";
		$sql .= "Approved=$Approved";
		$sql .= " WHERE LinkID='$LinkID'";
		$results = $this->sql_query($sql);
		return $results;
	}

	function approve ($LinkID="",&$err_msg)
	{
		$err_msg="";

		if(empty($LinkID)) {
			$err_msg = "No LinkID given.";
			return false;
		}

		$sql = "UPDATE $this->LNK_TBL SET Approved=1 WHERE LinkID='$LinkID'";
		$results = $this->sql_query($sql);
		return $results;
	}

	function disapprove ($LinkID="",&$err_msg)
	{
		$err_msg="";

		if(empty($LinkID)) {
			$err_msg = "No LinkID given.";
			return false;
		}

		$sql = "UPDATE $this->LNK_TBL SET Approved=0 WHERE LinkID='$LinkID'";
		$results = $this->sql_query($sql);
		return $results;
	}

	function delete_link ($LinkID="",&$err_msg)
	{
		$err_msg="";

		if(empty($LinkID)) {
			$err_msg = "No LinkID given.";
			return false;
		}

		$sql = "DELETE FROM $this->LNK_TBL WHERE LinkID='$LinkID'";
		$results = $this->sql_query($sql);
		return $results;
	}

	function add_cat ($postData="",&$err_msg)
	{
		$err_msg="";

		if( (empty($postData)) or (!is_array($postData)) ) {
			$err_msg = "No data submitted or not an array of data";
			return false;
		}

		$CatParent = $postData["CatID"];
		if (empty($CatParent) || ($CatParent == "0") || ($CatParent == "top")) {
			$CatParent = "NULL";
		}
		$CatName = addslashes($postData["NewCatName"]);

		if(empty($CatName)) {
			$err_msg = "No new category name given.";
			return false;
		}

		$sql = "INSERT INTO $this->CAT_TBL ";
		$sql .= "(CatName,CatParent) ";
		$sql .= "values ";
		$sql .= "('$CatName',$CatParent) ";
		$results = $this->insert($sql);
		return $results;
	}

	function get_approved_cnt ()
	{
		$sql = "select count(*) from $this->LNK_TBL where approved=1 ";
		$results = $this->sql_cnt_query($sql);
		return $results;
	}

	function get_not_approved_cnt ()
	{
		$sql = "select count(*) from $this->LNK_TBL where approved=0 ";
		$results = $this->sql_cnt_query($sql);
		return $results;
	}

	// Return number of approved links in a specific category
	function get_LinksInCat_cnt($CatID="")
	{
		if(empty($CatID)) { return 0; }
		$sql = "select count(*) from $this->LNK_TBL where CatID=$CatID and approved=1";
		$results = $this->sql_cnt_query($sql);
		return $results;
	}

	// Return number of subcategories in a specific category
	function get_CatsInCat_cnt($CatID="")
	{
		if(empty($CatID)) { return 0; }
		$sql = "select count(*) from $this->CAT_TBL where CatParent=$CatID ";
		$results = $this->sql_cnt_query($sql);
		return $results;
	}

	// Watch out: another recursive query!
	// Returns the total number of links in the category and all subcategories thereof.
	function get_TotalLinksInCat_cnt($CatID="")
	{
		if(empty($CatID) || ($CatID == "0")) { return "0"; }
		$sum = 0;

		// Sum all subcategories from here

		$sql = "SELECT * from $this->CAT_TBL where CatParent = $CatID";
		$conn = $this->CONN;
		$results = mysql_query($sql,$conn);
		if( (!$results) or (empty($results)) ) {
			mysql_free_result($results);
			return ($sum);
		}

		while ($row = mysql_fetch_array($results))
		{
			$id = $row["CatID"];
			$sum = $sum + $this->get_TotalLinksInCat_cnt($id);
		}

		// Then add this category

		$sum = $sum + $this->get_LinksInCat_cnt($CatID);

		return ($sum);
	}

}	//	End Class
?>
Return current item: phpHoo3