Manejo de archivos con PHP y MySQL

Jul 2008
15
3,010 views
22

Este Howto es acerca de como subir archivos atravez de PHP y guardarlos en MySQL asi como la extracción del archivo de MySQL atravez de PHP.

Requisitos:

  • Tener instalado PHP y MySQL.
  • Conocimientos basicos de PHP y MySQL.

Muchas veces necesitamos darle a los usuarios la facilidad de poder “subir” o guardar archivos en una base de datos y n es tan dificil como aparenta asi que comenzemos….

Primeramente necesitamos el diseño de la tabla

Imagen diseño de tabla para subir archivos con PHP y MySQL

y el script para crear la tabla es:

CREATE TABLE tbl_documentos (
  id_documento INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(150) NULL,
  descripcion MEDIUMTEXT NULL,
  contenido LONGBLOB NULL,
  tamanio INTEGER UNSIGNED NULL,
  tipo VARCHAR(150) NULL,
  nombre_archivo VARCHAR(255) NULL,
  tamanio_unidad VARCHAR(150) NULL,
  PRIMARY KEY(id_documento)
);

Explico un poco cada campo para darnos una mayor idea:

  • id_documento es el identificador o llave primaria
  • titulo contiene titulo para el documento
  • descripción contiene la descripcion del documento
  • contenido en este campo en donde se guardara nuestro documento
  • tamamio en este campo guardamos el tamaño del documento
  • tipo contendra el tipo MIME del documento
  • nombre_archivo contendra el nombre del documento
  • tamanio_unidad en este campo registraremos si la medida esta em kb,MB,GB

Ahora necesitamos un formulario
Aqui esta el codigo del archivo form.html:

<form id="test_upload" name="test_upload" action="upload.php" enctype="multipart/form-data" method="post">
	<table border="0" cellpadding="0" cellspacing="0">
		<tr>
			<td>
				Titulo
			</td>
			<td>
				<input type="text" id="titulo" name="titulo"/>
			</td>
		</tr>
		<tr>
			<td colspan="2">
				Descripcion
			</td>
		</tr>
		<tr>
			<td colspan="2">
				<textarea id="descripcion" name="descripcion" cols="50" rows="5"></textarea>
			</td>
		</tr>
		<tr>
			<td colspan="2">
				Archivo <input type="file" id="archivo" name="archivo"/>
			</td>
		</tr>
		<tr>
			<td colspan="2">
				<input type="submit" value="Registrar Documento"/>
			</td>
		</tr>
	</table>
</form>

Al formulario debemos como todos debe tener sus atributos
action que indica el archivo que sse encargara de procesar la información que le enviemos
y method que indica si los datos seran enviados por POST o GET para envio de archivos es obligatorio marcarlo como POST
adicinal a estos atributos debemos especificar enctype con el valor multipart/form-data para que se pueda realizar el envio.
Y aqui esta el codigo del archivo upload.php

