jueves, 29 de septiembre de 2011

Script para Insertar y Mostar una imagen de Mysql a través de php

Este código permite agregar imagenes a MYSQL a través de PHP y luego mostrar las imagenes en una página de PHP

Creación de Tabla en MYSQL

CREATE TABLE archivos (

id int(10) unsigned NOT NULL auto_increment,

archivo_binario blob NOT NULL,

archivo_nombre varchar(255) NOT NULL default '',

archivo_peso varchar(15) NOT NULL default '',

archivo_tipo varchar(25) NOT NULL default '',

descripcion text,

autor varchar(200),

PRIMARY KEY (id)

)

Página de Formulario de Ingreso a la base de datos INGRESO.php

<HTML>

<HEAD>

<TITLE>Binario a BD</TITLE>

</HEAD>

<BODY>

<FORM enctype="multipart/form-data" method="post" action="insertar.php">

<table width="200" border="1">

<tr>

<td colspan="2"><h4>Entrada de Blog</h4></td>

</tr>

<tr>

<td>Imagen:</td>

<td><input type="file" name="archivo" size="30"></td>

</tr>

<tr>

<td>Comentario:</td>

<td><label>

<textarea name="comentario" id="comentario" cols="45" rows="5"></textarea>

</label></td>

</tr>

<tr>

<td>Autor:</td>

<td><label>

<input type="text" name="autor" id="autor">

</label></td>

</tr>

</table>

<p>:

<INPUT type="submit" name="submit" value="Enviar Entrada">

</p>

</FORM>

</BODY>

</HTML>

Pagina de PHP que se conecta a MYSLQ para agregar los datos.

<?php

//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre. Si no fue asi, te remite de nuevo al formulario de inserción:

// No se comprueba aqui si se ha subido correctamente.

if (empty($_FILES['archivo']['name'])){

header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..

exit;

}

//establece una conexión con la base de datos.

$conexion = mysql_connect("Servidor","root","Contraseña") or die("<B>No se pudo realizar la conexion con el servidor.</B> Intentelo de nuevo, <A href=ingreso.php> haga click para regregar</A>");

mysql_select_db("Base de Datos",$conexion) or die("<B>No se puede seleccionar</B> BD Intentelo de nuevo, <A href=ingreso.php> haga click para regregar</A>"); // tu_bd es el nombre de la Base de datos .. por siaca.

// archivo temporal (ruta y nombre).

$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

// leer del archvio temporal .. el binario subido.

// "rb" para Windows .. Linux parece q con "r" sobra ...

$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.

$binario_nombre=$_FILES['archivo']['name'];

$binario_peso=$_FILES['archivo']['size'];

$binario_tipo=$_FILES['archivo']['type'];

$comentario = $_POST['comentario'];

$autor = $_POST['autor'];

//insertamos los datos en la BD.

$consulta_insertar = "INSERT INTO archivos (archivo_binario, archivo_nombre, archivo_peso, archivo_tipo, descripcion, autor) VALUES ( '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo', '$comentario', '$autor')";

mysql_query($consulta_insertar,$conexion) or die("<B> No se pudo insertar los datos en la base de datos.</B> Intentelo de nuevo, <A href=ingreso.php> haga click para regregar</A>");

echo ("Se inserto correctamente la imagen"); // si ha ido todo bien

exit;

?>

Página que visualiza las imagenes Normales

 

<?php

if(isset($_GET['id'])) {

// you may have to modify login information for your database server:

$conexion=mysql_connect("localhost","root","sanedrac") or die ("no se ha podido conectar a la BD");

mysql_select_db("sitio") or die ("no se ha podido seleccionar la BD");

$sql = "SELECT archivo_nombre,archivo_binario,archivo_tipo,archivo_peso,descripcion,autor FROM archivos WHERE id='".$_GET['id']."'";

$consulta = mysql_query($sql,$conexion);

$datos = mysql_result($consulta,0,"archivo_binario");

$tipo = mysql_result($consulta,0,"archivo_tipo");

$nombre = mysql_result($consulta,0,"archivo_nombre");

$peso = mysql_result($consulta,0,"archivo_peso");

$author = mysql_result($consulta,0,"autor");

$comentario=mysql_result($consulta,0,"descripcion");

header("Content-type: $tipo");

header("Content-length: $peso");

header("Content-Disposition: inline; filename=$nombre");

echo "$datos prueba prueba";

echo $datos;

}

