From: Nicolas Boisselier Date: Mon, 13 Jul 2015 16:32:24 +0000 (+0100) Subject: update, add X-Git-Url: https://git.nbdom.net/?a=commitdiff_plain;h=2d2ee762593b4e29c789d4e502757eb598090f1a;p=nb.git update, add --- diff --git a/lib/css/db.css b/lib/css/db.css index f7a796aa..c0c421d5 100644 --- a/lib/css/db.css +++ b/lib/css/db.css @@ -7,7 +7,7 @@ border: solid 1px red !important; #db { } -#db .rows, #db .menu { +#db .rows { margin: 0 auto; } @@ -22,8 +22,10 @@ border: solid 1px red !important; Menu */ .db.menu { + margin: 0 auto; padding: 0.8em 0.8em 0.8em 0.5em; padding: 0.5em 0.8em; + display: table; } .db.menu label { diff --git a/lib/php/db.php b/lib/php/db.php index 8cdcac6a..9f412248 100644 --- a/lib/php/db.php +++ b/lib/php/db.php @@ -9,7 +9,9 @@ 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',''); +if (!defined('DB_HTML_BUTTON_SUBMIT')) define('DB_HTML_BUTTON_SUBMIT',''); class db { @@ -32,8 +34,14 @@ 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]; @@ -221,7 +229,8 @@ EOF; )); // Bye - $r .= ''; + $r .= DB_HTML_BUTTON_ADD; + $r .= DB_HTML_BUTTON_SUBMIT; $r .= ''.PHP_EOL; return $r; } diff --git a/lib/php/db/field.php b/lib/php/db/field.php index 297c10df..e8fc03f9 100644 --- a/lib/php/db/field.php +++ b/lib/php/db/field.php @@ -8,6 +8,7 @@ class field { public $key = false; function __construct($name,$attr=array()) { + $this->name = $name; foreach ($attr as $k => $v) { $this->$k = $v; } } diff --git a/lib/php/db/table.php b/lib/php/db/table.php index 7cda3785..8e4cec99 100644 --- a/lib/php/db/table.php +++ b/lib/php/db/table.php @@ -155,8 +155,15 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. 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; @@ -164,14 +171,14 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. $st = $this->db->conn->prepare($sql); $st->execute(); - echo '
'.PHP_EOL; + echo ''.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']); } } @@ -190,7 +197,7 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. function debug($msg,$level=0) { return debug($msg,$level); } - function url_params($k='',$v='') { + function url_list($k='',$v='') { $params = array(); @@ -223,7 +230,7 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. # Asc $sel = ( $this->db->p('sort')=="$name asc") ? " sel" : ""; - $html .= '' + $html .= '' .'' .''; $html .= ' '; @@ -234,7 +241,7 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. # Desc $sel = ( $this->db->p('sort')=="$name desc") ? " sel" : ""; - $html .= '' + $html .= '' .'' .''; @@ -264,11 +271,11 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. $html .= ''.PHP_EOL; static $js = null; @@ -636,8 +643,10 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. $html = ''; $html .= ''.PHP_EOL; + $colspan = 0; + if (DB_HTML_EDIT) $colspan++; if (DB_HTML_NAV_TOP) $html .= '' - . '' + . '' . ''.PHP_EOL ; @@ -706,7 +715,7 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. } function sql_name() { - if ($this->type == 'mysql') return '`'.$this->name.'`'; + if ($this->db->type == 'mysql') return '`'.$this->name.'`'; return $this->name; } @@ -715,28 +724,47 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog. $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].'
'.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; + } + } ?> diff --git a/lib/php/functions.php b/lib/php/functions.php index 185c9b06..dfd5206b 100644 --- a/lib/php/functions.php +++ b/lib/php/functions.php @@ -105,6 +105,7 @@ function warn ($msg) { function err($msg) { $msg = is_scalar($msg) ? $msg : print_r($msg,true); echo( preg_match('/ml/i',get_header('Content-type')) ? '
'.$msg.'
' : "ERR: $msg").PHP_EOL; + return false; } function debug($msg,$level=0) {
' . DB_HTML_NAV_TOP . '' . DB_HTML_NAV_TOP . '