< ?php
//ESTA FUNCION LA USAREMOS PARA OBTENER EL TAMAÑO DE NUESTRO ARCHIVO
function filesize_format($bytes, $format = '', $force = ''){
	$bytes=(float)$bytes;
	if ($bytes< 1024){
		$numero=number_format($bytes, 0, '.', ',');
		return array($numero,"B");
	}
	if ($bytes< 1048576){
		$numero=number_format($bytes/1024, 2, '.', ',');
		return array($numero,"KBs");
	}
	if ($bytes>= 1048576){
		$numero=number_format($bytes/1048576, 2, '.', ',');
		return array($numero,"MB");
	}
}
//VERIFICAMOS QUE SE SELECCIONO ALGUN ARCHIVO
if(sizeof($_FILES)==0){
	echo "No se puede subir el archivo";
	exit();
}
// EN ESTA VARIABLE ALMACENAMOS EL NOMBRE TEMPORAL QU SE LE ASIGNO ESTE NOMBRE ES GENERADO POR EL SERVIDOR
// ASI QUE SI NUESTRO ARCHIVO SE LLAMA foto.jpg el tmp_name no sera foto.jpg sino un nombre como SI12349712983.tmp por decir un ejemplo
$archivo = $_FILES["archivo"]["tmp_name"];
//Definimos un array para almacenar el tamaño del archivo
$tamanio=array();
//OBTENEMOS EL TAMAÑO DEL ARCHIVO
$tamanio = $_FILES["archivo"]["size"];
//OBTENEMOS EL TIPO MIME DEL ARCHIVO
$tipo = $_FILES["archivo"]["type"];
//OBTENEMOS EL NOMBRE REAL DEL ARCHIVO AQUI SI SERIA foto.jpg
$nombre_archivo = $_FILES["archivo"]["name"];
//PARA HACERNOS LA VIDA MAS FACIL EXTRAEMOS LOS DATOS DEL REQUEST
extract($_REQUEST);
//VERIFICAMOS DE NUEVO QUE SE SELECCIONO ALGUN ARCHIVO
if ( $archivo != "none" ){
	//ABRIMOS EL ARCHIVO EN MODO SOLO LECTURA
	// VERIFICAMOS EL TAÑANO DEL ARCHIVO
	$fp = fopen($archivo, "rb");
	//LEEMOS EL CONTENIDO DEL ARCHIVO
	$contenido = fread($fp, $tamanio);
	//CON LA FUNCION addslashes AGREGAMOS UN \ A CADA COMILLA SIMPLE ' PORQUE DE OTRA MANERA
	//NOS MARCARIA ERROR A LA HORA DE REALIZAR EL INSERT EN NUESTRA TABLA
	$contenido = addslashes($contenido);
	//CERRAMOS EL ARCHIVO
	fclose($fp);
	// VERIFICAMOS EL TAÑANO DEL ARCHIVO
	if ($tamanio &lt;1048576){
		//HACEMOS LA CONVERSION PARA PODER GUARDAR SI EL TAMAÑO ESTA EN b ó MB
		$tamanio=filesize_format($tamanio);
	}

	//CREAMOS NUESTRO INSERT
	$qry = "INSERT INTO tbl_documentos ( titulo,nombre_archivo, descripcion, contenido, tamanio,tamanio_unidad, tipo ) VALUES
	('$titulo','$nombre_archivo', '$descripcion','$contenido','{$tamanio[0]}','{$tamanio[1]}', '$tipo')";

	//NOS CONECAMOS A LA BASE DE DATOS
	//REMPLAZEN SUS VALOS POR LOS MIOS
	mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

	//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
	mysql_select_db("test");

	//EJECUTAMOS LA CONSULTA
	mysql_query($qry) or die("Query: $qry <br />Error: ".mysql_error());

	//CERRAMOS LA CONEXION
	mysql_close();
	//NOTIFICAMOS AL USUARIO QUE EL ARCHVO SE HA ENVIADO O REDIRIGIMOS A OTRO LADO ETC.
	echo "Archivo Agregado Correctamente<br />";
	echo '<a href="form.html">Subir Otro Archivo</a><br /> ';
}else{
	echo "No fue posible subir el archivo";
	echo '<a href="form.html">Subir Otro Archivo</a><br /> ';
}
?>

Ahora que ya tenemos nuestro script funcionando y podemos hacer los uploads que queramos vamos
hacer que se puedan explorar y descargar o mostrar en caso de que sea una imagen.
Primero creamos un archivo que nos imprima el contenido del documento y el tipo del mismo para poder renderizarlo
con este archivo que llamaremos getfile.php

< ?php
//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//CONSTRUIMOS LA CONSULTA PARA OBTENER EL DOCUMENTO
$qry="Select * from tbl_documentos where id_documento={$_REQUEST['id_documento']}";
$res=mysql_query($qry) or die(mysql_error()." qry::$qry");
$obj=mysql_fetch_object($res);

//OBTENEMOS EL TIPO MIME DEL ARCHIVO ASI EL NAVEGADOR SABRA DE QUE SE TRATA
header("Content-type: {$obj->tipo}");

//OBTENEMOS EL NOMBRE DEL ARCHIVO POR SI LO QUE SE REQUIERE ES DESCARGARLO
header('Content-Disposition: attachment; filename="'.$obj->nombre_archivo.'"');

//Y PO ULTIMO SIMPLEMENTE IMPRIMIMOS EL CONTENIDO DEL ARCHIVO
print $obj->contenido;

//CERRAMOS LA CONEXION
mysql_close();
?>

Posteriormente crearemos un archivo para que nos liste los documentos registrados y
detecte si es una imagen en este caso imprimiremos un tag img y su src sera nuestro archivo getfile.php
cuando incluimos un archivo con php podemos pasarle parametros cono si se tratara de un query string del browser asi que le pasaremos el id_documento
para que nos muestre el archivo solicitado.
Este es e código de nuestro archivo list.php

< ?php
//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//CONSTRUIMOS EL QUERY PARA OBTENER LOS ARCHIVOS
$qry="select
		docs.*,
		CASE docs.tipo
			WHEN 'image/png' then
				'image'
			WHEN 'image/jpg' then
				'image'
			WHEN 'image/gif' then
				'image'
			WHEN 'image/jpeg' then
				'image'
			ELSE
				'file'
		END as display
	from tbl_documentos AS docs";

