class Error
{
function Fatal($indentifyer, $message, $sql = 0, $query = "", $error = "")
{
if($sql == 1 && _ERROR_EMAIL != "")
{
/* $GLOBALS["tml"]->RegisterVar("QUERY", $query);
$GLOBALS["tml"]->RegisterVar("ERROR", $error);
$GLOBALS["tml"]->RegisterVar("DATE", date("l F d Y"));
$GLOBALS["tml"]->LoadFromFile("emails/error");
$GLOBALS["tml"]->Parse(1);
$GLOBALS["main"]->SendMail(_ERROR_EMAIL, "SQL database error", $GLOBALS["tml"]->GetParsedContent()); */
}
if($sql == 1)
//$GLOBALS["main"]->WriteToLog("mysql_errors", "SQL error in query \"$query\" - \"$error\"");
exit(_ERROR_HANDLING == "HIDE" ? "A fatal error has occured, please try again later." : "Fatal error from $indentifyer:
$message");
}
function Warning($indentifyer, $message)
{
echo "
Warning from $indentifyer: $message
\n";
}
function Report($error_code, $error_msg, $layout = 0, $back = 0, $back_url = 0)
{
//echo "hier komt de error te staan";
if ($layout == 0) { echo MyHeader(); }
$message = "";
switch ($error_code) {
case 0:
$message .= "".$error_msg."";
break;
case 1:
$message .= "[1] dbserver not available";
break;
case 2:
$message .= "[2] dbselect failed";
break;
case 3:
$message .= "U moet zijn ingelogd om deze pagina te kunnen bekijken!
Denkt u toch te zijn ingelogd, probeer dan deze pagina te vernieuwen.";
break;
case 5:
$message .= "U heeft één of meerdere velden leeg gelaten!";
break;
case 6:
$message .= "Uw ip is tijdens uw ingelogde sessie met onze website veranderd, u zich dient opnieuw in te loggen.";
break;
case 7:
$message .= "Uw gebruikers_id is wegens onbekende reden niet gevonden in uw sessie, u dient zich opnieuw in te loggen.";
break;
case 404:
$message .= "De pagina kan niet worden gevonden...";
break;
case 403:
$message .= "U heeft geen toegang tot deze pagina!";
break;
case 500:
$message .= "Er is een interne server fout opgetreden.";
break;
default:
$message .= "[0] undiscribed error occured";
break;
}
switch ($back) {
case 0:
$message .= "
Klik hier om terug te gaan";
break;
case 1:
$message .= "
Klik hier om terug te gaan";
break;
}
$message .= "
";
if ($layout == 0) { $message .= MyFooter(); }
return $message;
}
}
$error = new Error;
?>
class Database
{
var $queries = 0;
var $connection = NULL;
var $queryHandle = Array();
var $t_delta = Array();
var $t_start = Array();
var $t_stop = Array();
function Database()
{
if(!$this->IsConnected())
$this->TryConnection();
}
function IsConnected()
{
return (isset($this->connection));
}
function TryConnection()
{
$this->Connect(_DB_SERVER, _DB_USER, _DB_PASS, _DB_NAME);
}
function Connect($server, $user, $pass, $name)
{
$this->connection = @mysql_connect($server, $user, $pass) or Error::Fatal(__FILE__, "Cannot connect to the database ('$server' with user '$user'), MySQL said: " . mysql_error());
@mysql_select_db($name) or Error::Fatal(__FILE__, "Cannot select the database ($name), MySQL said: " . mysql_error());
}
function Query($SQL, $l = 1, $show_error = 1)
{
if (isset($_SESSION['adm_conf_debug']) && ($_SESSION['adm_conf_debug'] == 'on'))
$this->_Start($SQL);
$this->queryHandle[$l] = @mysql_query($SQL) or Error::Fatal(__FILE__, "Error in query ($SQL), MySQL said: " . mysql_error(), $show_error, $SQL, mysql_error());
if (isset($_SESSION['adm_conf_debug']) && ($_SESSION['adm_conf_debug'] == 'on'))
$this->_Stop($SQL);
$this->queries++;
if(!preg_match("/^INSERT INTO|^REPLACE|^UPDATE|^DELETE/s", scan($SQL)))
{
return $this->NumRows($l);
}
else
return true;
}
function LastInsertID()
{
return @mysql_insert_id();
}
function Fetch($SQL, $l = 1, $show_error = 1)
{
$data = '';
$num = $this->Query($SQL, $l, $show_error);
if($num == 1)
$data = $this->NextRow($l);
if(count($data) == 2)
{
return $data[0];
}
else
return $data;
}
function NextRow($l = 1)
{
$data = @mysql_fetch_array($this->queryHandle[$l]);
return $data;
}
function NumRows($l = 1)
{
return @mysql_num_rows($this->queryHandle[$l]);
}
function _Timer_Poll()
{
list($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}
function _Start($what)
{
$this->t_start[$what][] = $this->_Timer_Poll();
}
function _Stop($what)
{
$i = count($this->t_start[$what]) - 1;
$this->t_stop[$what][$i] = $this->_Timer_Poll();
$this->t_delta[$what][$i] = $this->t_stop[$what][$i] - $this->t_start[$what][$i];
}
function Debug()
{
$this->_Stop("base");
$total = 0;
$output = "
";
$output .= "| Query | Seconds |
";
foreach($this->t_delta AS $what => $delta)
{
$whatShort = substr($what, 0, 95);
if($whatShort != $what)
$whatShort .= "..";
$d = "";
foreach($delta AS $i)
{
$d += $i;
$total += $i;
}
//$d = number_format($d, 5);
if($whatShort == "base")
{
$whatShort = "Total (" . $whatShort . ")";
//$output .= "| " . $this->SQLHighlight($whatShort) . " | ".number_format($d, 5)." |
\n";
$output .= "| Total (sql) | " . number_format($total-$d, 5) . " |
\n";
$_SESSION['adm_var_sql_time'] = number_format($total-$d, 5);
}
else
{
$output .= "| " . $this->SQLHighlight($whatShort) . " | ". number_format($d, 5)." |
\n";
}
}
$output .= "
";
return $output;
}
function GetDef($table)
{
$def = "";
$def .= "DROP TABLE IF EXISTS $table;#%%\r\n";
$def .= "CREATE TABLE $table (\r\n";
$this->Query("SHOW FIELDS FROM $table");
while($row = $this->NextRow())
{
$def .= " $row[Field] $row[Type]";
if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
if ($row["Null"] != "YES") $def .= " NOT NULL";
if ($row[Extra] != "") $def .= " $row[Extra]";
$def .= ",\r\n";
}
$def = ereg_replace(",\r\n$","", $def);
$this->Query("SHOW KEYS FROM $table");
while($row = $this->NextRow())
{
$kname = $row[Key_name];
if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
if(!isset($index[$kname])) $index[$kname] = array();
$index[$kname][] = $row[Column_name];
}
while(list($x, $columns) = @each($index))
{
$def .= ",\r\n";
if($x == "PRIMARY") $def .= " PRIMARY KEY (".implode($columns, ", ").")";
else if (substr($x,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($x,7)." (".implode($columns, ", ").")";
else $def .= " KEY $x (".implode($columns, ", ").")";
}
$def .= "\r\n);#%%";
return (stripslashes($def));
}
function GetContent($table)
{
$content = "";
$this->Query("SELECT * FROM $table");
while($row = $this->NextRow())
{
$insert = "INSERT INTO $table VALUES (";
for($j = 0;$j < mysql_num_fields($this->queryHandle[1]);$j++)
{
if(!isset($row[$j]))
$insert .= "NULL,";
elseif($row[$j] != "")
$insert .= "'" . addslashes($row[$j]) . "',";
else
$insert .= "'',";
}
$insert = substr($insert, 0, -1);
$insert .= ");#%%\r\n";
$content .= $insert;
}
return $content;
}
function BackUp($fileName, $auto = false)
{
if($auto)
$txt = "(automatically) ";
$newfile = "# Dump " . $txt . "created with Create Your GetPaid " . _SYSTEM_VERSION . " on " . (date("Y-m-d H:i")) . "\r\n";
$tables = mysql_list_tables(_DB_NAME);
$num_tables = @mysql_num_rows($tables);
$time0 = time();
$i = 0;
while($i < $num_tables)
{
$table = mysql_tablename($tables, $i);
$newfile .= "\r\n# ----------------------------------------------------------\r\n#\r\n";
$newfile .= "# Table structure for table '$table'\r\n#\r\n\r\n";
$newfile .= $this->GetDef($table);
$newfile .= "\r\n\r\n";
$newfile .= "#\r\n# Dumping data for table '$table'\r\n#\r\n\r\n";
$newfile .= $this->GetContent($table);
$newfile .= "\r\n\r\n";
$i++;
$time1 = time();
if($time1 >= $time0 + 30)
{
$time0 = $time1;
header('X-pmaPing: Pong');
}
}
$fp = fopen(_BACKUP_PATH . $fileName, "w");
fwrite($fp, $newfile);
fclose($fp);
}
// The function below comes from the following website:
// http://www.3site.it/varie/sql_highlighter.html
function SQLHighlight($st, $upper_sintax = false, $case_insensitive = false, $stringtext="#222299", $sintaxcolor="#C00000", $number="#00C000", $background="#FFFFFF")
{
$l_ar = "ADD|ALL|ALTER|ANALYZE|AND|AS|ASC|AUTO_INCREMENT|BDB|BERKELEYDB|BETWEEN|BIGINT|BINARY|BLOB|BOTH|BY|CASCADE|CASE|CHANGE|CHAR|CHARACTER|COLUMN|COLUMNS|CONSTRAINT|COUNT|CREATE|CROSS|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|DATABASE|DATABASES|DAY_HOUR|DAY_MINUTE|DAY_SECOND|DEC|DECIMAL|DEFAULT|DELAYED|DELETE|DESC|DESCRIBE|DISTINCT|DISTINCTROW|DOUBLE|DROP|ELSE|ENCLOSED|ESCAPED|EXISTS|EXPLAIN|FIELDS|FLOAT|FOR|FOREIGN|FROM|FULLTEXT|FUNCTION|GRANT|GROUP|HAVING|HIGH_PRIORITY|HOUR_MINUTE|HOUR_SECOND|IF|IGNORE|IN|INDEX|INFILE|INNER|INNODB|INSERT|INT|INTEGER|INTERVAL|INTO|IS|JOIN|KEY|KEYS|KILL|LEADING|LEFT|LIKE|LIMIT|LINES|LOAD|LOCK|LONG|LONGBLOB|LONGTEXT|LOW_PRIORITY|MASTER_SERVER_ID|MATCH|MEDIUMBLOB|MEDIUMINT|MEDIUMTEXT|MIDDLEINT|MINUTE_SECOND|MRG_MYISAM|NATURAL|NOT|NULL|NUMERIC|ON|OPTIMIZE|OPTION|OPTIONALLY|OR|ORDER|OUTER|OUTFILE|PARTIAL|PRECISION|PRIMARY|PRIVILEGES|PROCEDURE|PURGE|READ|REAL|REFERENCES|REGEXP|RENAME|REPLACE|REQUIRE|RESTRICT|RETURNS|REVOKE|RIGHT|RLIKE|SELECT|SET|SHOW|SMALLINT|SONAME|SQL_BIG_RESULT|SQL_CALC_FOUND_ROWS|SQL_SMALL_RESULT|SSL|STARTING|STRAIGHT_JOIN|STRIPED|TABLE|TABLES|TERMINATED|THEN|TINYBLOB|TINYINT|TINYTEXT|TO|TRAILING|UNION|UNIQUE|UNLOCK|UNSIGNED|UPDATE|USAGE|USE|USER_RESOURCES|USING|VALUES|VARBINARY|VARCHAR|VARYING|WHEN|WHERE|WITH|WRITE|XOR|YEAR_MONTH|ZEROFILL";
$sql_arr = explode("|", $l_ar);
$tag2 = md5(microtime());
$st = str_replace("\\\"", $tag2, $st);
$ver = explode(".", phpversion());
$tag3 = md5(microtime());
$st = str_replace("\'", $tag3, $st);
$m = Array();
$m = preg_split ("/(\"){1}([^\"])+(\"){1}|('){1}([^'])+('){1}/", $st, -1, PREG_SPLIT_DELIM_CAPTURE);
$total_out = "";
$ricorda = 0;
$m[0] = " " . $m[0];
$m[count($m)-1] .= " ";
$num_regger = "([^a-z0-9\_]){1}([0-9]+)(\)| |\r|\n|,){1}";
for($a = 0; $a < count($m); $a++)
{
if($m[$a] == "\"" || $m[$a] == "'")
{
$now_char = 0;
for($i = $ricorda; $i < strlen($st); $i++)
{
$now_char++;
if($m[$a] == substr($st, $i, 1))
{
$newst = $m[$a] . substr($st, $ricorda, $now_char);
break;
}
}
$ricorda += strlen($newst);
$a += 2;
$total_out .= "" . htmlspecialchars($newst) . "";
}
else
{
if($m[$a] != '')
{
$ricorda += strlen($m[$a]);
if($upper_sintax != false)
{
$m[$a] = explode(" ", $m[$a]);
for($b = 0; $b < count($m[$a]); $b++)
{
for($i = 0; $i < count($sql_arr); $i++)
{
if(strtoupper($m[$a][$b]) == $sql_arr[$i])
{
$m[$a][$b] = strtoupper($m[$a][$b]);
break;
}
}
}
$m[$a] = implode(" ", $m[$a]);
}
$finitiinumeri = false;
for($i = 0; $i < count($sql_arr); $i++)
{
if(!eregi($num_regger, $m[$a]) && $finitiinumeri == false)
{
$finitiinumeri = true;
}
if($finitiinumeri == false)
{
$m[$a] = eregi_replace($num_regger, "\\1\\2\\3", $m[$a]);
}
$myregexp = "([^a-z0-9\_]){1}(" . $sql_arr[$i] . "){1}( |\r|\n|\(){1}";
$txttoreplace = "\\1\\2\\3";
if($case_insensitive != false)
{
if($ver[0] > 4)
{
if(stripos($m[$a], $sql_arr[$i])!== false)
{
$m[$a] = eregi_replace($myregexp, $txttoreplace, $m[$a]);
}
}
else
{
if(strpos(strtoupper($m[$a]), $sql_arr[$i])!== false)
{
$m[$a] = eregi_replace($myregexp, $txttoreplace, $m[$a]);
}
}
}
else
{
if($upper_sintax != false)
{
if(strpos($m[$a], $sql_arr[$i])!== false)
{
$m[$a] = eregi_replace($myregexp, $txttoreplace, $m[$a]);
}
}
else
{
if((strpos($m[$a], $sql_arr[$i])!== false) || (strpos($m[$a], strtolower($sql_arr[$i]))!== false))
{
$m[$a] = eregi_replace($myregexp, $txttoreplace, $m[$a]);
}
}
}
}
$total_out .= $m[$a];
}
}
}
$total_out = str_replace($tag2, "\\\"", $total_out);
$total_out = str_replace($tag3, "\\'", $total_out);
return trim($total_out);
}
function GetRandomRecord($query)
{
$data = Array();
$this->Query($query);
while($row = $this->NextRow())
{
$data[] = $row;
}
srand((double) microtime() * 524287);
shuffle($data);
return $data[0]["id"];
}
function LoopRandomData($query)
{
$this->Query($query);
while($row = $this->NextRow())
{
$data[] = $row;
}
srand((double) microtime() * 524287);
shuffle($data);
return $data;
}
}
$db = new Database;
?>