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???