//EJECUTAMOS LA CONSULTA
$res=mysql_query($qry) or die("Query: $qry ".mysql_error());

//RECORREMOS LA CONSULTA
//*********NOTA DONDE DICE alt='$obj-/>titulo' QUITA LA BARRA PARA QUE QUEDE ASI:
// alt='$obj->titulo'
// EL WORDPRESS ME ESTA REMPLAZANDO EL CODIGO

while ($obj=mysql_fetch_object($res)) {
	//SI EL TIPO DE DOCUMENTO ES UMAGEN LA MOSTRAMOS SI NO SOLO HACEMOS EL LINK
	switch ($obj->display){
		case "image":
			echo "<div>
					<a href='getfile.php?id_documento={$obj->id_documento}'>
						<img alt='$obj-/>titulo' src='getfile.php?id_documento={$obj->id_documento}'/>
					</a>
				</div><hr />";
			break;
		case "file":
			echo "<div>
					<a href='getfile.php?id_documento={$obj->id_documento}'>$obj->titulo</a>
				</div><hr />";
			break;
	}

}

//CERRAMOS LA CONEXION
mysql_close();
?>

Ahora solo abrimos nuestro explorador con loas sigueintes direcciones:

  • http://url_deprueba/form.html -> Veremos nuestro formulario de subida
  • http://url_deprueba/list.php -> Veremos el listado de nuestros documentos

Descargar los archivos del howto de este

Y con esto terminamos este pequeño howto de como manejar archivos con php y MySQL
espero les sirva y cualquier comentario queja o sugerencia porfavor haganla saber asi como alguna duda que tengan y se pueda convertir en un howto
sera tomada en cuenta.
Cudense …

Links Relacionados

Jul 2008
09
1,203 views
0

Enviar correo con PHP

Jul 2008
09
1,203 views
2

Hola.

Seguimos con los howtos este how to tambien es corto simplemente hace lo que se necesita
ENVIAR CORREOS CON PHP

Requerimientos:

  • Conocimiento basico de PHP
  • PHP previamente instalado
  • Servidor de correo previamente instalado

Primero que nada necesitamos un formulario con digamos 2 campos que son:

  • El correo del destinatario
  • El Mensaje que le vamos a enviar

Aqui esta el codigo para el archivo form_mail.html
[code language=’html’]

Envio de correos

PHP snippet Como crear thumbnails desde MySQL con PHP

Jun 2008
28
1,213 views
3

Bueno creo que ya estubo bien de tantos articulos sobre psp y otras cosas y es tiempo de volver a lo mio, los tutoriales con mas codigo que palabras, aunque de repente pondre uno que ptro post de posicionamiento :P,

Requisitos:

  • Tener instalado PHP y MySQL.
  • Conocimientos basicos de PHP y MySQL.
  • GD instalado y funcionando.

1.- Analicemos el problema tomando como base el articulo Manejo de archivos con PHP y MySQL en el cual explico como guardar archivos en MySQL, asi que tomaremos la tabla de ese ejemplo.

Bueno ya fue mucha platica mejor vemos el codigo por partes, al final lo pondre todo junto:

$id_doc=$_REQUEST['id'];
$qry="Select * from tbl_documentos where id_documento=$id ";
$res=mysql_query($qry) or die(mysql_error()." qry::$qry");
  • 1.- OBTENEMOS EL ID
  • 2.- CONSTRUIMOS LA CONSULTA …

Upload de archivos con PHP y Mysql

Jun 2008
28
646 views
0

Este Howto es acerca de como subir archivos atravez de PHP y guardarlos en MySQL asi como la extracción del archivo de MySQL atravez de PHP.

Requisitos:

  • Tener instalado PHP y MySQL.
  • Conocimientos basicos de PHP y MySQL.

Muchas veces necesitamos darle a los usuarios la facilidad de poder “subir” o guardar archivos en una base de datos y n es tan dificil como aparenta asi que comenzemos….

Primeramente necesitamos el diseño de la tabla

Imagen diseño de tabla para subir archivos con PHP y MySQL

