Que sabes de GNU/Linux?

miércoles, 21 de enero de 2009

Ejemplo de Guardado de Imagenes u archivos con cakephp

mysql> DESCRIBE bdbanners;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| nombre | varchar(50) | NO | | | |
| descripcion | varchar(80) | NO | | | |
| image | blob | YES | | NULL | |
| type | varchar(30) | NO | | | |
| size | int(11) | NO | | | |
+-------------+-------------+------+-----+---------+----------------+
/*
*VISTA VER FOTOS
*/






echo "

".$bdbanners_info['Bdbanner']['id']."

";
echo "Nombre:";
echo "

".$bdbanners_info['Bdbanner']['nombre']."

";
echo "Descripcion:";
echo "

".$bdbanners_info['Bdbanner']['descripcion']."

";
echo $html->link('Volver Atras','/bdbanners/');
?>


/*
*VISTA INDEX
*/

Listado de Fotos Cargadas





















Id Nombre Foto Descripcion Borrar Descargar
link($dbbanner['Bdbanner']['nombre'],'/bdbanners/verfotos/'.$dbbanner['Bdbanner']['id']); ?> link("Borrar",'/bdbanners/borrar/'.$dbbanner['Bdbanner']['id']); ?> link("Descargar",'/bdbanners/dowload/'.$dbbanner['Bdbanner']['id']); ?>



link("Nueva Foto",'/bdbanners/ingresar');?>


/*
*VISTA INGRESAR
*/

Ingresar nueva Foto a la Base de datos



echo $form->create('Bdbanner',array('action'=>'ingresar','type'=>'file'));
echo $form->input('nombre',array('lable'=>'Nombre'));
echo $form->input('descripcion',array('lable'=>'Decripcion'));
echo $form->input('image',array('type'=>'file','label'=>'Imagen'));
echo $form->end('Guardar Imagen');

echo $html->link('Volver Atras','/bdbanners/');

?>


/*
*MODELO
*/
class Bdbanner extends AppModel{
var $name = 'Bdbanner';
var $validate = array('nombre'=>array('rule'=>'alphaNumeric','message'=>'Solo se aceptan Letras y Números'));
}
?>

/*
*CONTROLADOR
*/

class BdbannersController extends AppController{
var $name = 'Bdbanners';

/*
*Funcion: permite visualizar la informacion principal
*/
function index(){
$this->set('dbbanners',$this->Bdbanner->findAll());
}

/*
*Funcion: permite ingresar un nuevo archivo del tipo banner
*/
function ingresar(){
if(!empty($this->data)){
/*Permite cargar la imagen y determinar si no fue pasado un archivo no permitido*/
if(!is_uploaded_file($this->data['Bdbanner']['image']['tmp_name'])){
$this->flash('El archivo se encuentra con error','/bdbanners/');
return;
}
$fileData = fread(fopen($this->data['Bdbanner']['image']['tmp_name'], "r"),
$this->data['Bdbanner']['image']['size']);

$this->data['Bdbanner']['type']=$this->data['Bdbanner']['image']['type'];
$this->data['Bdbanner']['size']=$this->data['Bdbanner']['image']['size'];
$this->data['Bdbanner']['image'] =$fileData;

if($this->Bdbanner->save($this->data)){
$this->flash('Los datos Fueron Guardados Satisfactoriamente','/bdbanners/');
}else{
$this->flash('No se Pudieron Guardar los datos Intente Nuevamente','/bdbanners/');
}

}
}

/*
*Funcion: permite ver la foto
*/
function verfotos($id = null){
$this->Bdbanners->id = $id;
$this->set('bdbanners_info',$this->Bdbanner->read());

}
/*
*Funcion: Permite borrar una entrada
*/
function borrar($id = null){
$this->Bdbanner->del($id);
$this->flash('La imagen fue borrada satisfactoriamente','/bdbanners');

}

/*
*Funcion: permite recuperar o descargar los datos
*/
function dowload($id){
$file = $this->Bdbanner->findById($id);
header('Content-type: ' . $file['Bdbanner']['type']);
echo $file['Bdbanner']['image'];
/*header('Content-length: ' . $file['Bdbanner']['size']);
header('Content-Disposition: attachment; filename="'.$file['Bdbanner']['nombre'].'"');*/

exit();
}
}
?>

