]> git.nbdom.net Git - nb.git/commitdiff
update, add
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Mon, 13 Jul 2015 16:32:24 +0000 (17:32 +0100)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Mon, 13 Jul 2015 16:32:24 +0000 (17:32 +0100)
lib/css/db.css
lib/php/db.php
lib/php/db/field.php
lib/php/db/table.php
lib/php/functions.php

index f7a796aa79edb4cd17fed41dbf0de0fdeda7a4f5..c0c421d5d0be5737f48ac81d83ea8c3301d76ae2 100644 (file)
@@ -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 {
index 8cdcac6ad6481c539e45e8343efe432113047691..9f412248d89e3a982500c247797ec82bca5200cd 100644 (file)
@@ -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','<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 {
 
@@ -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 .= '<input type="submit" class="button" value="GO"/>';
+    $r .= DB_HTML_BUTTON_ADD;
+    $r .= DB_HTML_BUTTON_SUBMIT;
     $r .= '</form>'.PHP_EOL;
     return $r;
   }
index 297c10dfa72df6c9e4388a57f96ed53dea867602..e8fc03f930e2a4b444eae1f80e0c462698bb64a8 100644 (file)
@@ -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; }
   }
 
index 7cda3785de7feae45981ae04849b9b918bcbb104..8e4cec999e8a8265214253060b5a6c59063f53c3 100644 (file)
@@ -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 '<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']);
       }
     }
 
@@ -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 .= '<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">&darr;</span>'
     .'</a>';
     $html .= '&nbsp;';
@@ -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 .= '<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">&uarr;</span>'
     .'</a>';
 
@@ -264,11 +271,11 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog.
 
     $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")).'">&lt;&lt;</a></span>&nbsp;';
+    if ($prev>=0) $html .= '<span class="prev"><a href="'.$this->url_list('limit',preg_replace('/^0,/','',"$prev,$y")).'">&lt;&lt;</a></span>&nbsp;';
 
     $html .= '<span class="count">'.($tot ? ($x+1) : 0).' - '.($x+$y).' / '.$tot.' results</span>';
 
-    if ($next<$tot) $html .= '&nbsp;<span class="prev"><a href="'.$this->url_params('limit',"$next,$y").'">&gt;&gt;</a></span>';
+    if ($next<$tot) $html .= '&nbsp;<span class="prev"><a href="'.$this->url_list('limit',"$next,$y").'">&gt;&gt;</a></span>';
 
     $html .= '</div>'.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 .= '<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
     ;
 
@@ -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].'</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;
+  }
+
 }
 ?>
index 185c9b067615b2a92dce1dab6a6a7d1c7380ba4f..dfd5206b49eabae3ddf5de7331b0ec0a553e73c9 100644 (file)
@@ -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')) ? '<pre class="err">'.$msg.'</pre>' : "ERR: $msg").PHP_EOL;
+  return false;
 }
 
 function debug($msg,$level=0) {