# @version 202411 # @link https://zzupkeep.zzw.es # @license https://zzupkeep.zzw.es/LICENSE if(!defined('zzupkeep_on')){ header('HTTP/1.1 403 Forbidden'); header("Location: ../"); } class DB{ private $dbsql; private $dbpref; public $dberror; function __construct(){ global $cfg; $this->dbpref = $cfg['dbpref']; try { $mysqli = new mysqli($cfg['dbhost'],$cfg['dbuser'],$cfg['dbpass'],$cfg['dbname']); $mysqli->set_charset('utf8mb4'); $this->dbsql = $mysqli; unset($mysqli); } catch (Exception $e) { $this->dberror = _t('exception').': '.$e->getMessage(); } } public function read($tabla,$campos,$condic,$extra='',$como=null){ if($this->dbpref != '' && substr($tabla,0,strlen($this->dbpref)-1) != $this->dbpref) $tabla = $this->dbpref.$tabla; $error = []; if(!is_array($campos)) $error[]= _t('param').' 2 '._t('incorrect'); if( $this->valida_select($condic) != 'OK' ) $error[]= _t('param').' 3 '._t('incorrect'); if(count($error)==0){ if($como == 'count') $sqlcampos = 'count(id)'; else if($campos==[]) $sqlcampos = '*'; else{ if(!in_array('id',$campos)) $campos = array_merge(['id'],$campos); foreach($campos as &$campo) if($campo) $campo = $this->dbsql->real_escape_string($campo); $sqlcampos = '`'.implode('`,`',$campos).'`'; } $q = "SELECT ".$sqlcampos." FROM `".$tabla."` WHERE " .$this->crea_where($condic)." ".$extra.";"; $sql=mysqli_query( $this->dbsql, $q); if($sql){ switch($como){ case 'all': return mysqli_fetch_all($sql); break; case 'row': $ret=[]; while ($fila = $sql->fetch_row()) $ret[]= $fila; return $ret; break; default: $ret=[]; while ($fila = $sql->fetch_assoc()) { $ret[]= $fila; } return $ret; } }return ['Error',"SELECT ".$sqlcampos." FROM `".$tabla ."` WHERE ".$this->crea_where($condic)." ".$extra.";"]; }else return ['Error',$error]; } public function write($tabla,$valores){ if($this->dbpref != '' && substr($tabla,0,strlen($this->dbpref)-1) != $this->dbpref) $tabla = $this->dbpref.$tabla; $vals = $this->crea_write($valores); if($vals){ $q = 'INSERT INTO `'.$tabla.'` ('.$vals[0].') VALUES ('.$vals[1].');'; $sql=mysqli_query($this->dbsql, $q); if($sql) return ['OK',$this->dbsql->insert_id]; else return ['Error','no query']; }else return ['Error', 'param incorrect']; } public function update($tabla,$valores,$condic){ if($this->dbpref != '' && substr($tabla,0,strlen($this->dbpref)-1) != $this->dbpref) $tabla = $this->dbpref.$tabla; $vals = $this->crea_update($valores,$condic); if($vals){ $q = 'UPDATE `'.$tabla.'` SET '.$vals[0].' WHERE '.$vals[1].';'; $sql=mysqli_query($this->dbsql, $q); if($sql) return ['OK',$this->dbsql->affected_rows]; else return ['Error','no query']; }else return ['Error', 'param incorrect']; } public function del($tabla,$valores){ if($this->dbpref != '' && substr($tabla,0,strlen($this->dbpref)-1) != $this->dbpref) $tabla = $this->dbpref.$tabla; $vals = $this->crea_where($valores); if($vals){ $q = 'DELETE FROM `'.$tabla.'` WHERE '.$vals.';'; $sql = mysqli_query($this->dbsql, $q); if($sql) return ['OK',$this->dbsql->affected_rows]; else return ['Error','no query']; }else return ['Error', 'param incorrect']; } private function crea_write($valores){ if(!is_array($valores)) return false; $campos = []; $vals = []; foreach($valores as $campo => $valor){ if($valor){ $campos[] = '`'.$campo.'`'; $vals[] = '\''.$this->dbsql->real_escape_string($valor).'\''; } } return [implode(',',$campos),implode(',',$vals)]; } private function crea_update($valores,$condic){ if(!is_array($valores)) return false; $set = []; foreach($valores as $ca => $va){ $set[] = '`'.$ca.'` = '.( ($va) ? '\''.$this->dbsql->real_escape_string($va).'\'' : 'NULL'); } $set = implode(', ',$set); $con = $this->crea_where([$condic]); return [$set,$con]; } private function crea_where_de_array($condic){ $con = []; foreach($condic as $cond){ foreach($cond as $campo => $valor){ $con[] = '`'.$campo.'` = '.( ($valor) ? '\''.$this->dbsql->real_escape_string($valor).'\'' : 'NULL'); } } $con = implode(' AND ',$con); return $con; } private function crea_where($condic){ $return = ''; $es_or = 0; foreach($condic as $k => $cual){ // ['tipo','in',['permisos','tipo','marca']] if(count($cual)==1){ if($cual[0]=='|' || $cual[0]=='||' || $cual[0]=='OR'){ $es_or += 1; $return .= ' AND ('; } }else{ if($k > 0 && $es_or %2 == 0) $return .= $es_or > 0? ' OR ' : ' AND '; $return .= '`'.$cual[0].'` '.$cual[1].' '; if( is_array($cual[2]) ){ foreach($cual[2] as &$q) $q = $this->dbsql->real_escape_string($q); $return .= "('".implode("','",$cual[2])."')"; } else $return .= '\''.$this->dbsql->real_escape_string($cual[2]).'\''; if($es_or > 0 && $es_or %2 == 0){ $return .= ')'; $es_or -= 2; } else if($es_or > 0) $es_or += 1; } } return $return; } private function valida_select($cuales){ $return = []; $validos = ['=','!=','in','not in','||','OR','&&','AND']; if( is_array($cuales) ){ foreach($cuales as $cual){ $return[] = ( ( in_array($cual[1],$validos) && count($cuales)>2 ) || ( is_array($cual) && count($cual)== 3 && in_array($cual[1],$validos) && ( ( $cual[1]=='in' || $cual[1]=='not in' ) && is_array($cual[2]) ) ) )? 'OK':['ko'=>json_encode($cual)]; } return ( array_key_exists('ko',$return) )? json_encode($return) : 'OK' ; } return false; } } function tuenapass($pass){ return sha1(md5($pass)); } function tuneamail($mail){ if(!$mail || strpos($mail,'@')<2) return '0'; $mail = explode('@',$mail); $mail1 = str_split(sha1(md5($mail[0]))); $mail2 = str_split(sha1(md5($mail[1]))); rsort($mail1); sort($mail2); if(count($mail1)>count($mail2)) $mail2 = array_pad($mail2,count($mail1),"z"); else $mail1 = array_pad($mail1, count($mail2), "a"); $return = ''; for($i=0;$i
Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/zzamoves/0proyectos/zzupkeep/core/func_theme.php on line 81
ZZupkeep

ZZupkeep

Registro de mantenimientos.

Página en construcción

Empezando

Empezando este proyecto porque no he localizado nada hecho que me guste.

Espero no abandonarlo y terminarlo !!!

La idea era tener un sitio para controlar/registrar el mantenimiento de mis locomotoras a escala. Pero ...

¿Por qué no hacerlo para mantener más cosas? Plantas, PCs, Vehículos, ...

De momento no he hecho nada más que empezar, iré añadiendo funcionalidades poco a poco. Lo primero que tengo previsto es la gestión de usuarios, después vendrá el resto.

    Historial del desarrollo

  • 2024-11-08 > decidido el nombre ZZupkeep
  • 2024-11-09 > empiezo la web
  • 2024-11-11 > configuro el archivo .htaccess
  • 2024-11-12 > creada la base de datos
  • 2024-11-13 > Empezada la página de registro
  • 2024-11-19 > Finalizada la página de registro