?>

 

Página que Visualiza las imagenes en miniatura

 

<?php

// OJO, sólo funciona con imagnes en formato JPEG ...

if(isset($_GET['id'])) {

// you may have to modify login information for your database server:

$conexion=mysql_connect("localhost","root","sanedrac") or die ("no se ha podido conectar a la BD");

mysql_select_db("sitio") or die ("no se ha podido seleccionar la BD");

$sql = "SELECT archivo_nombre, archivo_binario, archivo_tipo, archivo_peso, descripcion, autor FROM archivos WHERE id='".$_GET['id']."'";

$consulta = mysql_query($sql,$conexion);

$imagen = mysql_result($consulta,0,"archivo_binario");

// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG

header ("Content-type: image/jpeg");

// Generar el thumbnail:

// Se crea la imagen desde el campo binario de la BD

$img = imagecreatefromstring($imagen);

// Tamaño del Thumbanil (de la imagen a generar ..)

$picsize = 123;



// Se obtienen los datos del ancho y alto de la imagen.

$new_w = imagesx($img);

$new_h = imagesy($img);

// Se calcula la relación alto/ancho

$aspect_ratio = $new_h / $new_w;



// Se ajusta al nuevo tamaño

$new_w = $picsize;

$new_h = abs($new_w * $aspect_ratio);

// Se crea la mascara de la imagen nueva

$dst_img = imagecreateTrueColor($new_w,$new_h);

// Se copia y reajusta el nuevo tamaño en la nueva imagen.

imagecopyresized($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img));

// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG

// El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen.

imagejpeg($dst_img,'',100);

}

viernes, 16 de septiembre de 2011

Uso de XML en SQL Server 2008

---xml
---For XML  Raw , Auto, Explicit, Path

--consulta de las tablas customers y orders
--1.Ejemplo 1
Select Customers.CustomerID, Customers.CompanyName,
Orders.OrderID, Orders.OrderDate from Customers
inner join orders on
Customers.CustomerID=Orders.customerid
for xml raw
--2.Ejemplo 2

Select Customers.CustomerID, Customers.CompanyName,
Orders.OrderID, Orders.OrderDate from Customers
inner join orders on
Customers.CustomerID=Orders.customerid
for xml auto

----------For XML Explicit
--Informacion de customers y orders del customerid='ALFKI'

Select 1 as Tag,  null as parent,
customerid as [Cliente!1!customerid], contactname as [Cliente!1],
null as  [Orden!2!orderid],
null as [Orden!2]
from customers as C where customerid='ALFKI'
union
Select 2 as Tag, 1 as Parent, C.customerid,
C.contactName, o.orderid, o.shipaddress from
Customers as C inner join orders as o
on C.CustomerID=o.CustomerID
where C.CustomerID='ALFKI'
For xml Explicit

--resultado xml Anterior
<C customerid="ALFKI">Maria Anders
    <O orderid="10643">Obere Str. 57</O>
    <O orderid="10692">Obere Str. 57</O>
    <O orderid="10702">Obere Str. 57</O>
    <O orderid="10835">Obere Str. 57</O>
    <O orderid="10952">Obere Str. 57</O>
    <O orderid="11011">Obere Str. 57</O>
</C>

---uso de for xml path

Select Customers.CustomerID, Customers.CompanyName,
Orders.OrderID, Orders.OrderDate from Customers
inner join orders on
Customers.CustomerID=Orders.customerid
for xml path ('venta')

-----------uso de xml.query

declare @mydoc xml
set @mydoc='<root>
<productdescription productid="1" productname="rood bike">
<Features>
<warranty>1 año de garantia para partes</warranty>
<maintenance>3 años de mantenimiento</maintenance>
</Features>
</productdescription>
</root>'

Select @mydoc.query
('/root/productdescription/Features/maintenance')

-----------uso de xml.Value
declare @bicicleta varchar(100)
declare @mydoc xml
set @mydoc='<root>
<productdescription productid="1" productname="rood bike">
<Features>
<warranty>1 año de garantia para partes</warranty>
<maintenance>3 años de mantenimiento</maintenance>
</Features>
</productdescription>
</root>'

Set @bicicleta= @mydoc.value(
'(/root/productdescription/@productname)[1]', 'varchar(100)')

Select @bicicleta