miércoles, 7 de enero de 2009

Ejemplo - Stored Procedure en Sybase

/*
Ejemplo Cursores en Sybase
Funcion: Este script permite realizar la cancelacion de las deudas de un cliente
recorriendo las deudas y cancelando las mismas hasta que el monto abonado total
de cliente llegue a tener 0.
*/
/*Tabla de deudas de cliente - relacion deuda cliente*/
SELECT
DROP TABLE #cli_deuda
go
CREATE TABLE #cli_deuda(id_deuda INTEGER,deuda NUMERIC(17,2) )
go
INSERT INTO #cli_deuda(id_deuda,deuda)
SELECT 1,25.99
UNION
SELECT 2,120.99
UNION
SELECT 3,130.99
UNION
SELECT 4,150.99
go

if object_id('sgl_cancela_deuda') >0 DROP PROC sgl_cancela_deuda
go
CREATE PROC sgl_cancela_deuda
@importe_total NUMERIC(17,2) = NULL
AS
DECLARE @status INTEGER
DECLARE @id_deuda_c INTEGER
DECLARE @deuda_c NUMERIC(17,2)
DECLARE @error INTEGER
DECLARE @adeuda NUMERIC(17,2)

SELECT @status = 0

/*El select que recuperara los datos*/
declare deudas cursor for
SELECT id_deuda,deuda
FROM #cli_deuda


open deudas
select @error = @@error

if @error !=0 begin
return @status
end

/*recuperar una fila a la ves del cursor*/
fetch deudas into @id_deuda_c,@deuda_c

if @@sqlstatus = 2
begin
close deudas
deallocate cursor deudas
return @status
END

/*recorrer todas las filas*/
while @@sqlstatus<>2
begin

if @@sqlstatus = 1
begin
close deudas
deallocate cursor deudas
return @status
end

/*Proceso general del cursor aqui va el script
que sea necesatio ejecutar para c/u de las filas*/
/*Sin importe total para cancelar deudas*/
if @importe_total = 0 Goto Salir

if @importe_total >= @deuda_c
Begin
/*se paga el importe total*/
SELECT @adeuda = 0
SELECT @importe_total = @importe_total - @deuda_c
end
Else
Begin
SELECT @adeuda = @deuda_c - @importe_total
SELECT @importe_total = 0
End

print "Adeuda:%1!, para el id: %2!,total %3! ",@adeuda,@id_deuda_c,@importe_total

/*Recuperams la proxima fila*/
fetch deudas into @id_deuda_c,@deuda_c
select @error= @@error
end

Salir:
close deudas
deallocate cursor deudas

RETURN @status

go
--EXEC sgl_cancela_deuda @importe_total= 428.96 --> cancelacion justa
--EXEC sgl_cancela_deuda @importe_total= 50.96 --> cancela 1 y otra descuenta

lunes, 5 de enero de 2009

LISTA CON PHP - users -tipousers

Controlador es el siguiente

