|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - RadicalEd
1
« en: Jueves 19 de Octubre de 2017, 18:16 »
Yo, logicamente, aunque ya no participo en el foro, si lo veo cada que puedo.
2
« en: Viernes 21 de Abril de 2017, 13:50 »
Aprende!
3
« en: Lunes 17 de Abril de 2017, 14:21 »
fecha=new Date(); if (fecha.getDay()==5) { // TODO }
Ten en cuenta que getDay() te devuelve un entero, entonces puedes manejar un array con los días de la semana, comenzando desde el domingo.
4
« en: Lunes 27 de Marzo de 2017, 19:02 »
Un script shell para crear un PPK desde Linux, sin necesidad de usar el puttygen de Windows #!/bin/bash # RadicalEd # Genera clave de conexión ssh y archivo ppk RED='\033[0;31m' GREEN='\033[1;32m' BLUE='\033[1;34m' NC='\033[0m' DIRSSH="$HOME/.ssh/" DIRPPK="$HOME/Documentos/proyectos/ppk/" # Se verifica si existe la carpeta donde se guardarán los ppk if ! [ -d ${DIRPPK} ]; then printf "La carpeta ${BLUE}${DIRPPK}${NC} no existe, será creada!\n\n" mkdir -p "${DIRPPK}" fi # Se comprobará si existen los programas ssh-keygen y puttygen if ! [ -x "/usr/bin/puttygen" ]; then echo "Se debe tener instalado el programa puttygen" fi if ! [ -x "/usr/bin/ssh-keygen" ]; then echo "Se debe tener instalado el programa ssh-keygen" fi # En caso de que no pasen el usuario en los parametros se captura usuario=$1 if [ -z ${usuario} ]; then echo -n "Nombre de usuario del servidor ssh: " read usuario fi echo "Se creará clave ssh y archivo ppk para el usuario ${GREEN} $usuario ${NC}" # Generación de la clave pública y ppk ssh-keygen -t dsa -C $usuario -f ${DIRSSH}$usuario -q -N "" puttygen ${DIRSSH}$usuario -o ${DIRSSH}$usuario.ppk # Se guarda en el path de los ppk mv ${DIRSSH}$usuario.ppk $DIRPPK # Si desea entrar por ssh, se creará un alias en el bashrc echo -n "Desea crear un alias-ssh para entrar por consola (si/no)?: " read aliassh if [ "$aliassh" = "si" ]; then echo -n "IP o nombre de servidor: " read servidor echo "alias ssh$usuario='ssh -i $HOME/.ssh/$usuario $usuario@$servidor'" >> $HOME/.bashrc #source $HOME/.bashrc #exec bash printf "\nSe creó un nuevo alias, lo puedes usar con el comando ${GREEN}ssh$usuario${NC}\n\nRecuerda que antes de poder usar el alias, " fi # Copiar contenido de la llave pública para copiar al servidor printf "debes copiar la siguiente llave en tu servidor $servidor\n\n$usuario:" cat ${DIRSSH}$usuario.pub # Se elimina la clave pública creada rm -f ${DIRSSH}$usuario.pub exec bash
5
« en: Jueves 23 de Marzo de 2017, 15:04 »
Hace rato no posteo nada en mi amado SoloCodigo, les adjunto auditorias para bases de datos PostgreSQL y MySQL, la segunda es una mamera. Si se puede mejorar, sobre todo la parte del MySQL, seré feliz PostgreSQLTabla CREATE TABLE auditoria ( fecha_cambio TIMESTAMP WITH TIME zone DEFAULT now(), nombre_disparador text, tipo_disparador text, nivel_disparador text, comando text, tabla text, old_info text, new_info text ) WITH ( OIDS=FALSE ); ALTER TABLE auditoria OWNER TO postgres;
Función (Stored Procedure) CREATE OR REPLACE FUNCTION sp_auditoria_log() RETURNS TRIGGER AS $BODY$ DECLARE BEGIN IF (TG_OP = 'DELETE') THEN INSERT INTO auditoria (nombre_disparador,tipo_disparador,nivel_disparador,comando,tabla,old_info,new_info) VALUES (TG_NAME,TG_WHEN,TG_LEVEL,TG_OP,TG_TABLE_NAME,OLD,NULL); RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO auditoria (nombre_disparador,tipo_disparador,nivel_disparador,comando,tabla,old_info,new_info) VALUES (TG_NAME,TG_WHEN,TG_LEVEL,TG_OP,TG_TABLE_NAME,OLD,NEW); RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN INSERT INTO auditoria (nombre_disparador,tipo_disparador,nivel_disparador,comando,tabla,old_info,new_info) VALUES (TG_NAME,TG_WHEN,TG_LEVEL,TG_OP,TG_TABLE_NAME,NULL,NEW); RETURN NEW; END IF; RETURN NULL; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION tg_auditoria_log() OWNER TO postgres;
Trigger CREATE TRIGGER tg_disparador_nombre_tabla AFTER INSERT OR UPDATE OR DELETE ON nombre_tabla FOR EACH ROW EXECUTE PROCEDURE sp_auditoria_log();
MySQLTabla CREATE TABLE auditoria ( fecha_cambio DATETIME NOT NULL DEFAULT NOW() , nombre_disparador VARCHAR(30) NOT NULL, tipo_disparador VARCHAR(15) NOT NULL, nivel_disparador VARCHAR(15) NOT NULL, comando VARCHAR(45) NOT NULL, tabla VARCHAR(45) NOT NULL, old_info LONGTEXT NOT NULL, new_info LONGTEXT NOT NULL );
Stored Procedure DROP PROCEDURE IF EXISTS sp_auditoria_log; DELIMITER $$ CREATE PROCEDURE sp_auditoria_log ( IN disparador VARCHAR(30), IN tipo VARCHAR(15), IN nivel VARCHAR(15), IN comando VARCHAR(45), IN tabla VARCHAR(45), IN oldInfo LONGTEXT, IN newInfo LONGTEXT) BEGIN INSERT INTO auditoria (nombre_disparador,tipo_disparador, nivel_disparador,comando,tabla,old_info,new_info) VALUES (disparador, tipo, nivel, comando, tabla, oldInfo, newInfo); END $$
Trigger A diferencia de postgres, se necesita crear disparador por cada DML, además se debe colocar cada campo, tanto nuevo como viejo, en los 2 últimos campos del SP. DROP TRIGGER IF EXISTS tg_disparador_nombre_tabla; DELIMITER $$ CREATE TRIGGER tg_disparador_nombre_tabla AFTER INSERT ON nombre_tabla FOR EACH ROW BEGIN CALL sp_auditoria_log('tg_disparador_nombre_tabla', 'AFTER', 'ROW', 'INSERT', 'nombre_tabla', NULL, CONCAT(NEW.campo1, ',', NEW.campo2, ',', NEW.campo3, ',', NEW.campo4, ',', NEW.campoN)); END $$ DELIMITER ; DROP TRIGGER IF EXISTS tg_disparador_nombre_tabla; DELIMITER $$ CREATE TRIGGER tg_disparador_nombre_tabla AFTER UPDATE ON nombre_tabla FOR EACH ROW BEGIN CALL sp_auditoria_log('tg_disparador_nombre_tabla', 'AFTER', 'ROW', 'UPDATE', 'nombre_tabla', CONCAT(OLD.campo1, ',', OLD.campo2, ',', OLD.campo3, ',', OLD.campo4, ',', OLD.campoN), CONCAT(NEW.campo1, ',', NEW.campo2, ',', NEW.campo3, ',', NEW.campo4, ',', NEW.campoN)); END; $$ DELIMITER ; DROP TRIGGER IF EXISTS tg_disparador_nombre_tabla; DELIMITER $$ CREATE TRIGGER tg_disparador_nombre_tabla AFTER DELETE ON nombre_tabla FOR EACH ROW BEGIN CALL sp_auditoria_log('tg_disparador_nombre_tabla', 'AFTER', 'ROW', 'DELETE', 'nombre_tabla', CONCAT(OLD.campo1, ',', OLD.campo2, ',', OLD.campo3, ',', OLD.campo4, ',', OLD.campoN), NULL); END; $$ DELIMITER ;
Adjunto SP que genera los triggers de las tablas que se le pasen como parametro, las imprime en un select, si conocen una forma de ejecutarlos directamente, con PREPARE-EXECUTE y no me funcionó. DROP PROCEDURE IF EXISTS sp_genera_triggers; DELIMITER $$ CREATE PROCEDURE sp_genera_triggers (IN schema_auditar VARCHAR(50), IN tablasNo LONGTEXT CHARSET utf8) BEGIN DECLARE tg_insert, tg_update, tg_delete LONGTEXT; DECLARE stmt, tablasTrigger LONGTEXT; DECLARE nombreTabla VARCHAR(50); DECLARE completo INT DEFAULT FALSE; -- -------------------------------------------------------- -- [ Se escogen las tablas que están por fuera de la lista] -- -------------------------------------------------------- DECLARE tablas_lista CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=schema_auditar AND !FIND_IN_SET(TABLE_NAME, tablasNo); DECLARE CONTINUE HANDLER FOR NOT FOUND SET completo = TRUE; OPEN tablas_lista; cursor_loop: LOOP FETCH tablas_lista INTO nombreTabla; IF completo THEN LEAVE cursor_loop; END IF; -- ------------------------------------------------------------------- -- [ Crea los triggers INSERT/UPDATE/DELETE de las tablas permitidas ] -- ------------------------------------------------------------------- SET tg_update := CONCAT('DROP TRIGGER IF EXISTS ', schema_auditar, REPLACE(nombreTabla, 'tn_', '.tg_upd_'), ';\n', 'DELIMITER $$\n', 'CREATE TRIGGER ', schema_auditar, REPLACE(nombreTabla, 'tn_', '.tg_upd_'), '\n', ' AFTER UPDATE ON ', nombreTabla,'\n', ' FOR EACH ROW\n', 'BEGIN\n', ' CALL sp_auditoria_log(\'', nombreTabla, '\',\n', ' \'AFTER\', \'ROW\', \'UPDATE\', \n', ' \'', nombreTabla, '\', \n'); SET tg_delete := REPLACE(tg_update, 'tg_upd_', 'tg_del_'); SET tg_delete := REPLACE(tg_delete, 'UPDATE', 'DELETE'); SET tg_insert := REPLACE(tg_update, 'tg_upd_', 'tg_ins_'); SET tg_insert := REPLACE(tg_insert, 'UPDATE', 'INSERT'); SET stmt := (SELECT CONCAT(' CONCAT(', GROUP_CONCAT(CONCAT('OLD.', COLUMN_NAME) SEPARATOR ', \',\', '), '),\n') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=BINARY schema_auditar AND TABLE_NAME=BINARY nombreTabla); SET tg_update := CONCAT(tg_update, stmt); SET tg_delete := CONCAT(tg_delete, stmt, ' NULL', ');\nEND;\n$$\nDELIMITER ;\n\n'); SET stmt := (SELECT CONCAT(' CONCAT(', GROUP_CONCAT(CONCAT('NEW.', COLUMN_NAME) SEPARATOR ', \',\', '), ')') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=BINARY schema_auditar AND TABLE_NAME=BINARY nombreTabla); SET tg_update := CONCAT(tg_update, stmt, ');\nEND;\n$$\nDELIMITER ;\n\n'); SET tg_insert := CONCAT(tg_insert, ' NULL,\n', stmt, ');\nEND\n$$\nDELIMITER ;\n\n'); SET tablasTrigger := CONCAT(tg_insert, tg_update, tg_delete); SELECT tablasTrigger; END LOOP; CLOSE tablas_lista; SET script := tablasTrigger; END $$
SET @tablasNo:='tabla1,tabla2,tabla3,tabla4,tablaN'; CALL sp_genera_triggers('nombre_schema', @tablasNo, @scriopt);
6
« en: Viernes 3 de Febrero de 2017, 22:30 »
No sé si todavía te sirve, pero con ésta consulta obtendrás lo que necesitas. SELECT UPDATE_TIME FROM information_schema.TABLES WHERE TABLE_SCHEMA='base de datos' AND TABLE_NAME='tabla';
7
« en: Martes 24 de Marzo de 2015, 14:00 »
Con HTML no se puede, lo que puedes hacer es guardar esos datos en un form con text ocultos y por medio de javascript enviarlos de una página a otra por medio de parámetros GET
8
« en: Viernes 12 de Diciembre de 2014, 15:01 »
Que post, cómo extraño a los locos que conocí en mis inicios de SoloCódigo, con ellos aprendí muchísimo
9
« en: Lunes 5 de Mayo de 2014, 03:56 »
Excelente
10
« en: Domingo 4 de Mayo de 2014, 03:58 »
Te equivocaste de foro, lo que debes hacer es buscar la clase R de Java o precompilar la aplicación para que se vuelva a autogenerar, o por lo menos eso pasa en eclipse
11
« en: Domingo 9 de Marzo de 2014, 04:14 »
Pues todo parece estar bien, revisa las capas que de pronto va por ese lado.
PD: Quién tiene ahora mis clases de Énfasis II y III?
12
« en: Miércoles 13 de Noviembre de 2013, 01:27 »
por favor!! necesito resolver esto podrian ayudarme con el codigo por favor! ingrese una fecha y diga cuantos dias faltan para acabar el año, cuantos dias han pasado desde esa fecha hasta la fecha actual,que dia cae esa fecha(lunes,martes), y mestre la misma fecha en el sigueinte formato:" lunes 15 de abril de 2003" es urgente ayuda por favor!
Bravo, un inútil más en este mundo, gracias a personas como tú yo seguiré teniendo trabajo
13
« en: Jueves 7 de Noviembre de 2013, 05:25 »
Si está en un linux prueba los permisos a los directorios, muestra un pantallazo y te colaboro
14
« en: Martes 15 de Octubre de 2013, 00:27 »
bueno muchachos... les cuento q yo no estoy casado con IIS, lo unico q me apegaba a él, era q yo le daba click derecho y podia configurar mi sitio desde alli facilmente.
pero como no pude ponerlo a andar con PHP, entonces ahora coji e instale la version del Servidor Apache 2.2 Estable, luego instalo lanzo el instalador de PHP y en su transcurso me pide q le indique el servidor web, y yo le indico q es Apache 2.2 (al parecer el mismo deberia configurar el .ini de Apache).
Ahora ya tengo coriendo Apache en mi equipo... y corre perfectamente con paginas HTML... pero cuando le doy un .php nohace nada, ni siquiera me da el error q anteriormente me daba IIS. ..... Bueno muchachos... gracias x su colaboracion, voy a seguir buscando por hay por la red algun documento q me pueda servir...
...,y porsupuesto, voy a intentar con las sugerencias q me dieron.... pa' ver como me va...
Lo que pienso que te faltaria es que le digas a Apache que tiene al php como modulo y asi tambien que los archivos de php los interprete como tal. tambien para salir de dudas puedes hacer lo siguiente:
Si te tomaste la molestia de leer este enunciado te darás cuenta que es un post de hace 6 años
15
« en: Sábado 7 de Septiembre de 2013, 04:19 »
yo nunca dejaré el foro, acá aprendí muchísimo de manos de muchos monstruos de la programación y aunque no lo visito si lo tengo en mi FeedRSS para ver los mensajes que me traman
16
« en: Martes 3 de Septiembre de 2013, 19:52 »
Exactamente, los inútiles de ahora quieren todo el código hecho
17
« en: Jueves 22 de Agosto de 2013, 19:13 »
18
« en: Jueves 15 de Agosto de 2013, 23:47 »
Usa una ruta interna en tu path de la aplicación y usa el include con las comillas #include "cripto/loquesea.h"
19
« en: Miércoles 14 de Agosto de 2013, 17:54 »
Con mucho cuidado y paciencia
20
« en: Viernes 2 de Agosto de 2013, 19:56 »
Intentalo con excepciones try: # código except: # código
21
« en: Domingo 28 de Julio de 2013, 06:12 »
Mira sobre ataques SQL Injection, XSS, HTML Injection, con unas cuantas funciones te puedes ahorrar muchos problemas, pero recuerda que nunca será siempre segura, pero por lo menos para los más bobos te servirá; 2 funciones que te ayudarán son, htmlentities y stripslashes
22
« en: Lunes 8 de Julio de 2013, 18:37 »
la etiqueta select no debes ponerle type="text", el select es una etiqueta aparte del input que si tiene varios tipos, deja el select sin ese atributo type y prueba
23
« en: Viernes 28 de Junio de 2013, 18:10 »
Busca sobre hilos en C
24
« en: Martes 25 de Junio de 2013, 17:55 »
"UPDATE profesor SET rut=".'$_POST["rut"]'.",nombre='".$_POST["nombre"].",apellido=".$_POST["apellido"].",telefono=".$_POST["telefono"]."WHERE rut=".$_GET["id"].";"
faltan comillas y hay comillas de sobra, revisa bien, en la primera las comillas simples están mal puestas; en la segunda, pusiste al principio y no al final, en la tercera si es una cadena apellido, le hacen falta las comillas
25
« en: Martes 25 de Junio de 2013, 16:24 »
Esta parte la debes manejar con javascript ya que HTML no maneja calculos,
|
|
|