¡Bienvenido! ¿Aún no estás registrado?, deberás registrarte antes de poder usar el Chat, Comentar y Descargar en el Foro. Usa un email válido para la activación.
Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

SUGERENCIA Ejecutar SQL desde la administración [Arreglado]
#1

3
Mejor respuesta del mensaje Ejecutar SQL desde la administración [Arreglado]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 === 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), 0strlen($sql) - 1);
                
array_push($sqlListdb_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&oacute;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...
Responder
#2

0
Muy bueno, es un adelanto, con eso no hay que entrar en el cpanel y es más rápido.
Gracias
Responder


Compartir en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)