require_once(dirname(__FILE__).'/functions.php');
require_once(dirname(__FILE__).'/db/table.php');
require_once(dirname(__FILE__).'/db/field.php');
-if (!defined('DB_ERR_PRINT')) define('DB_ERR_PRINT',true);
+if (!defined('DB_ERR_PRINT')) define('DB_ERR_PRINT',false);
+if (!defined('DB_HTML_BUTTON_ADD')) define('DB_HTML_BUTTON_ADD','<input type="submit" class="button" name="edit" value="Add"/>');
+if (!defined('DB_HTML_BUTTON_SUBMIT')) define('DB_HTML_BUTTON_SUBMIT','<input type="submit" class="button" value="GO"/>');
class db {
$this->type = strtolower(preg_replace('/^([^:]+):.*$/','\1',$db['conn']));
#bye($db['conn']);
- $this->conn = new PDO($db['conn']);
- if (DB_ERR_PRINT) $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+ try {
+ $this->conn = new PDO($db['conn']);
+ if (DB_ERR_PRINT) $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+ } catch (PDOException $e) {
+ err($e->getMessage(), "connecthrsedb");
+ return $e;
+ }
+
#if (empty($this->name)) $this->name = preg_replace('/^(?:(?:sqlite:.*(.*?)(\.\w+)?)|(?:.*?dbname=([^;]+).*?))$/','\1',$db['conn']);
if (empty($this->name) and preg_match('/(?:sqlite:|dbname=)([^;\.]+)/',$db['conn'],$m)) {
$this->name = $m[1];
));
// Bye
- $r .= '<input type="submit" class="button" value="GO"/>';
+ $r .= DB_HTML_BUTTON_ADD;
+ $r .= DB_HTML_BUTTON_SUBMIT;
$r .= '</form>'.PHP_EOL;
return $r;
}
if ($values === null) $values = $this->db->p();
if (!is_array($values)) $values = array($values);
+ $add = false;
+ $where = str_replace(' LIKE ','=',$this->where_criterias($values));
+ if (empty($where)) {
+ $where = ' WHERE 1=0';
+ $add = true;
+ }
+
$sql = "SELECT *" . $this->select_extras();
- $sql .= " FROM $this->name".str_replace(' LIKE ','=',$this->where_criterias($values));
+ $sql .= " FROM ".$this->sql_name().$where;
$sql .= " LIMIT 1";
$this->sql = $sql;
$st = $this->db->conn->prepare($sql);
$st->execute();
- echo '<form class="db edit" method="post">'.PHP_EOL;
+ echo '<form class="db edit" method="post" action="">'.PHP_EOL;
$count = 0;
- if ($row = $st->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
+ if ($row = $st->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT) or $add) {
$count ++;
foreach ($this->fields() as $name => $attr) {
$field = new field($name,$attr);
- $field->html_edit(array_key_exists($name,$row) ? $row[$name] : $attr['default']);
+ $field->html_edit( (is_array($row) and array_key_exists($name,$row) ) ? $row[$name] : $attr['default']);
}
}
function debug($msg,$level=0) { return debug($msg,$level); }
- function url_params($k='',$v='') {
+ function url_list($k='',$v='') {
$params = array();
# Asc
$sel = ( $this->db->p('sort')=="$name asc") ? " sel" : "";
- $html .= '<a title="First In (asc)" class="sort asc'.$sel.'" href="'.$this->url_params("sort","$name asc").'">'
+ $html .= '<a title="First In (asc)" class="sort asc'.$sel.'" href="'.$this->url_list("sort","$name asc").'">'
.'<span class="asc">↓</span>'
.'</a>';
$html .= ' ';
# Desc
$sel = ( $this->db->p('sort')=="$name desc") ? " sel" : "";
- $html .= '<a title="Last In (desc)" class="sort desc'.$sel.'" href="'.$this->url_params("sort","$name desc").'">'
+ $html .= '<a title="Last In (desc)" class="sort desc'.$sel.'" href="'.$this->url_list("sort","$name desc").'">'
.'<span class="desc">↑</span>'
.'</a>';
$html .= '<div align="center" class="nav" id="nav_bottom">';
- if ($prev>=0) $html .= '<span class="prev"><a href="'.$this->url_params('limit',preg_replace('/^0,/','',"$prev,$y")).'"><<</a></span> ';
+ if ($prev>=0) $html .= '<span class="prev"><a href="'.$this->url_list('limit',preg_replace('/^0,/','',"$prev,$y")).'"><<</a></span> ';
$html .= '<span class="count">'.($tot ? ($x+1) : 0).' - '.($x+$y).' / '.$tot.' results</span>';
- if ($next<$tot) $html .= ' <span class="prev"><a href="'.$this->url_params('limit',"$next,$y").'">>></a></span>';
+ if ($next<$tot) $html .= ' <span class="prev"><a href="'.$this->url_list('limit',"$next,$y").'">>></a></span>';
$html .= '</div>'.PHP_EOL;
static $js = null;
$html = '';
$html .= '<table class="rows border '.$this->name.'">'.PHP_EOL;
+ $colspan = 0;
+ if (DB_HTML_EDIT) $colspan++;
if (DB_HTML_NAV_TOP) $html .= '<thead><tr>'
- . '<td colspan="'.(count($this->fields())+1).'">' . DB_HTML_NAV_TOP . '</td>'
+ . '<td colspan="'.(count($this->fields())+$colspan).'">' . DB_HTML_NAV_TOP . '</td>'
. '</tr></thead>'.PHP_EOL
;
}
function sql_name() {
- if ($this->type == 'mysql') return '`'.$this->name.'`';
+ if ($this->db->type == 'mysql') return '`'.$this->name.'`';
return $this->name;
}
$keys = $this->fields_keys($values);
$values = array_keys($values);
$keys = $keys ? array_keys($keys) : $values;
+ $fields = array_keys($this->fields());
#bye($keys);
$sql =
- ($this->type == 'mysql' ? 'REPLACE' : 'REPLACE')
- .' INTO ' . $this->sql_name() . ' (' . join(',',$values).')'
- .' VALUES (' . join(',',ar_map('":$a"',$values)).')'
+ ($this->db->type == 'mysql' ? 'REPLACE' : 'REPLACE')
+ .' INTO ' . $this->sql_name() . ' (' . join(',',$fields).')'
+ .' VALUES (' . join(',',ar_map('":$a"',$fields)).')'
#.' WHERE ' . join(' AND ',ar_map('"$a=:$a"',$keys))
;
+ $_sql = ''
+ .'UPDATE ' . $this->sql_name()
+ .' SET ' . join(',',ar_map('"$a=:$a"',$values))
+ .' WHERE ' . join(' AND ',ar_map('"$a=:$a"',$keys))
+ ;
debug($sql);
$query = $this->db->conn->prepare($sql);
- #echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!';
+ if (!$query) return err('PDO::errorInfo(): ' .join(' ', $this->db->conn->errorInfo()) .PHP_EOL);
- #bye($hvalues);
+ #print_r(array_keys($this->fields()));
+ #debug($hvalues);
foreach (array_keys($this->fields()) as $k) {
- echo $hvalues[$k].PHP_EOL;
+ #echo "== $k=".$hvalues[$k].'</br>'.PHP_EOL;
$query->bindParam(":$k", $hvalues[$k]);
}
#return $sql;
- return $query->execute();
+ $execute = $query->execute();
+ if (!$execute) return err('PDO::errorInfo(): ' .join(' ', $this->db->conn->errorInfo()) .PHP_EOL);
+ debug($execute);
}
+ function delete($hvalues) {
+ $where = str_replace(' LIKE ','=',$this->where_criterias($values));
+ if (!$where) return 0;
+ $sql = 'DELETE FROM ' . $this->sql_name() . $where;
+ debug($sql);
+ $execute = $this->db->conn($sql);
+ if (!$execute) return err('PDO::errorInfo(): ' .join(' ', $this->db->conn->errorInfo()) .PHP_EOL);
+ return $execute;
+ }
+
}
?>