class UsersController extends AppController{
var $name = 'Users';
var $helpers=array('Html','Form','Ajax');
var $uses = array('Tipouser','User');
var $displayField = "tipousers";

function index($order = null){

SWITCH($order){
CASE 1:
$this->set("users",$this->User->findAll(null,null,'username',null,null,null));
break;
CASE 2:
$this->set("users",$this->User->findAll(null,null,'created',null,null,null));
break;
default:
$this->set("users",$this->User->findAll());
}
}

function insertdddw(){
//$this->set('tipouser',Set::combine($listtipuser, "{n}.Tipouser.id","{n}.Tipouser.descripcion"));
$this->set('tipouser',$this->Tipouser->findAll());
}

/*
*Funcion: siempre que el usuario se encuentre correctamente logueado en el sistema
*/
function beforeFilter(){
$this->__validateLoginStatus();
}

/*
*Funcion: permite validar que los datos del usuario son correctos
*/
function login(){
if(empty($this->data)==false){
if(($user = $this->User->validateLogin($this->data['User'])) == true){
$this->Session->write('User',$user);
$this->Session->setFlash('Ingreso al Sistema Satisfactoriamente');
$this->redirect('index');
exit();
}else{

$this->Session->setFlash('Disculpe, su login o password son incorrectos');
//$this->redirect('login');
//exit();
}
}
}

/*
* Funcion: Permite realizar al borrado de la sesion en el sistema
*/
function logout(){
$this->Session->destroy('user');
$this->Session->setFlash('El usuario se desconecto Satisfactoriamente');
$this->redirect('login');
}

function __validateLoginStatus(){
if($this->action != 'login' && $this->action != 'logout'){
if($this->Session->check('User')==false){
$this->redirect('login');
$this->Session->SetFlash('La direccion que quiere ingresar requiere de logueo en el sistema');
}
}
}


/*
* Funcion: agregar nuevo usuario retorna al indice principal
*/
function add(){
if(!empty($this->data)){
/*Validamos que el usuario no exista ya en el sistema*/
if($this->User->findByUsername($this->data['User']['username'])){
$this->User->invalidate('username');
$this->Session->SetFlash('El Nombre de usuario ingresado ya existe');
}else{
/*validamos el correo electronico*/
if($this->User->findByEmail($this->data['User']['email'])){
$this->User->invalidate('email');
$this->Session->SetFlash('El E-Mail ya fue registrado para otro usuario');
}else{

/*encryptamos el password con md5*/
$this->data['User']['password']=md5($this->data['User']['password']);
if($this->User->save($this->data)){
$this->flash('Los datos Fueron Guardados Ok','/users/');
}
}
}
}
}

/*
*Funcion: permite ver los datos de los usuarios del sistema
*/
function verdatos($id = null){
if($id <> null){
$this->User->id=$id;
$this->set('users',$this->User->read());
}else{
exit();
}
}

/*
*Funtion: permite realizar la modificacion de un archivo determinado
*/
function editar($id=null){
$this->User->id = $id;
if(empty($this->data)){
$this->insertdddw();
$this->data = $this->User->read();
$tipo_user = $this->Tipouser->find("list", array("fields"=>array("Tipouser.id","Tipouser.descripcion")));
$this->set("tipousers",$tipo_user);
}else{
if($this->User->save($this->data)){
$this->flash('Los Datos Fueron Modificados Satisfactoriamente','/users/');
}
}
}
}

?>

La vista es la siguiente
Editar Datos del Usuario

echo $form->create('User',array('action'=>'editar'));
echo $form->input('username',array('label'=>'Usuario'));
echo $form->input('email',array('label'=>'E-Mail'));
echo $form->input('tipousers_id');

echo $form->end('Guardar Cambios');
echo $html->link('Volver Atras','/users/');

$options = array('url' => 'insertdddw','update' => 'username');
echo $ajax->observeField('tipouser',$options);

?>


Es importante agregar esto en el controlador
var $displayField = "tipousers";
Las tablas son estas

mysql> DESCRIBE users;
+--------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(30) | NO | | | |
| password | varchar(40) | NO | | | |
| email | varchar(40) | NO | | | |
| created | datetime | YES | | NULL | |
| tipousers_id | smallint(6) | YES | | NULL | |
+--------------+------------------+------+-----+---------+----------------+

+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| descripcion | varchar(50) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+

Esto es todo muy simple eh???

miércoles, 31 de diciembre de 2008

CAKE-COMPONENT-CONTROLLER

Controller

class FtpsController extends AppController{
var $name = 'Ftps';
var $component=array('Ftp');
/*
*Funcion utilizada para realizar la aplicacion principal de php...
*/
function index(){
}

function conectarFTP(){
if($this->data['Ftp']['usuario'] == null || strlen($this->data['Ftp']['usuario'])<=0 ){
$this->Session->SetFlash('Debe ingresar el usuario');
$this->redirect('/ftps/');
return;
}

if($this->data['Ftp']['host']==null || strlen($this->data['Ftp']['password'])<=0){
$this->Session->SetFlash('Debe ingresar el servidor');
$this->redirect('/ftps/');
return;
}
//$this->redirect('/users/');
}
}

?>
La vista

Conectar a Servidor FTP


echo $form->Create('Ftp',array('action'=>'conectarFTP'));
echo $form->input('usuario',array('type'=>'input','label'=>'Usuario'));
echo $form->input('password',array('type'=>'password','label'=>'Contraseña'));
echo $form->input('host',array('type'=>'input','label'=>'Servidor'));
echo $form->input('puerto',array('type'=>'input','label'=>'Puerto'));
echo $form->end('Conectar');
?>

