From 6efe0372c5d3b2db723ada811917b6a52f13130b Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Sun, 31 Dec 2006 04:26:32 -0500 Subject: [PATCH] major updates to db.php, added session.php, run.php uses file_run.php added db_delete(), db_update(), db_auto_id(), db_replace() fixed lots of places in db.php where it wasn't passing the mysql link identifier added redirect() to http.php run.php now calls file_run() (so you define a function in your file that matches the basename) and you can return another basename, and run.php will do that one session.php uses session cookies (cookies that dissapear when the browser is closed) sessions also expire from the db at a given time --- db.php | 113 ++++++++++++++++++++++++++++++++++++++++++-- file_run.php | 47 ++++++++++++++++++ http.php | 7 +++ metaform/template.html | 2 +- run.php | 10 +++- session.php | 123 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 294 insertions(+), 8 deletions(-) create mode 100644 file_run.php create mode 100644 session.php diff --git a/db.php b/db.php index ea0a900..4cb4a61 100644 --- a/db.php +++ b/db.php @@ -73,7 +73,7 @@ function db_connect($database = 'auto', $user = 'auto', $pass = 'auto', $host = } if(!mysql_select_db($database, $GLOBALS['wfpl_db_handle'])) { - die("Couldn not access database \"$database\": " . mysql_error()); + die("Couldn not access database \"$database\": " . mysql_error($GLOBALS['wfpl_db_handle'])); } return $GLOBALS['wfpl_db_handle']; @@ -82,9 +82,9 @@ function db_connect($database = 'auto', $user = 'auto', $pass = 'auto', $host = # Unless you're doing something unusual like an ALTER TABLE don't call this directly function db_send_query($sql) { #echo("Sending query: " . enc_html($sql) . "
\n"); - $result = mysql_query($sql); + $result = mysql_query($sql, $GLOBALS['wfpl_db_handle']); if(!$result) { - die(enc_html('DATABASE ERROR: ' . mysql_error() . ' in the following query: ' . $sql)); + die(enc_html('DATABASE ERROR: ' . mysql_error($GLOBALS['wfpl_db_handle']) . ' in the following query: ' . $sql)); } return $result; @@ -140,7 +140,7 @@ function _db_printf($str, $args) { } -function db_send_get($table, $columns, $where = '', $args) { +function db_send_get($table, $columns, $where, $args) { $sql = "SELECT $columns FROM $table"; if($where) { $sql .= ' WHERE ' . _db_printf($where, $args); @@ -217,6 +217,27 @@ function db_insert($table, $columns, $values) { $values = func_get_args(); $values = array_slice($values, 2); } + + db_insert_ish('INSERT', $table, $columns, $values); +} +# same as above, except uses the "replace" command instead of "insert" +function db_replace($table, $columns, $values) { + if(!is_array($values)) { + $values = func_get_args(); + $values = array_slice($values, 2); + } + + db_insert_ish('REPLACE', $table, $columns, $values); +} + +# return the value mysql made up for the auto_increment field (for the last insert) +function db_auto_id() { + return mysql_insert_id($GLOBALS['wfpl_db_handle']); +} + + +# used to implement db_insert() and db_replace() +function db_insert_ish($command, $table, $columns, $values) { $sql = ''; foreach($values as $value) { @@ -224,7 +245,89 @@ function db_insert($table, $columns, $values) { $sql .= '"' . enc_sql($value) . '"'; } - $sql = "INSERT INTO $table ($columns) values($sql)"; + $sql = "$command INTO $table ($columns) values($sql)"; + + db_send_query($sql); +} + +# to be consistant with the syntax of the other db functions, $values can be an +# array, a single value, or multiple parameters. +# +# as usual the where clause stuff is optional, but it will ofcourse update the +# whole table if you leave it off. +# +# examples: +# +# # name everybody Bruce +# db_update('users', 'name', 'Bruce'); +# +# # name user #6 Bruce +# db_update('users', 'name', 'Bruce', 'id= %"', 6); +# +# # update the whole bit for user #6 +# db_update('users', 'name,email,description', 'Bruce', 'bruce@example.com', 'is a cool guy', 'id= %"', 6); +# +# # update the whole bit for user #6 (passing data as an array) +# $data = array('Bruce', 'bruce@example.com', 'is a cool guy'); +# db_update('users', 'name,email,description', $data, 'id= %"', 6); + +# The prototype is really something like this: +# db_update(table, columns, values..., where(optional), where_args...(optional +function db_update($table, $columns, $values) { + $args = func_get_args(); + $args = array_slice($args, 2); + $columns = explode(',', $columns); + $num_fields = count($columns); + + if(is_array($values)) { + $args = array_slice($args, 1); + } else { + $values = array_slice($args, 0, $num_fields); + $args = array_slice($args, $num_fields); + } + + $sql = ''; + for($i = 0; $i < $num_fields; ++$i) { + if($sql != '') { + $sql .= ', '; + } + $sql .= $columns[$i] . ' = "' . enc_sql($values[$i]) . '"'; + } + + + $sql = "UPDATE $table SET $sql"; + + # if there's any more arguments + if($args) { + $where = $args[0]; + $args = array_slice($args, 1); + + $sql .= ' WHERE '; + # any left for where claus arguments? + if($args) { + $sql .= _db_printf($where, $args); + } else { + $sql .= $where; + } + + } + + db_send_query($sql); +} + +# pass args for printf-style where clause as usual +function db_delete($table, $where = '') { + $sql = "DELETE FROM $table"; + if($where) { + $sql .= ' WHERE '; + $args = func_get_args(); + $args = array_slice($args, 2); + if($args) { + $sql .= _db_printf($where, $args); + } else { + $sql .= $where; + } + } db_send_query($sql); } diff --git a/file_run.php b/file_run.php new file mode 100644 index 0000000..014cab5 --- /dev/null +++ b/file_run.php @@ -0,0 +1,47 @@ + diff --git a/http.php b/http.php index c38f97d..efc08da 100644 --- a/http.php +++ b/http.php @@ -48,4 +48,11 @@ function this_url() { return $url; } +function redirect($url, $status = '302 Moved Temporarily', $message = '') { + header("HTTP/1.1 $status"); + header("Location: $url"); + echo($message); + exit(); +} + ?> diff --git a/metaform/template.html b/metaform/template.html index d334cd6..beb9bb4 100644 --- a/metaform/template.html +++ b/metaform/template.html @@ -4,7 +4,7 @@ ~form_name~ entry diff --git a/run.php b/run.php index 3a3d85a..20b3111 100644 --- a/run.php +++ b/run.php @@ -56,6 +56,8 @@ # RewriteRule ^$ /foo/run.php # RewriteRule .*\.html$ /foo/run.php +require_once('code/wfpl/file_run.php'); + function run_php($basename = false) { if($basename) { $html_file = "$basename.html"; @@ -71,11 +73,15 @@ function run_php($basename = false) { if($php_file != $html_file && file_exists($php_file)) { require_once('code/wfpl/template.php'); if(file_exists($html_file)) tem_load($html_file); - require $php_file; + $other = file_run($php_file); + if($other) { + run_php($other); + return; + } if(file_exists($html_file)) tem_output(); } else { if(file_exists($html_file)) { - require $html_file; + readfile($html_file); } else { header('HTTP/1.0 404 File Not Found'); if(file_exists('404.php') || file_exists('404.html')) { diff --git a/session.php b/session.php new file mode 100644 index 0000000..93b374f --- /dev/null +++ b/session.php @@ -0,0 +1,123 @@ + -- 1.7.10.4