include('html.php');
/* get rid of slashes produced by a moronic default setting on which
* some software still relies... */
function cleanup_magic_quotes(&$array) {
foreach ($array as $key => $value) {
if (is_array($value)) cleanup_magic_quotes($value);
else $array[$key] = stripslashes($value);
}
}
if (get_magic_quotes_gpc()) {
if (isset($_GET)) cleanup_magic_quotes($_GET);
if (isset($_POST)) cleanup_magic_quotes($_POST);
}
function fatal_error($string) {
header('Content-Type: text/plain');
// workaround for php editors on windows, without this,
// the error is not displayed but opened in an editor
header('Content-Disposition: inline; filename=error.txt;');
logit('fatal error: '.$string);
exit;
}
// log to user and to logfile
function logit($string) {
global $data, $logfile;
$datetime = date("Y-m-d H:i:s", time());
if ($fp = fopen($data.$logfile, 'a+')) {
fprintf($fp, $datetime.' '.$string."\n");
fclose($fp);
}
echo($datetime.' '.$string."\n");
}
function fopen_or_fail($filename) {
if ($fp = fopen($filename, 'r')) return $fp;
fatal_error('opening file: '.$filename);
}
require_once('MDB2.php');
function mdb2_open($dsn) {
global $server_type;
$mdb2 = MDB2::connect($dsn);
if (MDB2::isError($mdb2)) fatal_error($mdb2->getMessage());
$mdb2->setOption('portability', MDB2_PORTABILITY_ERRORS);
if ($server_type == 'mysql') {
mdb2_exec($mdb2, "SET SESSION group_concat_max_len = 65536");
}
return $mdb2;
}
function mdb2_last_insert_id($db) {
global $server_type;
if ($server_type == 'mysql') return $db->lastInsertId();
return mdb2_single_val($db, "SELECT SCOPE_IDENTITY()");
}
function mdb2_res_table($res) {
$no_columns = $res->numCols();
$columns = $res->getColumnNames();
//print_r($columns);
if ($no_columns == 0) return;
?>
foreach($columns as $key => $value) { ?> echo($key) ?> | } ?>
while ($row = $res->fetchRow(MDB2_FETCHMODE_ORDERED)) { ?>
foreach($row as $data) { ?> if ($data === NULL) echo('NULL'); else echo($data); ?> | } ?>
} ?>
$res->seek(); // reset row pointer
}
// format characters
// %% -> %
// %q -> string to be escaped, must already be insides 's in $format
// %w -> string to be escaped, must already be insides 's in $format, also escapes wildcard characters
// %i -> positive integer
function mdb2_vprintf($mdb2, $format, $args) {
$out = '';
$arg = 0;
while (($pos = strpos($format, '%')) !== FALSE) {
$out .= substr($format, 0, $pos);
switch ($format[$pos + 1]) {
case '%':
$out .= '%';
break;
case 'q':
if (count($args) <= $arg) fatal_error('te weinig argumenten');
$out .= $mdb2->escape($args[$arg]);
$arg++;
break;
case 'w':
if (count($args) <= $arg) fatal_error('te weinig argumenten');
$out .= $mdb2->escape($args[$arg], true);
$arg++;
break;
case 'i':
if (count($args) <= $arg) fatal_error('te weinig argumenten');
$val = (int)$args[$arg];
if ($val == NULL) {
$out .= 'NULL';
} else {
if ($val != $args[$arg]) fatal_error('SQL argument is geen integer');
if ($val <= 0) fatal_error('SQL argument is geen positieve integer: '.$val);
$out .= $val;
}
$arg++;
break;
default:
fatal_error('onzinnig format character');
break;
}
$format = substr($format, $pos + 2);
}
if ($arg != count($args)) fatal_error('te veel argumenten voor format string '.$out.$format);
//logit($out.$format);
return $out.$format;
}
function mdb2_printf($format) {
$args = func_get_args();
array_shift($args);
return mdb2_vprintf($format, $args);
}
function mdb2_vquery($mdb2, $format, $args) {
$res = $mdb2->query(mdb2_vprintf($mdb2, $format, $args));
if (MDB2::isError($res)) {
$errorInfo = $mdb2->errorInfo($res);
fatal_error($res->getMessage().': '.$errorInfo[2]);
}
return $res;
}
function mdb2_query($mdb2, $format) {
$args = func_get_args();
array_shift($args); array_shift($args);
return mdb2_vquery($mdb2, $format, $args);
}
function mdb2_vexec_error($mdb2, $err, $format, $args) {
$affected = $mdb2->exec(mdb2_vprintf($mdb2, $format, $args));
if (MDB2::isError($affected)) {
if (MDB2::isError($affected, $err)) return false;
else {
$errorInfo = $mdb2->errorInfo($affected);
//fatal_error($affected->getMessage().': '.$errorInfo[2]);
fatal_error($affected->getCode().' '.$affected->getMessage().': '.$errorInfo[2]);
}
}
return true;
}
function mdb2_exec_error($mdb2, $err, $format) {
$args = func_get_args();
array_shift($args); array_shift($args); array_shift($args);
return mdb2_vexec_error($mdb2, $err, $format, $args);
}
function mdb2_vexec($mdb2, $format, $args) {
$affected = $mdb2->query(mdb2_vprintf($mdb2, $format, $args));
if (MDB2::isError($affected)) {
$errorInfo = $mdb2->errorInfo($affected);
fatal_error($affected->getMessage().': '.$errorInfo[2]);
}
}
function mdb2_exec($mdb2, $format) {
$args = func_get_args();
array_shift($args); array_shift($args);
mdb2_vexec($mdb2, $format, $args);
}
function mdb2_vsingle_row($mdb2, $mode, $format, $args) {
$res = mdb2_vquery($mdb2, $format, $args);
$array = $res->fetchRow($mode);
$res->free();
return $array;
}
function mdb2_single_row($mdb2, $mode, $format) {
$args = func_get_args();
array_shift($args); array_shift($args); array_shift($args);
return mdb2_vsingle_row($mdb2, $mode, $format, $args);
}
function mdb2_single_array($mdb2, $format) {
$args = func_get_args();
array_shift($args); array_shift($args);
return mdb2_vsingle_row($mdb2, MDB2_FETCHMODE_ORDERED, $format, $args);
}
function mdb2_single_assoc($mdb2, $format) {
$args = func_get_args();
array_shift($args); array_shift($args);
return mdb2_vsingle_row($mdb2, MDB2_FETCHMODE_ASSOC, $format, $args);
}
function mdb2_single_val($mdb2, $format) {
$args = func_get_args();
array_shift($args); array_shift($args);
$res = mdb2_vquery($mdb2, $format, $args);
$array = $res->fetchRow();
$res->free();
if (isset($array[0])) return $array[0];
else return NULL;
}
function get_baselink() {
$pos = strrpos($_SERVER['PHP_SELF'], '/');
if ($pos === false) fatal_error('geen / gevonden in PHP_SELF');
return 'http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, $pos + 1);
}
?>