Modelo

class Ftp extends AppModel{
var $name = 'Ftp';
var $useTable = false;
var $table=false;
var $validate = array('usuario'=>array(
'alphaNumeric'=>array('rule'=>'alphaNumeric','required'=>true,
'message'=>'Solo Letras y Numeros')));


}

?>

Component

define("ERROR_CONECT",-1);

class FtpComponent extends Object{
private $server = '';
private $puerto = '';
private $usuario ='';
private $password = '';
private $pasv = true;
private $idftp=null;
var $controller = true;
var $someVar = null;


/*
* Function: contruimos el objeto con los datos necesario para inicializar la conexion
*/
function __construct($get_server = null,
$get_puerto = null,
$get_usuario = null,
$get_password= null){
if($get_server == null) $get_server = 'localhost';
if($get_puerto == null) $get_puerto = 21;
if($get_usuario == null) $get_usuario = 'anonymous';
if($get_password == null) $get_password = 'anonymous';

$this->server = $get_server;
$this->puerto = $get_puerto;
$this->usuario= $get_usuario;
$this->password= $get_password;
}


/*
* Funcion: permite realizar la conexion al servidor de base de datos
*/
function ConectFtp(){
/*si el id se encuentra no debemo intentar conectar de nuevo*/
if( $this->idftp != null) return 0;
try{
$this->idftp = ftp_connect($this->server,$this->puerto);
}catch(Exception $ex){
echo "No se conecto al server";
}

if($this->idftp == null ) return ERROR_CONECT; /*No connect to host*/
$result = ftp_login($this->id_ftp,$this->usuario,$this->password);

if($result < 0 ) return -2; /*User or login is no valid*/
ftp_pasv($this->id_ftp,$this->pasv);
/*retornamos el identificador para el FTP*/
return $this->id_ftp;
}

/*
* Funcion: Permite traer una ruta desde el servidor FTP
*/
function putFile($archivo_local,$archivo_remoto){
$this->idftp = $this->ConectFtp();
if($this->idftp < 0 ) return $this->idftp; /*No existe conexion al servidor*/
ftp_put($this->idftp,$archivo_remoto,$archivo_local,FTP_BINARY);
}


/*
* Funcion: permite desconectarse del servidor FTP
*/
function destroyConect(){
if($this->idftp != null && $this->idftp > 0 ) ftp_quit($this->idftp);
$this->idftp = null;
}

/*
*Funcion: permite recuperar el directorio de trabajo del servidor FTP
*/
function getPathServer(){
if($this->idftp == null || $this->idftp < 0 ) return ERROR_CONECT; /*No conect*/
$pathserver=ftp_pwd($this->idftp);
return $pathserver;
}

/*
* Funcion: permite retornar un arreglo con los ficheros en el path server
*/
function getFilePath(){
$pathserver = getPathServer();
$files_path=ftp_nlist($this->idftp,$pathserver);
return $files_path;
}
}
?>

Esto es un componente para conectar al FTP

miércoles, 26 de noviembre de 2008

Por que Linux?

Linux es un sistema operativo diseñado y pensado como una alternativa libre a Unix. Actualmente los grander servidores corren en LINUX y deribados de UNIX, con esto se concluye que para jugar existe esa cosa llamada windows? puede ser? si esa basura de sistema mal diseñado de ahí en mas podemos considerarlo un sistema apto para hacer cosas sencillas. Si quieres potencia y seguridad y bien Linux es la solución. Lo que digo de la competencia no es sin fundamentos es así y si quieren podemos comenzar a ver el ranking de las supercomputadoras y un gran porcentaje corre Linux. Conclución Wintoplay, linuxjobs. Linux no es facil de configurar pero una vez configurado se comporta genial. Si quieren motivos para para que confirme por que win es malo y bue no me alcanza el blog entero :-).
Suerte y de aquí en mas voy a empresar a agregar programación en Sybase,postgresql mysql, power builder y php, me encanta programar y sobre todo en linux es mas divertido y tiene cosas mas potentes.
Suerte y espero que no se ofendar por que diga que linux es bueno (por supuesto no es la verdad obsoluta) pero que windows 7, Vista y todos son una basura es confirmado. Si quieren hacemos una prueba real y confirmamos las cosas.