- Sky
- Blueberry
- Slate
- Blackcurrant
- Watermelon
- Strawberry
- Orange
- Banana
- Apple
- Emerald
- Chocolate
- Charcoal
Search the Community
Showing results for tags 'sql'.
Found 2 results
-
Crear copia de seguridad desde la administración
Miguel92 posted a topic in Actualizaciones individuales de PHPost Risus's Complementos
Bueno como ya había mencionado, ya esta la "herramienta" para crear copias de seguridad completa o parcial de la base de datos y podrás restaurar dicho copia, el problema será que no tengas acceso a la administración del sitio y allí necesitarás una herramienta externa pero que funcione dentro del sitio. Solo tengo que hacerle algunos cambios a la herramienta que ya tengo creada desde hace 1 año. Capturas: Antes de comenzar, si tienes Ejecutar SQL desde la administración [Arreglado] tendrás que quitarlo o eliminar archivos Bueno comencemos con la integración, los archivos para descargar están al final. 1 - Este archivo "c.database.php" y lo agregan a 2 - En inc/php/admin.php buscamos /** NOTICIAS **/ } elseif($action == 'news'){ arriba agregarán } elseif($action == 'execute' OR $action == 'backup') { # Incluimos el archivo necesario include("../class/c.database.php"); $tsDataBase = new tsDataBase(); # Todas las opciones de la copia de seguridad if($action == 'backup') { if(empty($act)) { $smarty->assign('tsListBackup', $tsDataBase->listBackup()); # Creamos el backup completo } elseif($act === 'new_backup') { if(!empty($_POST["nombre_copia"])) { if($tsDataBase->createBackUp()[0]) $tsCore->redirectTo($tsCore->settings['url'].'/admin/backup?save=true'); else $smarty->assign("tsError", $tsDataBase->createBackUp()[1]); } # Creamos el backup seleccionando tablas } elseif($act === 'new_backup_select') { $smarty->assign('tsTablas', $tsDataBase->show_tables()); if(!empty($_POST["nombre_copia"])) { if($tsDataBase->seletedTables()[0]) $tsCore->redirectTo($tsCore->settings['url'].'/admin/backup?save=true'); else $smarty->assign("tsError", $tsDataBase->seletedTables()[1]); } # Descargamos el fichero } elseif($act === 'download') { if(isset($_GET["code"])) { $smarty->assign('tsDownload', $tsDataBase->downloader()); } } } 3 - Ahora en inc/php/ajax/ajax.php buscan 'admin-badwords-delete' => array('n' => 4, 'p' => ''), debajo agregan 'admin-eliminar-sql' => array('n' => 4, 'p' => ''), 'admin-restaurar-sql' => array('n' => 4, 'p' => ''), 'admin-ejecutar-sql' => array('n' => 4, 'p' => ''), más abajo buscan include("../class/c.admin.php"); $tsAdmin = new tsAdmin(); y agregan if($action === 'admin-eliminar-sql' OR $action === 'admin-restaurar-sql' OR $action === 'admin-ejecutar-sql') { include("../class/c.database.php"); $dbase = new tsDataBase(); } por último buscan default: die('0: Este archivo no existe.'); break; y arriba agregan case 'admin-eliminar-sql': echo $dbase->delete_file_sql(); break; case 'admin-restaurar-sql': echo $dbase->restore_file_sql(); break; case 'admin-ejecutar-sql': echo $dbase->executeSQL(); break; 4 - Ahora en tema/templates/t.admin.tpl buscan {include file='admin_mods/m.admin_rangos.tpl'} y debajo pegan {elseif $tsAction == 'execute' || $tsAction == 'backup'} {include file='admin_mods/m.admin_database.tpl'} 5 - En tema/templates/admin_mods/m.admin_sidemenu.tpl buscan <h4>Configuración de PHPost</h4> y arriba agregan <h4>Seguridad</h4> <ul class="cat-list"> <li id="a_configs"><span class="cat-title"><a href="{$tsConfig.url}/admin/execute">Ejecutar consultas</a></span></li> <li id="a_main"><span class="cat-title"><a href="{$tsConfig.url}/admin/backup">Crear copia</a></span></li> </ul> 6 - Este archivo "m.admin_database.tpl" y lo agregan a tema/templates/admin_mods/ 7 - Por último en tema/ja/admin.js al final del archivo agregan /** * Database * para ejecutar consultas y crear copias */ var database = new function() { this.execute = () => { var SQL = 'sql=' + $("#sql").val(); $.post(global_data.url + '/admin-ejecutar-sql.php', SQL, h => { switch (h.charAt(0)) { case '0': mydialog.alert('Error', h.substring(3), false) break; case '1': mydialog.alert('Bien', h.substring(3), true) break; } }) }, this.delete = (id, file, gew) => { if(!gew) { mydialog.show() mydialog.title('Eliminar') mydialog.body(`Estas seguro que quieres eliminar este archivo: ${file}`) mydialog.buttons(true, true, 'Borrar SQL', `database.delete(${id}, '${file}', true)`, true, false, true, 'Cancelar', 'close', true, true); /*mydialog.buttons([ {mostrar:true,texto:'Borrar SQL',accion:`database.delete(${id}, '${file}', true)`,activo:true}, {mostrar:true,texto:'Cancelar',accion:'cerrar',activo:true} ]); */ mydialog.center() } else { $.post(global_data.url + '/admin-eliminar-sql.php', {id,file}, e => { switch (e.charAt(0)) { case '0': mydialog.alert('Error', e.substring(3)); break; case '1': mydialog.close(); $("#sql" + id).remove(); break; } }) } }, this.restore = (file, gew) => { if(!gew) { mydialog.show() mydialog.title('Restaurar') mydialog.body(`Estas seguro que quieres restaurar esta copia: ${file}`) mydialog.buttons(true, true, 'Restaurar SQL', `database.restore('${file}', true)`, true, false, true, 'Cancelar', 'close', true, true); /*mydialog.buttons([ {mostrar:true,texto:'Restaurar SQL',accion:`database.restore('${file}', true)`,activo:true}, {mostrar:true,texto:'Cancelar',accion:'cerrar',activo:true} ]);*/ mydialog.center() } else { mydialog.procesando_inicio('', "Espere"); mydialog.buttons(false); mydialog.center() $.post(global_data.url + '/admin-restaurar-sql.php', {restore: file}, e => { switch (e.charAt(0)) { case '0': mydialog.procesando_fin(); mydialog.alert('Error', e.substring(3), false); break; case '1': mydialog.procesando_fin(); mydialog.alert('Bien', e.substring(3), false); break; } }) } } } Descargar los archivos "-#- Justo aquí -#-" En caso que tengan problemas al querer crear las copias de seguridad, comprueben que se haya creado la carpeta "database" en files/ y que tenga los permisos 0777 aplicados, en caso contrario deberán crearlo y darle los permisos correspondientes -
Ejecutar SQL desde la administración [Arreglado]
Miguel92 posted a topic in Actualizaciones individuales de PHPost Risus's Complementos
Esto es básicamente para el administrador principal con el user_id 1, para evitar que otro administrador meta mano. 1 - En inc/class/c.admin.php buscamos /* saveConfigs() */ function saveConfig() { y arriba agregaremos (Actualizado 25.02.22) # Ejecutamos las consultas! public function executeSQL() { global $tsCore, $tsUser; # Solo administrador principal if($tsUser->is_member AND $tsUser->is_admod === 1 AND intval($tsUser->uid) === 1) { # Cosultas $sqlList = []; $lines = explode("\n", $_POST['sql']); foreach($lines as $sql) { $sql = htmlspecialchars_decode($sql); $sql = str_replace("'", '"', $sql); # Quitamos ; solo si lo tiene if(preg_match("/(.*);/", $sql)) $sql = substr(trim($sql), 0, strlen($sql) - 1); array_push($sqlList, db_exec([__FILE__, __LINE__], 'query', $sql)); } return in_array(true, $sqlList) ? '1: Se ejecutó correctamente.' : '0: Hubo un error al ejecutar la/s sentencia/s'; } return '0: Solo el administrador principal puede.'; } 2 - En inc/php/ajax/ajax.admin.php buscamos (Actualizado 25.02.22) 'admin-badwords-delete' => array('n' => 4, 'p' => ''), debajo pegamos 'admin-ejecutar-sql' => array('n' => 4, 'p' => ''), más abajo buscamos default: die('0: Este archivo no existe.'); break; y arriba pegamos case 'admin-ejecutar-sql': echo $tsAdmin->executeSQL(); break; 3 - En inc/php/admin.php si tienen agregado esto, bórrenlo, ya no se usará (Actualizado 25.02.22) } elseif($action == 'execute') { if($tsAdmin->executeSQL()) $tsCore->redirectTo($url); else $smarty->assign("tsError", $tsAdmin->executeSQL()); 4 - Luego en tema/templates/t.admin.tpl y buscamos {elseif $tsAction == 'configs'} {include file='admin_mods/m.admin_configs.tpl'} y debajo pegamos {elseif $tsAction == 'execute'} {include file='admin_mods/m.admin_execute.tpl'} 5 - En tema/templates/admin_mods/m.admin_sidemenu.tpl buscamos <h4>Configuración de PHPost</h4> y arriba pegamos <li id="a_execute"><span class="cat-title"><a href="{$tsConfig.url}/admin/execute">Ejecutar consultas </a></span></li> 6 - En tema/templates/admin_mods/ crearemos un archivo llamado m.admin_execute.tpl y agregaremos esto (Actualizado 25.02.22) <div class="boxy-title"> <h3>Administrar Base de datos</h3> </div> <div id="res" class="boxy-content"> {if $tsSave}<div class="alerts ok">Tus cambios han sido guardados.</div>{/if} {if $tsError}<div class="alerts error">Hubo problemas al ejecutar las sentencias.</div>{/if} <h4>Desde aquí tu puedes <u>generar las consultas</u>, antes de hacerlo, comprueba de que este correctamente.</h4> <form method="post" autocomplete="off"> <legend>Consultas</legend> <textarea name="sql" id="sql" cols="30" rows="10" placeholder="EJ: ALTER TABLE w_configuracion ADD privado INT(11) NOT DEFAULT 0;"></textarea> <small style="display:block"><i>Siempre cada consulta debe terminar en ; (punto y coma)</i></small> <input type="button" onclick="database.execute();" value="Enviar consulta" class="mBtn btnOk"/> </form> </div> 7 - En tema/js/admin.js al final del archivo agregan (Actualizado 25.02.22) /** * Database * para ejecutar consultas y crear copias */ var database = new function() { this.execute = () => { $.post(global_data.url + '/admin-ejecutar-sql.php', 'sql=' + $("#sql").val(), h => { switch (h.charAt(0)) { case '0': mydialog.alert('Error', h.substring(3), false) break; case '1': mydialog.alert('Bien', h.substring(3), true) break; } }) } } Eso sería todo, pero úsenlo con mucho cuidado ya que podrían afectar la base de datos, ejemplo quieren eliminar a un usuario y si colocan su id los eliminará a ustedes.. NOTA: Estoy creando algo que incluye esta función, lo cual ustedes van a poder ejecutar consultas, crear copias de seguridad de su base de datos y descargar dicha copia, pero debo averiguar un poco más...