public $engine;
public $created;
public static $is_admin = true;
+ public static $key_preff = '_key_';
public $fields = [];
public $indexes;
}
- if (isset($conf['fct'])) $conf['fct']($row) ;
+ if (isset($conf['fct'])) $conf['fct']($row);
$field = [
'table' => $this,
return $h;
}
+ public function html_add($values = null,$form_action='?') {
+ return html_edit($values,$form_action,true);
+ }
+
public function html_edit($values = null,$form_action='?',$add=false) {
if ($values === null) $values = $this->p();
if (!is_array($values)) $values = [$values];
$fields = array_filter($this->fields(),function($v){return empty($v->extra);});
+ $keys = $this->fields_keys(); #$fields); $fields = array_merge($keys,$fields);
$where = $this->where($fields,$values);
if (empty($where)) {
$count ++;
foreach ($fields as $name => $field) {
- if ($add and !preg_match('/^(null)?$/',$field->default)) $row[$name] = $field->default;
- elseif(!isset($row[$name])) $row[$name] = '';
- echo $field->html_edit($row[$name]
- );
+
+ if ($add and !preg_match('/^(null)?$/',$field->default)) {
+ $row[$name] = $field->default;
+
+ } elseif(!isset($row[$name])) {
+ $row[$name] = '';
+
+ }
+
+ if (!$add and $field->key) {
+ echo '<input name="'.self::$key_preff.$name.'" value="'.$row[$name].'" type="hidden" />'.NB_EOL;
+ }
+ echo $field->html_edit($row[$name]);
}
}
return $this->db()->sql_name($value === null ? $this->name : $value);
}
+ public function _TODEL_fields_extract_keys_values($post) {
+ foreach ($this->fields() as $name => $field) {
+
+ if (!isset($post[$name])) {
+ if ($field->key) $this->bye("Missing `$name`!");
+ continue;
+ }
+
+ $value = $post[$name];
+
+ if ($field->key) {
+ $keys[] = $name;
+ if (isset($post[self::$key_preff.$name])) {
+ $value = $post[self::$key_preff.$name];
+ }
+ $keys_values[] = $value;
+
+ } else {
+ $fields[] = $name;
+ $fields_values[] = $value;
+ }
+
+ }
+
+ return [
+ $key,
+ $keys_values,
+ $fields,
+ $fields_values,
+ ];
+ }
+
public function replace($hvalues,&$info=[]) {
return $this->insert($hvalues,$info,'REPLACE');
}
- public function insert($hvalues,&$info=[],$insert_word='INSERT') {
+ public function insert($post,&$info=[],$insert_word='INSERT') {
if (empty($info['values'])) $info['values'] = [];
- if (empty($hvalues)) $this->bye('insert(): No values');
- $info['values'] = $hvalues;
+ if (empty($post)) $this->bye('insert(): No values');
+ $info['values'] = $post;
$sql_names = $fields = $values = [];
foreach ($this->fields() as $name => $field) {
- if (!isset($hvalues[$name])) continue;
+ if (!isset($post[$name])) continue;
if ($field->key and $field->autoincrement()) continue;
#$fields[$field->sql_name()] = $field;
$fields[$name] = $field;
$sql_names[$name] = $field->sql_name();
- $values[] = $hvalues[$name];
+ $values[] = $post[$name];
}
if (empty($fields)) $this->bye('insert(): No fields for table');
}
foreach ($fields as $name => $field) {
- $row = [ $name => $hvalues[$name] ];
+ $row = [ $name => $post[$name] ];
$this->db()->table_row_encrypt($this,$row);
$field->bindParam($query,$row[$name],":$name");
}
}
# dbq t=nb.mime_type a=table.update type=application/rss+xml name='RSS - Really Simple Syndication' ext=rss debug=2
- public function update($hvalues,&$info=[]) {
- if (empty($info['values'])) $info['values'] = [];
- $info['values'] = $hvalues;
+ public function update($post,&$info=[]) {
+# NB 30.01.17 if (empty($info['values'])) $info['values'] = [];
$keys = [];
$keys_values = [];
foreach ($this->fields() as $name => $field) {
- if (!isset($hvalues[$name])) {
+ if (!isset($post[$name])) {
if ($field->key) $this->bye("Missing `$name`!");
continue;
}
- $value = $hvalues[$name];
+ $value = $post[$name];
if ($field->key) {
$keys[] = $name;
- $keys_values[] = $value;
+
+ $_value = isset($post[self::$key_preff.$name]) ? $post[self::$key_preff.$name] : null;
+
+ if ($_value) {# and $_value !== $value) {
+ $fields[] = $name;
+ $fields_values[] = $value;
+ $keys_values[] = $_value;
+
+ } else {
+ $keys_values[] = $value;
+ }
} else {
$fields[] = $name;
}
$info['keys'] = array_combine($keys,$keys_values);
+ $info['fields'] = array_combine($fields,$fields_values);
+ $info['post'] = $post;
- if (empty($fields)) $this->bye("Missing keys!");
+#bye([$keys,$keys_values]);
+#debug([$post,$this->fields()]);
+# if (empty($fields)) {
+# $fields = $keys;
+# $fields_values = $keys_values;
+# }
+ if (empty($fields)) $this->bye("Missing fields!");
if (empty($keys)) {
$this->bye("Missing keys!");
.' SET ' . join(',',$this->ar_map('"$a=:$a"',$fields))
.' WHERE ' . join(' AND ',$this->ar_map('"$a=:key_$a"',$keys))
;
- $info['sql'] = $sql;
+ #$info['sql'] = $sql;
+ $info = [ 'sql' => $sql ] + $info;
if (!($query = $this->db()->conn->prepare($sql))) {
err('PDO::errorInfo(): ' .join(' ', $this->db()->conn->errorInfo()) .NB_EOL);
}
foreach ($fields as $name) {
- #debug("$name: ".$hvalues[$name]);
- $row = [ $name => $hvalues[$name] ];
+ #debug("$name: ".$post[$name]);
+ $row = [ $name => $post[$name] ];
$this->db()->table_row_encrypt($this,$row);
#debug($this->db()->status());
$field->bindParam($query,$row[$name],":$name");
}
foreach ($keys as $name) {
- #debug("$name: ".$hvalues[$name]);
- $field->bindParam($query,$hvalues[$name],":key_$name");
+ #debug("$name: ".$post[$name]);
+ $field->bindParam($query,$post[$name],":key_$name");
}
#return $sql;
return false;
}
- $info['rowCount'] = $query->rowCount();
+ #$info['rowCount'] = $query->rowCount();
+ $info = [ 'rowCount' => $query->rowCount()] + $info;
#bye($this->db()->row("SELECT value FROM crypt WHERE id='zaza'"));
#bye($info);
#return true;
}
- public function delete($hvalues,&$info=[]) {
+ public function delete($post,&$info=[]) {
if (empty($info['values'])) $info['values'] = [];
- $info['values'] = $hvalues;
+ $info['values'] = $post;
$keys = $this->fields_keys();
// If no primary keys, we use all field
if (empty($keys)) $keys = $this->fields();
- if (!($where = $this->where($keys,$hvalues,self::$is_admin ? false : true))) {
+ if (!($where = $this->where($keys,$post,self::$is_admin ? false : true))) {
err('Db.delete(): Missing keys values');
return null;
}