¡Bienvenido a PHPost!

Para participar en el foro, descargar complementos y acceder al chat, es necesario tener una cuenta activa.
Por favor, regístrate utilizando un correo electrónico válido para completar la activación.

Descarga Risus Nova 2.0   (Ver notas de la versión) Estable | Actualizado: 16/06/2026

Regístrate Descargar Risus Nova
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: 3 invitado(s)