y el script para crear la tabla es:
[code language=’sql’]
CREATE TABLE tbl_documentos (
id_documento INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
titulo VARCHAR(150) NULL,
descripcion MEDIUMTEXT …

Ndiswrapper Fedora 9 bcmwl5

Jun 2008
18
1,787 views
4

Este es un breve howto de como instalar ndiswrapper en Fedora 9

Requerimientos:

  • Contar con conexion a internet obviamente por cable.
  • Contar con los drivers de la tarjeta para windows extraidos.
  • Paciencia.

1.-Abrir una consola y logearse como root

su -
"telclear el password"

2.- Tecleear lo siguiente para que se instale el repositorio de livna

rpm -ivh http://rpm.livna.org/livna-release-9.rpm

3.- Tecleear lo siguiente para instalar ndiswrapper y su modulo correspondiente

yum install ndiswrapper kernel-module-ndiswrapper-$(uname -r)

4.- Tecleear lo siguiente remplazando lo que se encuentra entre comillas para instalar el driver

ndiswrapper -i "ruta_al_archivo_inf_del_driver".inf

5.- Verificamos que se instalo correctamente conel siguiente comando:

ndiswrapper -l
deberiamos obtener algo similar a esto:
Installed ndis drivers:
bcmwl5  driver present, hardware present

6. Agregar a …

Tip para aumentar el CTR de los anuncios

May 2008
31
276 views
2

Bueno primero vamos a definir CTR:

Click Through Rate (CTR) – Tasa de clicks: corresponde al número de veces que un enlace es seguido por los navegantes, dividido por el número de veces que dicho enlace es mostrado (llamado a su vez impresión).

Ejemplo:

Si un anuncio se muestra 10 veces y es visitado 6 veces: 6 / 10= 0.6%.

Segun tengo entendido entre mas alto sea el CTR masvalor tendra el vinculo mostrado.
Yo he implementado un pequeño pero util procedimiento en mi Template de Wordpress el cual consiste en mostrar anuncion en random, lo cual tambien me permite mostrar anuncios de diferentes proveedores.El proceso es el siguiente:

REQUISITOS:

I.- Comencemos registrado los anuncios en el Adsense-Deluxe

Que pex con XML CDATA

Apr 2008
24
241 views
0

El término CDATA se usa con texto que no debe ser parseado por el XML parser.

Debido a que los caracteres como “<” y “&” son caracteres illegales en elementos XML.

  • “<” : Generaria un error porque el parser lo interpretaria como el inicio de un nuevo elemento.
  • “&” : Este caracter genera error porque el parser lo interpreta como el inicio de un caracter especial.

En ocaciones, tendremos texto, ya sea que contenga HTML o JavaScript, el cual puede contener varios caracteres “<” o “&” lo cual nos generaria alguno de los errores que menciono. Para evitar que esto suceda el texto debe ir dentro de una seccion CDATA.

Todo el texto que se encuentre dentro de esta sección es ignorada por el parser …

Links Relacionados

Apr 2008
11
359 views
0

Fix para :XML Parsing Error: not well-formed

Apr 2008
11
359 views
0

Hoy me tope con un pequeño problemita, buen la cosa esta asi:

Tengo un autocomplete que obtiene los datos de una consulta via ASP, porfavor no pregunten porque con asp, este ASP me GENERA un Archivo XML haciendo una consulta a la Base de Datos, pero a la hora de imprimir los datos algunos traen caracteres especiales tales como el ampersand,ñ, etc. y me generaba el error XML Parsing Error: not well-formed debido a estos caracteres.

Ahora para solucionarlo hay de 2 sopas

Sopa #1.- Escribir un complejo replace para cambiar estos caracteres.

Sopa #2.-Dependiendo del Lenguaje utilizamos alguna de las Funciones Encode de las que dispongamos en este caso con ASP es: Server.HTMLEncode(), para solucionar el problema.

Aqui dejo el codigo ya …

Formato Fecha y hora GMT con PHP

Apr 2008
03
712 views
1

En uno de mis recientes desarrollos http://www.youthcalabaza.com (Pagina de tatuajes en Monterrey) incorpore un blog y me tope cn un pequeño detallito al momento de guardar la fecha y hora toma como fecha y hora la qu tenga el servidor configurado :P asi que googleando un rato encontre la solución.

El codigo es el siguiente espero a alguien mas le sirva:

//Mi zona horaria el GMT -6
$clientGMT=intval( -6 );
$serverGMT=intval( date('Z') );
$fecha_gmt=date('Y-m-d H:i:s',time()+$clientGMT-$serverGMT);

Mas visitados

My Flickr

diseño web sti professinal consulting
Holly dollar baby
halftone background
varsion 1.0 del mi sitio
holly cojin rojo
urban 2
urban
dont panic 1 para psp
Deja tu comentario