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 - ^Tifa^

#1
Abri este post en relacion a una desvirtuacion que estaba creando aca :

http://foro.elhacker.net/nivel_web/asp_vulnerable_a_sqli_por_iis-t284500.0.html

Y entiendo tu punto WHK, revise el link que colocaste pero... el procedimiento es mas dificil de alterar los valores que recibe en relacion a las magic quotes o escape_querys, ya que el procedimiento si valida todos los datos que le llegan y no permite concatenaciones raras ni mucho menos. No digo que sea 100% no vulnerable porque creo que nada es 100% seguro, pero el que ataca la tiene mas chungo intentando bypassear un procedimiento almacenado... imaginate que en vez el id en este caso sea el numero de identificacion personal de alguien... claro puedes despues de mucho intento al azar encontrar una persona que tenga un id personal parecido a otra... pero considerando que las posibilidades son como el numero de la loteria. Las excepciones ya te comente como podria manejarlas para que el gracioso que ataque ni se entere de ver una excepcion retornada por el motor.

Quiero enterarme de la efectividad de vulnerar un procedimiento almacenado, como obligarlo a que llegue la query que alguien le manda? ese es mi dilema. Porque le estoy dando vueltas (no para atacar a nadie) sino para conocer que tan efectivo es y que tanto aplicaria llevarlo a una aplicacion de escritorio.
#2
Bases de Datos / Mini-Bug en MySQL
4 Enero 2010, 22:42 PM
Puesto que reporte esto al bug tracking tool de MySQL y ellos hicieron caso omiso, diciendome que el tipo BINARY leia binarios no caracteres y cerraron el tema (Esto yo ya lo sabia), cuando les pregunte otra cosa  :xD  quiero advertir a todos los que alguna vez quieran usar tipo de datos BINARY en sus tablas.

Tengo este escenario de ejemplo:

Código (sql) [Seleccionar]


mysql> create table ejemplo(
    -> nombres binary(20));
Query OK, 0 rows affected (0.39 sec)

mysql> insert into ejemplo values('Juan'),('Pepe'),('Jose');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from ejemplo;
+----------------------+
| nombres              |
+----------------------+
| Juan                 |
| Pepe                 |
| Jose                 |
+----------------------+
3 rows in set (0.00 sec)


Hasta ahi como pueden ver todo funciona perfectamente bien  :D  ahora que ocurre si se quiere actualizar o eliminar algun dato, observen:

Código (sql) [Seleccionar]


mysql> update ejemplo set nombres = 'Carlos' where nombres = hex('Juan');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update ejemplo set nombres = 'Carlos' where nombres = 'Juan';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> delete from ejemplo where nombres = 'Pepe';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from ejemplo;
+----------------------+
| nombres              |
+----------------------+
| Juan                 |
| Pepe                 |
| Jose                 |
+----------------------+
3 rows in set (0.00 sec)


Un poco chungo no??? no elimino, ni actualizo nada... (Utilize la funcion HEX por recomendacion de la gente de MySQL ya que ellos decian que usase esta funcion para actualizar los datos y cerraron el reporte del bug, pero obviamente No funciona como pueden ver).

Ahora se que muchos diran ese problema se resuelve con un simple ALTER si claro, observen:

Código (sql) [Seleccionar]


mysql> describe ejemplo;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| nombres | binary(20) | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> alter table ejemplo modify nombres varchar(25);
Query OK, 3 rows affected (0.45 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> update ejemplo set nombres = 'Carlos' where nombres = 'Juan';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> delete from ejemplo where nombres = 'Pepe';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from ejemplo;
+----------------------+
| nombres              |
+----------------------+
| Juan                 |
| Pepe                 |
| Jose                 |
+----------------------+
3 rows in set (0.00 sec)


Agur... no funciona. He reiniciado el servidor MySQL he reiniciado mi PC, he vuelto a ingresar al motor despues de reiniciado todo he intentado nuevamente lo anterior expuesto y NADA sigue sin Eliminar o Actualizar ningun dato.

Este problemita aplica tambien para tablas con otro tipo de dato (CHAR, VARCHAR, etc) y le cambies dicho campo a BINARY con ALTER, por ejemplo:

Código (sql) [Seleccionar]


mysql> create table ejemplo2(
    -> nombres varchar(20));
Query OK, 0 rows affected (0.38 sec)

mysql> insert into ejemplo2 values('pepe'),('Juan'),('pedro'),('luis');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from ejemplo2;
+---------+
| nombres |
+---------+
| pepe    |
| Juan    |
| pedro   |
| luis    |
+---------+
4 rows in set (0.00 sec)




Hasta ahi todo bien... de hecho puedo borrar o actualizar con el tipo de datos VARCHAR:

Código (sql) [Seleccionar]


mysql> update ejemplo2 set nombres = 'Cucu' where nombres = 'pepe';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from ejemplo2;
+---------+
| nombres |
+---------+
| Cucu    |
| Juan    |
| pedro   |
| luis    |
+---------+
4 rows in set (0.00 sec)




Hasta ahi todo bien ahora miren esto:

Código (sql) [Seleccionar]


mysql> alter table ejemplo2 modify nombres binary(20);
Query OK, 4 rows affected (0.27 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from ejemplo2;
+----------------------+
| nombres              |
+----------------------+
| Cucu                 |
| Juan                 |
| pedro                |
| luis                 |
+----------------------+
4 rows in set (0.00 sec)

mysql> update ejemplo2 set nombres = 'Marta' where nombres = 'Cucu';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0




No actualizo el dato tampoco borra para el que quiera intentarlo, ahora hago nuevamente ALTER para que mi tipo de dato sea otra vez VARCHAR pensando vagamente que esto resolvera este problema:

Código (sql) [Seleccionar]


mysql> alter table ejemplo2 modify nombres varchar(20);
Query OK, 4 rows affected (0.10 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> describe ejemplo2;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| nombres | varchar(20) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> update ejemplo2 set nombres = 'Marta' where nombres = 'Cucu';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0




Como pueden ver en el campo Changed:0 indica que no actualizo los datos aun siendo VARCHAR  :-\  tampoco elimina los datos siempre y cuando usemos constantes digase campo = algo

Reiniciar el motor MySQL no resuelve este problema, tampoco reiniciar el servidor como tal.

Porque coloco esto aqui? por el simple hecho de que si alguien tuviera un foro como este, con tablas llenas de datos millones de ellos, y alguien de alguna manera hackea la DB y hace un ALTER y coloca campo BINARY y luego un ALTER para retornar a VARCHAR y digamos que ese campo donde se aplico eso, es el campo Mensajes (POST) del foro, y luego ese usuario se antoja de entrar al foro y insultar , ofender y llenarlo de SPAM y el Admin no va a poder eliminar dichos posts... y tampoco recibira Error no Warnings recibira nada... Y asumo que lo mismo podria ocurrir a la hora de Banear a un usuario por su nick.

Por eso posteo eso aca, porque aunque es dificil lograr acceder como admin a un motor MySQL para hacer estos cambios, siempre buscan la via de llegar, y no es nada gracioso para ningun DBA ver que no puede borrar ni actualizar datos del motor y No saber porque.

Un saludo.
#3
Scripting / Quitar 1 expresion con SED
13 Diciembre 2009, 23:01 PM
Hola.  :D

Estoy haciendo una migracion manual de un dumpeo de un esquema de MySQL hacia Oracle. (Se que puedo utilizar ETL gratuitos o Oracle Workbench) pero no es el caso, no hay servidor grafico y no puedo instalar muchas cosas raras en el PC que es.

Bien asi que la migracion que en este caso son sencillas (tablas nada de procedimientos, ni triggers ni funciones) he creado el siguiente script en bash que me serviria con una unica falla:

Código (perl) [Seleccionar]

#!/bin/bash -x

mensaje="UNLOCK TABLES*";
mensajito="LOCK TABLES*";
archivo="/home/marian/pepe/backup.sql";
mensaje1="*";
mensaje2="*";
mensaje3="ENGINE*";
new="/home/marian/pepe/nuevo.txt";
fin="NULL  ";
curva=")";
indices="KEY";
tabla="DROP TABLE*"
extra="``";

sed "/$mensaje/d"  $archivo > nuevo.txt
sed "/$mensajito/d" $new > tmp && mv tmp $new
sed "/$mensaje1/d" $new > tmp && mv tmp $new
sed "/$mensaje2/d" $new > tmp && mv tmp $new
sed "/$tabla/d" $new > tmp && mv tmp $new
sed "/$extra/d" $new > tmp && mv tmp $new
sed "s/$indices/UNIQUE/" $new > tmp && mv tmp $new
sed "/^$/d" $new > tmp && mv tmp $new
sed -e "/$mensaje3/G" $new > tmp && mv tmp $new
sed "/$mensaje3/d" $new > tmp && mv tmp $new
sed "s/^$/$curva/" $new > tmp && mv tmp $new



Mi falla es en la variable $extra="`" como bien saben la comilla inclinada (`) sirve para ejecucion, y no encuentro forma de quitarla con SED en el archivo generado por mysqldump:

Código (perl) [Seleccionar]


bash-3.1$ cat nuevo.txt                                         
-- MySQL dump 10.13  Distrib 5.4.3-beta, for pc-linux-gnu (i686)
--                                                             
-- Host: localhost    Database: primaria                       
-- ------------------------------------------------------       
-- Server version       5.4.3-beta                             
--                                                             
-- Table structure for table `copia`                           
--                                                             
CREATE TABLE `copia` (                                         
  `data` int(11) DEFAULT NULL,                                 
  `apellidos` char(20) DEFAULT NULL,                           
  UNIQUE `data` (`data`)                                       
)                                                               
--                                                             
-- Dumping data for table `copia`                               
--                                                             
INSERT INTO `copia` VALUES (1,'Lopez'),(2,'Sanchez'),(2,'Sanz'),(5,'Heredia'),(4,'Mendeira');
--                                             



Lo que la variable $extra en este caso me esta haciendo es eliminandome todas las lineas donde encuentre la dichosa comilla `valor` la linea completa  :-\  y yo solo quiero que por ejemplo a:

CREATE TABLE `copia`

me lo deje como

CREATE TABLE copia

lo unico que quiero eliminar es la comillita simple inclinada no el valor dentro de la misma.

Alguien sabe como puedo hacer eso con el comando SED en Linux?
#4
Hacking / Ocultar virus sin cambiar tamano
27 Noviembre 2009, 16:57 PM
Hola, quisiera saber si existe la manera de ocultar un archivo de cualquier extension dentro de una imagen por ejemplo, sin que se afecte el tamanio de la imagen como tal.

El objetivo es tener una copia del archivo original pero con un archivo extra copiado dentro de si mismo. Pero tanto el archivo original como el modificado con una copia de otro dentro deben tener el mismo tamanio.

Existe alguna herramienta para ello?

PD: No estoy intentando infectar ni ocultar virus, es para otro asunto.
#5
Esto solo es el primer paso de como optimizar un motor MySQL para mejores resultados. Ire ofertando mas nuevas implementaciones en el futuro cercano.

Citar

EXPLAIN MySQL es una herramienta indispensable (no la única) a la hora de realizar tareas de otpimización sql.

Explain MySQL no es más que una manera de mostrar como MySQL procesa las sentencias SQL mediante sus índices y uniones. El uso de Explain MySQL permite ayudar a los DBAs, en una primera instancia, a mejor el diseño de base de datos agregando índices y permitiendo una selección de consultas más óptimas.

Lo único que debemos hacer para hacer uso de Explain MySQL es anteponer "Explain" a la SQL deseada.


   
Código (sql) [Seleccionar]
EXPLAIN SELECT * FROM `localidades` WHERE id =1


Ejecutando esta SQL, MySQL nos indica como la está procesando y nos mostrará un listado con información sobre índices, tablas, resultados, etc.

En el resultado de explain de mysql visualizaremos una tabla con 10 columnas de información para cada tabla implicada




De las columnas anteriores cabe destacar:

1. type: Esta columna indica el tipo de unión que se está usando (de más a menos óptimo).

Donde SIMPLE (Es cuando no se usan Uniones o SubConsultas)
Donde UNION (Es cuando usamos la clausula UNION en 2 tablas)
Donde SubQUERY ( Es cuando usamos Subconsultas)


2. const: Es la más óptima y se dá cuando la tabla tiene como máximo una fila que coincide. Como solo hay una fila coincidente, MySQL la considerará como constante por el optimizador.

3. eq_ref: Una fila será leída de la tabla A por cada combinación de fila de la tabla B. Este tipo es usada cuando todas las partes de un índice son usados para la consulta y el índice es UNIQUE o PRIMARY

4. ref: Todas las filas con valores en el índice que coincidan serán leídos desde esta tabla por cada combinación de filas de las tablas previas. Si la clave que es usada coincide sólo con pocas filas, esta unión es buena.

5. range: Sólo serán recuperadas las filas que estén en un rango dado, usando un índice para seleccionar las filas. La columna key indica que índice se usará, y el valor key_len contiene la parte más grande de la clave que fue usada. La columna ref será NULL para este tipo.

6. index: Este es el mismo que ALL, excepto que sólo el índice es escaneado. Este es usualmente más rápido que ALL, ya que el índice es usualmente de menor tamaño que la tabla completa.

7. ALL: Realiza un escaneo completo de tabla por cada combinación de filas de las tablas previas. Este caso es el peor de todos.

8. possible_keys: Esta columna indica los posibles índices a utilizar en la consulta

9. key: Esta columna indica el indice que MySQL actualmente está usando. Esta columna es NULL si no se ha elegido ninguno. Es interesante saber que podemos forzar a MySQL a usarlo (y también a ignorarlo) mediante el uso de FORCE INDEX, USE INDEX o IGNORE INDEX

10. key_len: El tamaño del índice usado. A menor valor mejor.

11. ref: La columna ref muestra que columna o constante es usada junto a la key para seleccionar las columnas de la tabla

12. rows: Indica el número de columnas que MySQL cree necesario examinar para ejecutar la SQL.

13. extra: Indica información adicional de como MySQL ha resuelto la SQL y hay que prestar atención si aparece USING FILESORT o USING TEMPORARY. En el primer caso, indica que MySQL debe hacer un paso extra para recuperar la información. En el segundo, MySQL necesita generar una tabla extra para mantener la información y después mostrarla y es típico al usar GROUP BY u ORDER BY.

En ocasiones, MySQL puede mostrar ALL en la columna type cuando:

1. La tabla es tan pequeña que MySQL ve más rapido hacer un escaneo completo de la tabla.

2. No hay restricciones usando las cláusulas ON o WHERE.

3. Se compara columnas indexadas con valores constantes.

4. Las claves utilizadas devuelven muchos registros que coinciden con el valor.

Aún así, hay que decir que éste no es el único método de optimización SQL, aunque es uno bueno


Fuente de lo publicado Anteriormente:
http://www.sergiquinonero.net/explain-mysql-o-como-optimiza-sql.html
#6
Hola.

En varias ocasiones navegando y posteando por el foro me ha ocurrido esto, al clickear Enviar o Modificar o Refrescar pagina:



Aun permaneciendo logeada, y no puedo postear o responder o hacer nada (Si navegar) durante al menos 3 minutos... esto no solia pasarme.

Existe alguien mas que haya tenido este inconveniente con este foro?
#7
Es una pregunta extremadamente tonta lol...  ;D

Pero realmente como no he encontrado definicion exacta sobre el tema. En que ocasiones, para que y que significado tiene en Python hacer :

if __name__ == "__main__"

:)

Gracias.
#8
PHP / Organizar Tabla HTML
25 Abril 2009, 07:14 AM
Hola.

Tengo un sencillo hasta el momento formulario en Html lo unico que hace es tener un textbox para que el usuario inserte la palabra a buscar en la base de datos. Bien tengo el archivo PHP que recibe los datos del formulario html :

Código (php) [Seleccionar]


require_once("requisito.php");

class Seleccion extends Rosa {

public function Conectando() {

$varia = $_POST['palabra'];

try {

if ( $conexión = mysql_connect($this->servidor, $this->usuario, $this->contrasena) ) {
mysql_select_db("primaria", $conexión);

$consulta = mysql_query("SELECT * FROM ejemplo WHERE nombres LIKE '$varia%'", $conexión) or die(mysql_error());

if ( mysql_num_rows($consulta) == 0 ) {

echo "No hay datos\n";

}

/* Aca en este Punto me imprime la tabla primero lo que esta dentro del bucle While,
    y al finalizar la devuelta de registros, me imprime la cabecera de la tabla */

print "<table border=2><tr><td bgcolor='red'>TITULO</td><td bgcolor='gray'>NOMBRES</td></tr>";

while ($registros = mysql_fetch_array($consulta, MYSQL_NUM)) {
print "<td bgcolor='orange'>$registros[0]</td><td  bgcolor='blue'>$registros[1]</td></tr>";

}
print "</table>";

mysql_free_result($consulta);

} else {

throw new Exception("Error al consultar\n");

}


} catch ( Exception $e ) {

print $e->getMessage();

}

}

function __destruct() {

$this->servidor = null;
$this->usuario = null;
$this->contrasena = null;

}

}

$personas = new Seleccion();
$personas->Conectando();




Como indico dentro del codigo en la linea del While, al imprimirme los resultados en una web, me salen primero los registros devueltos encontrados en la tabla y luego al final me pone la cabecera de la Tabla  :-\  no deberia funcionar al inverso? puesto que declaro la tabla primero que el bucle while....? O estoy obviando algo...
#9
Tengo como 8 dias que no envio 1 solo mensaje personal a nadie.....

Como es esto que excedi el envio de mensajes personales??? Queria enviar uno hoy y me sale con esa.   :P
#10
Java / Evaluar Variable cuando esta vacia
3 Diciembre 2008, 23:19 PM
Hola, estoy recien aprendiendo Java.  :rolleyes:

Bueno tengo una variable tipo caracteres, y quiero que cuando el usuario deje esto vacio, pues salga algun warning o algo asi, pero el codigo me esta obviando eso, y me esta imprimiendo el otro valor  :-\  todavia estoy un poco liada en cuanto al manejo de excepciones en Java ... cualquier tipo de explicacion se apreciaria  :rolleyes:

Código (java) [Seleccionar]

import java.util.*;
import java.io.*;

public class Sol {

public static String palabra;

public static void main(String[] args) throws IOException {

BufferedReader a = new BufferedReader(new InputStreamReader(System.in));

int numeral = 15;

Verdura.naranja(numeral);

System.out.println("Inserta palabra");
palabra = a.readLine();

if ( palabra == "" ) {
System.out.println("Debiste poner algo");
} else {
Verdura.naranja(palabra);
}
}
}

class Verdura {

private static int numero = 10;
private static int numero1 = 20;

public static int naranja(int numeral) {

System.out.println("Respuesta es " + numeral+(numero*numero1));

return 0;
}

public static void naranja(String catarata) {

try {

PrintWriter b = new PrintWriter(new FileWriter("archivo.txt"));

b.println(numero);
b.println(numero1);

b.close();
} catch (IOException e) {

System.out.println("No se puede crear el archivo");

}
}
}
#11
Scripting / Tutorial Perl/Tk.
19 Noviembre 2008, 21:34 PM
Ya que no he visto referencia alguna en la web sobre tutoriales de Perl/Tk en Espanol.
Aqui presento uno como parte de mi colaboracion personal......

Que necesita tu SO para ejercer esto?

1 - El interprete Perl.

Nada mas. No es requerido que tengas las librerias TK instaladas en tu SO, ya que
en este caso utilizare el modulo Perl::Tk el cual no es mas que una implementacion
de algunos 'widgets' de Tk, mas son independientes y no requieren ni trabajan directamente
con las librerias de Tk.

Si disponemos de Perl, tenemos que bajar el Modulo Perl::Tk de la web de Cpan. Para ello abrimos
una terminal Shell y hacemos con el usuario 'root' lo siguiente.

bash$ perl -MCPAN -e shell

Si es la primera vez que ejecutas la terminal de CPAN te aparecera un cuestionario de preguntas
de configuracion.. deberas responder segun tus gustos. Al terminar entramos al interprete de cpan.

cpan>

Cuando lo veas sencillamente manda a buscar he instalar el modulo requerido.

cpan> install Tk

Cpan se encargara de buscar, bajar he instalar todo. al finalizar puedes salir de alli, y abrir un editor
para comenzar a trabajar con perl y Tk.

En el editor colocamos lo siguiente :

#!/usr/bin/perl
use strict;
use warnings;
use Tk;

Expongo.. En la primera linea '#!/usr/bin/perl' indica cual sera el interprete que llamara la aplicacion.
La segunda y tercera linea 'use strict' y 'use warnings' son 2 pragmas de Perl, estas sirven la primera para
recordarnos a codear explicitamente en un lenguaje estructurado limpio (nada de break, continue, goto, etc).
Y la segunda sirve como Debugger en caso de que queramos depurar al ejecutar el script.

La tercera linea 'use Tk' sencillamente importa el modulo 'Tk' a nuestra aplicacion.

#!/usr/bin/perl
use strict;
use warnings;
use Tk;

my $ventana = MainWindow->new();
$ventana->minsize(qw(400 400));
$ventana->resizable('FALSE','FALSE');
$ventana->Label(-text => "Hola Mundo")->pack();

MainLoop();

Guardamos todo lo anterior y ejecutamos :

bash$ perl aplicacion.pl

Se abrira una ventana con un Hola Mundo.

Explicaciones ::

my $ventana = MainWindow->new();
* En esta linea declaramos una variable 'my $ventana' que inicializa un objeto que funcionara como la ventana principal.
Perl tiene 3 tipos de declaracion para las variables, las escalares siempre comienzan con simbolo de dolar $ y guardan cualquier dato caracter o numerico, los arreglos que siempre comienzan con el simbolo arroba @ y por igual guardan cualquier dato caracter o numerico y las variables hash que comienzan con el simbolo % y son variables que hacen referencia a un caracter o numero .. En resumen en Perl no hay que declarar el tipo de dato a guardar dentro de una variable. (Para mas info de tipos de variables, averiguen sobre programacion en Perl).

$ventana->minsize(qw(400 400));
* En esta linea se especifica que el tamano minimo de nuestra ventana sera 400 de ancho y 400 de largo.

$ventana->resizable('FALSE','FALSE');
* EN esta linea se especifica que la ventana no podra ser reducida ni agrandada tanto por ancho como por largo.

$ventana->Label(-text => "Hola Mundo", -font => 'Courier')->pack();
* En esta linea creamos un objeto widget Label que llevara como Texto la palabra 'Hola Mundo'. Todos los objetos de Tk tienen tienen
opciones en este caso el objeto Label le estamos pasando una opcion de Texto a presentar en la ventana, en este caso 'Hola Mundo',
al objeto Label tambien le pasamos otra opcion, -font es el tipo de fuente que llevara definido nuestro 'Hola Mundo' en este caso
utilizo Courier pero igual pueden utilizar otro soportado dentro de su SO. las opciones de los objetos widgets deben ir separadas por coma.

Luego tenemos pack(), este lo que hace es encapsular o guardar el objeto Label dentro de ventana que es nuestro objeto principal. Es obligatorio encapsular el objeto dentro de la ventana padre. En caso de que obvies encapsularla.. perl no sabra donde debe guardar a Label por ende no se presentara en pantalla cuando ejecutemos el script.. ya que lo que saldra en pantalla es el objeto padre ventana y si ventana no tiene un hijo encapsulado no lo mostrara.

pack() aparte de encapsular funciona como un manejador de tamano igual que su contraparte grid().. los cuales explicare mas adelante en otro tutorial.

* MainLoop()
- En esta ultima linea creamos un Loop del objeto principal.. cual es el objetivo de esto? el objetivo es que la linea anterior se encarga de llamar y responder a todos los eventos pasados al objeto principal ventana. Si obviamos esta ultima linea nuestro objeto principal jamas se desplegara por pantalla. Ya que MainLoop maneja todos los eventos del objeto padre.


#!/usr/bin/perl
use strict;
use warnings;
use Tk;

my $ventana = MainWindow->new();
$ventana->minsize(qw(400 400));
$ventana->resizable('FALSE','FALSE');
$ventana->Label(-text => "Hola Mundo")->pack();
my $texto = $ventana->Text(-width => 20, -height => 15, -background => 'white')->pack();
my $entrada = $ventana->Entry(-width => 20, -background => 'white')->pack();
$ventana->Button(-text => "Copiar & Pegar", -command => \&copia)->pack();

MainLoop();

sub copia
{
my $resultado = $entrada->get();
$texto->insert("end", "$resultado");
}

Comentarios :

my $texto = $ventana->Text(-width => 20, -height => 15, -background => 'white')->pack();
* Aca creamos una variable escalar, que guarda un objeto widget de tipo Texto, Texto en este caso tiene 3 opciones
que es de tamano largo y ancho y su color de fondo. Utilizamos pack() al final para especificar que el objeto Text
sera encapsulado dentro del objeto padre ventana.

my $entrada = $ventana->Entry(-width => 20, -background => 'white')->pack();
* Aca creo otra variable que guarda un objeto widget de tipo Entrada, nuevamente con 2 opciones pasadas
siempre separadas por comas, las opciones indican el color de fondo y el largo que llevara el widget.

$ventana->Button(-text => "Copiar & Pegar", -command => \&copia)->pack();
* Aqui declaro un objeto widget tipo Boton, con 2 opciones una el texto a representar el boton, y la otra el
evento que realizara el boton al ser clickeado. Al ser clickeado el boton, este llamara a la funcion 'copia'

sub copia
{
my $resultado = $entrada->get();
$texto->insert("end", "$resultado");
}
* Esta es la funcion llamada cuando el boton es clickeado. Dentro de la funcion se declara una variable escalar '$resultado'
que guardara los datos insertados dentro de la variable '$entrada', recuerden que la variable '$entrada' guarda un objeto Entry cualquier info digitada aqui sera captada get() y guardada en la variable '$resultado'.

$texto->insert("end", "$resultado");
* '$texto' es la variable que guarda al objeto widget de Texto, al llamar a 'insert' este lo que le indica que insertara cierta informacion dentro del widget, en este caso se insertara la variable '$resultado'.
#12
Scripting / Perl/Tk y salida Estandar
1 Junio 2008, 00:54 AM
Hola usando de ejemplo el siguiente codigo :

#!/usr/bin/perl
use strict;
use Tk;
use Tk::NoteBook;

my $ventana = MainWindow->new();
$ventana->minsize(qw(700 400));
$ventana->maxsize(qw(700 400));
$ventana->configure(-title => "Proyecto");

my $nota = $ventana->NoteBook(-background => 'white')->pack(-fill => 'both', -expand => 1);
my $pestana = $nota->add('Uno', -label => "Uno")->pack();
my $pestana1 = $nota->add('Dos', -label => "Dos")->pack();
my $pestana2 = $nota->add('Tres', -label => "Tres")->pack();

my $frama = $pestana->Frame->pack();
$frama->Label(-text => " ")->pack();
my $texto = $frama->Scrolled('Text', -width => 80, -height => 20, -background => 'white')->pack();
$frama->Button(-text => "Ver", -borderwidth => 4, -relief => 'raised', -width => 20, -command => \&proceso)->pack(-side => 'left');
$frama->Button(-text => "Limpiar", -borderwidth => 4, -relief => 'raised', -width => 20, -command => \&proceso1)->pack(-side => 'right');

MainLoop();

sub proceso {
my $a = system("ps aux > archivo.txt");
open(AA,"<archivo.txt");
my @b = <AA>;
$texto->insert("end", "@b");
close(AA);
};

sub proceso1 {
system("rm archivo.txt");
$texto->delete('0.0', "end");
};


Mi objetivo es lograr (cosa que aun no se como) imprimir la salida estandar STDOUT de algun comando hacia el widget Text (texto), pero cuando intento digase con system("ps aux") el me imprime obviamente en la terminal que es el verdadero flujo de salida estandar STDOUT, y en el widget me imprime el valor que dicho comando devuelve, ya sea cero o uno... yo no quiero guardar en un texto primero la impresion de cierto comando y luego abrir ese texto he imprimirlo en mi widget, yo quiero saber si hay alguna via de dirigir la salida estandar a un widget texto.
#13
Scripting / Perl con Mysql
2 Enero 2008, 17:46 PM
Hola, aqui les facilito un Perl Script creado por mi  :D  este scripcito lo que hace es conectarse a Mysql y hacer unas subconsultas simples, pueden editarlo a su preferencia o mejorarlo :)
El script consta de un programa principal y 1 modulo, dicho modulo contiene funciones classes con sus respectivos objetos.

Besos   :-*

Programa Principal :::

#!/usr/bin/perl
use strict;
use warnings;
use lib "/home/marian";
use dependencia;
our @todo = qw(peticion);

my $a = $todo[0];

sub Menu {
do {
print STDOUT "/\/\/\/\/\/\ MYSQL CONECTOR /\/\/\/\/\/\/\/\/ \n";
print STDOUT "----------------------------------------------\n";
print "1 - Ver Base de datos disponible\n";
print "2 - Ver Tablas Disponibles\n";
print "3 - Ver registros de una Tabla\n";
print "4 - Salir\n";

chomp (my $respuesta = <STDIN>);

if ($respuesta == 1) {
eval $a->db;
}
elsif ($respuesta == 2) {
eval $a->tablas;
}
elsif ($respuesta == 3) {
eval $a->registros;
}
elsif ($respuesta == 4) {
exit(1);
}
elsif ($respuesta eq "") {
print "Usted debe seleccionar algo\n";
return Menu();
}
} while (1);
} & Menu;

exit 0;


Modulo que lo acompana  ::

package dependencia;
use strict;
use Mysql;
require "prueba.pl";

sub main {
my $conexión = Mysql->connect("localhost", "primaria", "marian", "123") || die "$!\n";
$conexión->selectdb("primaria") or return "Error";
};

sub peticion::db {
do main();
if (!(main)) {
print "Error:: No se pudo conectar\n";
exit(1);
}
else {
my @a = main->listdbs();
print "La Base de datos disponibles son ::   ";
print "@a\n";
}
};

sub peticion::tablas {
do main();
if (!(main)) {
print STDOUT "Error:: No se pudo conectar\n";
exit(1);
}
else {
my @a = main->listtables();
print "Las Tablas Disponibles son ::  ";
print "@a\n";
}
};

sub peticion::registros {
do main();
if (!(main)) {
print STDOUT "Error:: No se pudo conectar\n";
exit(1);
}
else {
print STDOUT "Indique el nombre de la Tabla ::  ";
my $respuesta = <STDIN>;
chop $respuesta;
my $a = main->query("SELECT * FROM $respuesta;");
print "Los Registros de $respuesta son ::  \n";
while ( my @b = $a->fetchrow) {
print "@b\n";
}
}
};

return 0;
#14
Scripting / Mi Script de Perl y Mysql :(
14 Diciembre 2007, 14:53 PM
He creado un scriptcito Perl con orientacion OOP ..  soy novata con Perl todavia  :-\  mi scriptcito en cuestion funciona excepto la opcion 5 que me muestra todassss las columnas de una tabla que yo le indique, pongo el nombre de la tabla y se queda buscando y buscando y nunca me responde  :-(  no se que onda yo necesito ver que tienen las tablas dentro. Este es mi scriptcito.

#!/usr/bin/perl
use strict;
use warnings;
use prueb;
our $respuesta;
our @todo;
our @peti = qw(peticion tabla tablita tables);

print "-------- Mysql Consultas --------\n";
print "-------- Autor : M. ---------\n\n";
print "Inserte por orden y separados por espacio <NO ENTER> :\n *Nombre Host :\n *Nombre Base de datos :\n *Nombre Usuario :\n *Contrasena de Usuario :\n ";
my $opcion = <STDIN>;
chomp($opcion);
@todo = split(/\s+/, $opcion);
print "\n\n";
do {
print "1-Eliminar Tabla\n 2-Crear Tabla\n 3-Ver Listado Tablas\n 4-Ver Listado DB\n 5-Ver Registros Tabla
6-Salir\n";
print "Inserte su peticion\n";
$respuesta = <STDIN>;
chomp($respuesta);

if ($respuesta == 1) { eval $peti[1]->eliminar; }
elsif ($respuesta == 2) { eval $peti[2]->crear; }
elsif ($respuesta == 3) { eval $peti[3]->ver; }
elsif ($respuesta == 4) { eval $peti[3]->db; }
elsif ($respuesta == 5) { eval $peti[3]->registro; }
elsif ($respuesta == 6) { exit(1); };

} while (1);

exit(0);


Este es el modulito que lo acompana.

package prueb;
use strict;
use Mysql;
require "prueb.pl";
our $respuesta;
our @todo;

sub main {
my $conexión = Mysql->connect($todo[0], $todo[1], $todo[2], $todo[3]) or die "$!\n";
};

sub peticion::query {
& main();
main->selectdb($todo[1]);
main->query($respuesta) || die "$!\n";
};

sub tabla::eliminar {
print "Inserte el nombre de la tabla a Eliminar : ";
my $respuesta = <STDIN>; chomp($respuesta);
& main();
main->selectdb($todo[1]);
my $peticion = main->query("drop table if exists $respuesta;") || die "$!\n";
print STDOUT "Ejecuccion Realizada satisfactoriamente\n";
};

sub tablita::crear {
print "Inserte la sentencia SQL a ingresar\n";
my $respuesta = <STDIN>; chomp($respuesta);
do main;
main->selectdb($todo[1]);
my $peticion = main->query($respuesta) || die "$!\n";
print STDOUT "Ejecuccion Realizada satisfactoriamente\n";
};

sub tables::ver {
do main;
my @tablas = main->listtables;
print "Las tablas disponibles son @tablas\n";
};

sub tables::db {
& main();
my @datas = main->listdbs;
print "Las Base de datos disponibles en su esquema son : \n @datas\n";
};

sub tables::registro {
print "Inserte el nombre de la tabla\n";
my $respuesta = <STDIN>; chop $respuesta;
do main;
main->selectdb($todo[1]);
my $peticion = main->query("SELECT * FROM $respuesta;");
my @peti = $peticion->fetchrow();
print "Los datos de dicha tabla son \n @peti\n";
};

return 0;
#15
Scripting / Script Perl para consultas Mysql
9 Noviembre 2007, 18:18 PM
He iniciado un simple y extenso script de perl que hace consultas y subconsultas a Mysql, Postgresql y proximamente Oracle :D

El script en si es basicamente para usuarios que no saben casi nada de SQL y esto les puede server, Bien, el script iba a ser demasiado extenso para 1 solo archivo, asi que lo dividi en varios modulos, por el momento solo publicare el script completo hacia Mysql ya que en el modulo Postgresql me faltan algunas subconsultas que completar y testear en mi PC.

He aqui el main.pl del script:

#!/usr/bin/perl

use strict;
use warnings;
use DBI;
use Mysql;
use mysql1;
use msql1;
use pgs1;
use oracle1;


printf " ***************************************\n ";
printf " **************  Genesix ***************\n ";
printf " ********** Version 1.0 **************\n ";
printf " ********* Autor:: Marian S. *********\n" ;
printf " Escriba la base de datos que le gustaria utilizar\n";
printf "\n";
printf " 1 - Mysql, 2 -Postgresql, 3 - Oracle  :  Seleccione un numero para continuar  ";
my $opcion = <STDIN> ;
chomp $opcion;
if ($opcion eq 1) {  Mysql(); }
elsif ($opcion eq 2) { Postgresql(); }
elsif ($opcion eq 3) { Oracle(); }

sub Mysql {
my $hostname = "localhost";
printf "Bienvenido/as al cliente de consultas Mysql :  ";
printf "Indique que quiere hacer\n";
printf " 1 - Crear una tabla\n";
printf " 2 - Eliminar una tabla\n";
printf " 3 - Crear un backup de una base de datos y todas sus tablas\n" ;
printf " 4 - Otorgar permisos a una base de datos a un usuario\n" ;
printf " 5 - Eliminar una Base de Datos\n";
printf " 6 - Modificar/Alterar una tabla\n" ;
printf " 7 - Remover permisos de una base de datos a un usuario\n";
printf " 8 - Crear una base de datos\n";
my $query = <STDIN>;
chomp $query;
if ($query eq 1) { &mysql1::mysql2(); }
elsif ($query eq 2) { &mysql1::mysql3(); }
elsif ($query eq 3) { &mysql1::mysql4(); }
elsif ($query eq 4) { &mysql1::mysql5(); }
elsif ($query eq 5) { &mysql1::mysql6(); }
elsif ($query eq 6) { &msql1::msql2(); }
elsif ($query eq 7) { &msql1::msql3(); }
elsif ($query eq 8) { &msql1::msql4(); }
} ;

sub Oracle {
printf "Bienvenido/a al cliente de consultas Oracle : ";
printf "Especifique que desea hacer\n";
printf " 1 - Crear una tabla\n";
printf " 2 - Eliminar una tabla\n";
printf " 3 - Crear un backup de una base de datos y todas sus tablas\n" ;
printf " 4 - Otorgar permisos a una base de datos a un usuario\n" ;
printf " 5 - bla bla\n";
my $query = <STDIN>;
chomp $query;
if ($query eq 1) { &oracle1::oracle2(); };

} ;

sub Postgresql {
printf "Bienvenido/a al cliente de consultas Postgresql : ";
printf "Especifique que desea hacer\n";
printf " 1 - Crear una tabla\n";
printf " 2 - Eliminar una tabla\n";
printf " 3 - Crear un backup de una base de datos y todas sus tablas\n" ;
printf " 4 - Otorgar permisos a una base de datos a un usuario\n" ;
printf " 5 - bla bla\n";
my $query = <STDIN>;
chomp $query;
if ($query eq 1) { &pgs1::pgs2(); };

} ;

1;


Bien Como dije divide en modulos el programita solo publicare los modulos de Mysql, ya que los de Postgresql aun estan incompletos aunque los pocos que estan habilitados funcionan

Primer modulo de Mysql:

package mysql1;

my $hostname = "localhost";

sub mysql2 {
printf "Indique el nombre de la base de datos a usar : ";
my $database = <STDIN>;
chomp $database;
printf "Nombre de la tabla a crear : " ;
my $table = <STDIN>;
chomp $table ;
printf "Inserte los registros que tendra la nueva tabla : Ejemplo: 'nombre varchar(30), apellidos varchar(30), edad int;' : ";
my $registro = <STDIN>;
chomp $registro;
printf "Indique el nombre de su usuario :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("create table $table ($registro);") or die ("$!\n");
};

sub mysql3 {
printf "Indique el nombre de la base de datos a usar : ";
my $database = <STDIN>;
chomp $database;
printf "Nombre de la tabla a eliminar : ";
my $delete = <STDIN>;
chomp $delete ;
printf "Indique el nombre de su usuario :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("drop table if exists $delete;") or die ("$!\n");
};

sub mysql4 {
my $backup = "/usr/bin/mysqldump";
my $HOME = "~" ;
my $archivo = "backup.sql";
my $directorio = "$HOME/backup" ;
printf "Indique el nombre de su usuario :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
printf "Indique el nombre de la DB de la cual se hara el backup  :  " ;
my $table = <STDIN>;
chomp $table;
my $ubicacion = `cd $directorio 2>/dev/null || mkdir -p ${directorio} && cd $directorio && $backup --opt --user=$user --password=$pass $table > $archivo && tar -cvf $archivo.tar *.sql && compress $archivo.tar && rm *.sql` ;
sprintf $ubicacion ;
printf "El backup fue creado satisfactoriamente, Backup guardado en $directorio\n";
};

sub mysql5 {
printf "Indique el nombre de su usuario :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
printf "Indique el nombre del usuario que sera privilegiado : ";
my $user1 = <STDIN>;
chomp $user1;
printf "Indique el nombre de la DB a la cual se le dara privilegios a dicho usuario : ";
my $db = <STDIN>;
chomp $db;
printf "Privilegios a otorgar ::: \n";
printf "1 - Garantizar todos los privilegios (Grant All)\n";
printf "2 - Garantizar solo permisos de crear, eliminar, actualizar (Grant usage, create, update, eliminar)\n";
printf "3 - Deseo introducir los permisos que este usuario tendra : ";
my $eleccion = <STDIN>;
chomp $eleccion;
if ($eleccion eq 1) { my $conexión = Mysql->connect("$hostname", "$db", "$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("grant all privileges on $database.* to $user1@$hostname identified by $pass with grant option;") or die ("$!\n");
}
elsif ($eleccion eq 2) { my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("grant usage, create, update, drop on $database.* to $user1@$hostname identified by $pass with grant option;") or die ("$!\n"); }
elsif ($eleccion eq 3) { printf "Introduzca los permisos a garantizar separados por comas y con espacio Ejemplo:: drop, update, alter  sin \ entrecomillar la palabra, ni finalizar con punto y coma ";
my $opccion = <STDIN>;
chomp $opccion;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("grant $opccion on $database.* to $user1@$hostname identified by $pass with grant option;") or die ("$!\n");
}
};

sub mysql6 {
printf "Indique el nombre de la base de datos a Eliminar : ";
my $database = <STDIN>;
chomp $database;
printf "Indique el nombre de su usuario :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("drop database $database;") or die ("$!\n");
};

1;


Segundo Modulo del Mysql;

package msql1;

my $hostname = "localhost";

sub msql2 {
printf "Indique el nombre de su usuario :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
printf "Indique el nombre de la base de datos donde esta la tabla : ";
my $database = <STDIN>;
chomp $database;
printf "Indique Nombre de la Tabla a utilizar : " ;
my $table = <STDIN>;
chomp $table ;
printf "Que desea modificar en la Tabla\n";
printf " 1 - Agregar un registro, 2 - Modificar un registro, 3 - Eliminar un registro ; Seleccione un numero para continuar : ";
my $opcion = <STDIN>;
chomp $opcion;
if ($opcion eq 1) { Add(); }
elsif ($opcion eq 2) { Mod(); }
elsif ($opcion eq 3) { Drop(); }
sub Add {
printf "Introduzca el nuevo dato que desea agregar Ex: 'email varchar(30), edad int' insertar datos no encapsular entre comillas \
no colocar punto y coma al final tampoco : ";
my $data = <STDIN>;
chomp $data;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("alter table $table add ($data);") or die ("$!\n");
sub Mod {
printf "Indique el registro a modificar Ex: columna disponible - nombre varchar(20) - Modificamos ::  'nombre varchar(30)' - Donde el registro nombre fue cambiado la capacidad de data a guardar con varchar(30)' \ Introducir datos sin entrecomillar y sin punto y coma al final : ";
my $seleccion = <STDIN>;
chomp $seleccion;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("alter table $table modify $seleccion;") or die ("$!\n");
}
sub Drop {
printf "Introduzca la palabra/columna que desea Eliminar de la Tabla , Ex: nombre : ";
my $data = <STDIN>;
chomp $data;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("alter table $table drop $data;") or die ("$!\n");
}
}
};

sub msql3 {
printf "Indique el nombre de su usuario (ROOT para poder eliminar permisos) :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
printf "Indique el nombre del usuario al cual se le removeran los privilegios : ";
my $user1 = <STDIN>;
chomp ($user1);
printf "Indique el nombre de la base de datos : ";
my $database = <STDIN>;
chomp $database;
printf "Indique Nombre de la Tabla (por motivos de conexión) : " ;
my $table = <STDIN>;
chomp $table ;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("revoke all privileges on $database.* from $user1@$hostname;") or die ("$!\n");
};

sub msql4 {
printf "Indique el nombre de su usuario  :  ";
my $user = <STDIN>;
chomp $user;
printf "Indique su contraseña  :  " ;
my $pass = <STDIN>;
chomp $pass;
printf "Indique el nombre del usuario al cual se le removeran los privilegios : ";
my $user1 = <STDIN>;
chomp ($user1);
printf "Indique el nombre de la base de datos : ";
my $database = <STDIN>;
chomp $database;
printf "Indique Nombre de la Tabla (por motivos de conexión) : " ;
my $table = <STDIN>;
chomp $table ;
my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
my $select = $conexión->selectdb("$database") or die ("$!\n");
my $peticion = $conexión->query("create database $database;") or die ("$!\n");
};

1;


La parte de Mysql esta practicamente completa a mi entender a lo mejor estoy obviando algo, pero por el momento cumple los objetivos de donde trabajo, varios empleados estan usando este script para hacer subconsultas y consultas rapidas a Mysql y Postgresql.

Obvio el modulo que he creado de Postgresql ya que aun esta incompleto pero las pocas funciones que hace funcionan :) dicho scriptcito esta siendo muy utilizable por ciertos empleados donde laboro, ya que se sienten a gusto con el que me han pedido que haga el mismo script pero version grafica para los usuarios de Windows, y he estado creando el mismo software en version grafica con Tk. Vere como me va hasta ahora muy positivo.

Espero que a alguien le sirva.
#16
Lo que hace el aburrimiento un Perl Script para hacer consultas lol... Para quien le pueda servidr de algo :) recuerden que no soy muy limpia codeando.

#!/usr/bin/perl -w

my $usuario = "Mary" ;
my $pass = "123" ;
my $tiempo = localtime() ;
printf "Bienvenidos a PerLyDB Version 1.0\n" ;
printf "Inserte el Login   :  " ;
chomp(my $eleccion = <STDIN>);
printf "Inserte la contraseña  :  " ;
chomp(my $contraseña = <STDIN>) ;
if ($eleccion eq $usuario && $contraseña eq $pass) { principal() ; }
else {
for(open(INTRUSOS, ">>intrusos.log")){
    my $temporal = INTRUSOS ;
    printf $temporal (" **********   Acceso Denegado      *************************\n");
    printf $temporal ("Nombre que intento ingresar al sistema : $eleccion \n") ;
    printf $temporal ("Password Utilizado para ingresar  :  $contraseña \n");
    printf $temporal ("Hora que intento ingresar al sistema  :  $tiempo  \n\n\n");
    close($temporal);
printf "Lo siento Acceso denegado\n"
}
}

sub principal {
while(1) {
printf "Bienvenidos al Sistema\n" ;
print "Cargando Opciones.....\n" ;
sleep(1) ;
printf "Que desea hacer \n" ;
printf "1 - Ver Listado de Vehiculos\n" ;
printf "2 - Ver Listado Clientes con Deudas\n" ;
printf "3 - Agregar nuevo Vehiculo \n" ;
printf "4 - Agregar nuevo cliente deudor\n" ;
printf "5 - Salir del sistema\n" ;
my $seleccion = <STDIN> ;
chomp($seleccion) ;
if ($seleccion == '1') {
vehiculos() ; }
elsif ($seleccion == '2') {
clientes() ; }
elsif ($seleccion == '3') {
agrega_auto() ; }
elsif ($seleccion == '4') {
agrega_cliente() ; }
elsif ($seleccion == '5') {
exit() ; }
else { principal() ; }
}


sub vehiculos {
for(open(INTRUSOS, "vehiculos.log")) {
my @autos = <INTRUSOS> ;
my $autos1 = @autos ;
print "Vehiculos Disponibles \n @autos \n" ;
sleep(1) ;
}
} ;

sub clientes {
for(open(INTRUSOS, "clientes.log")) {
my @clientes = <INTRUSOS> ;
print "Clientes con Deudas \n @clientes \n" ;
sleep(1);
}
}

sub agrega_auto {
for(open(INTRUSOS, ">>vehiculos.log")) {
my $temporal = INTRUSOS ;
printf "Inserte la marca del vehiculo : " ;
chomp (my $marca = <STDIN>) ;
printf "Inserte el Ano de Fabricacion : " ;
chomp (my $ano = <STDIN>) ;
printf "Inserte el precio del vehiculo : " ;
chomp (my $precio = <STDIN>) ;
print "Inserte la Placa \n" ;
chomp (my $placa = <STDIN>) ;
printf "Inserte el color \n" ;
chomp (my $color = <STDIN>) ;
printf $temporal " ----- Datos del Vehiculo -------- \n " ;
printf $temporal " Vehiculo Marca $marca  \n ";
printf $temporal " Ano de Fabricacion  $ano  \n" ;
printf $temporal " Precio Disponible  $precio \n " ;
printf $temporal " Fecha de Inclusion  $tiempo  \n" ;
printf $temporal " Color del Vehiculo  $color : " ;
printf $temporal "Placa del vehiculo $placa : " ;
printf $temporal " \n \n " ;
close($temporal) ;
}
}

sub agrega_cliente {
for(open(INTRUSOS, ">>clientes.log")) {
my $temporal = INTRUSOS ;
printf "Inserte el nombre completo del Cliente : " ;
chomp (my $clientito = <STDIN>) ;
printf "Inserte su Cedula : " ;
chomp (my $cedula = <STDIN>) ;
printf "Inserte Monto que adeuda : " ;
chomp (my $precio = <STDIN>) ;
print "Inserte Paga que debe cumplir mensual \n" ;
chomp (my $paga = <STDIN>) ;
printf "Inserte Vehiculo y Precio que compro \n" ;
chomp (my $vehiculo = <STDIN>) ;
printf "Inserte Direccion del cliente \n" ;
chomp (my $direccion = <STDIN>) ;
printf $temporal " ----- Datos del Cliente Adeudor -------- \n " ;
printf $temporal " Estimado Cliente $clientito  \n ";
printf $temporal " Residente en $direccion  \n" ;
printf $temporal " Con cedula de identidad #  $cedula \n " ;
printf $temporal " Adeuda un Monto por el valor de  $precio  \n" ;
printf $temporal " Por lo cual debe pagar mensualmente  $paga : " ;
printf $temporal " \n \n " ;
close($temporal) ;
}
}
}
#17
PHP / Para que sirve || en PHP?
29 Septiembre 2007, 16:35 PM
Hola, no soy muy diestra con lenguajes webs, y sobretodo con PHP, pero tengo un empleo freelance como tester de un website tipo Ebay de mi pais, bueno su desarrollador esta creando un control panel de acceso local para que yo maneje de manera mas sencillo el portal,  y me ha dicho que cree el template html de ese index y la web de password en php, Ok lo cree pero antes de mostrarselo a el  :-[ quiero saber como funciona en PHP el delimitador || se que por ejemplo en Unix Bash lee de izquierda a derecha, si la izquierda no se cumple hace la funcion de la derecha, en C++ y C creo, es al reves este delimitador funciona si una de las dos funciones es verdadera, pero en PHP.... como funciona??? porque hazta el momento lo tengo asi el codigo:

<html>
<head>
<title>Problema</title>
</head>
<body>
<form action = "indexito.php" method = "post">
Introduce tu usuario :
<input type = "text" name = "usuario">
Introduce tu Password :
<input type = "password" name = "contrasena">
Repite tu Password :
<input type = "password" name = "contra">
<input type = "submit" value = "Enviar">
<input type = "reset" value = "Borrar">
</body>
</html>


Y este es la  pagina php que recibe los datos.

<html>
<head>
<title>Problema</title>
</head>
<body>

<?php
$solucion = $_REQUEST['usuario'] ;
$solu = $_REQUEST['contrasena'] ;
$sol = $_REQUEST['contra'] ;
if ($solucion != "Tifa" || $solu != "123" || $sol != "123")
echo "No tienes acceso" ;
else
echo "Bienvenido" ;
<--! Luego viene la web de redireccion del control panel :P -->
?>

</body>
</html>


Alguien Podria explicarme en PHP para que va el delimitador || o debo usar &&