You are on page 1of 13

Subiendo Imgenes y Archivos a MySQL con PHP y

JSP y desplegndolos en RTF


Publicado en 2011/03/19 de joseluisbz

En este tutorial vamos a demostrar como atravs de JSP y PHP subir imgenes y
archivos de texto al servidor, insertarlos en bases de datos de MySQL, luego obtenerlos
para desplegarlos en archivos tipo RTF.
Como vamos a subir imgenes y archivos de texto probablemente stos tengan un
tamao considerable, es decir, no tan pequeos. Por lo que debemos hacer algunos
cambios en nuestras configuraciones anteriormente detalladas.
Primero tener presente que finalmente los archivos van a ser almacenados en MySQL,
esto quiere decir que debemos indicarle eso, atravs de la modificacin del archivo
my.ini que se encuentra en el folder de instalacin de MySQL, para ello buscamos la
entrada [mysqld] y justo debajo le indicamos que el paquete mximo permitido sea de
2MB aadiendo la lnea:
max_allowed_packet=2M
Para JSP es suficiente con incluir las libreras commons-fileupload-1.2.2.jar (que
viene dentro del archivo commons-fileupload-1.2.2-bin.zip) y commons-io-2.0.1.jar
(que viene dentro del archivo commons-io-2.0.1-bin.zip) dentro del folder \lib en la
carpeta de instalacin de Tomcat.
Para PHP se necesitan hacer unos ajustes en su archivo de configuracin php.ini.
Dependiendo de la cantidad de archivos a subir y del tamao de cada uno de ellos, ser
necesario cambiar las variables post_max_size que inicialmente tiene un valor de 8M y
upload_max_filesize que inicialmente tiene un valor de 2M.
Obviamente en algn momento se deber establecer un tope mximo de subida y es aqu
donde esas variables son obligadas. Tambin es necesario considerar los tiempos
involucrados en dichas subidas debido al tamao y ancho de banda disponible para ello.
Por ahora cambiemos estos valores as:
; post_max_size = 8M
post_max_size = 16M y
; upload_max_filesize = 2M
upload_max_filesize = 16M
Teniendo en cuenta que estn involucradas las variables en cuanto a demora y duracin
del Script:
max_execution_time = 30 y
max_input_time = 60.
Ahora ingresamos a MySQL y creamos una base de datos donde podamos hacer las
demostraciones del tutorial.
Primero Verificamos las bases de datos de MySQL, aunque este paso es opcional
SHOW DATABASES;
Luego creamos nuestra base de datos, en mi caso se llamar Empresa
CREATE DATABASE Empresa;
Ahora usamos la Base de datos recien creada y creamos una tabla de prueba llamada
Registros.
USE Empresa;
CREATE TABLE Registros (Nombre varchar(30),Salario int(11),
Ingreso DATE,Foto MEDIUMBLOB,Resumen MEDIUMTEXT);
Igualmente como en el proceso de instalacin, verificamos los usuarios y sin problemas
creamos el nuestro concedindole los permisos a nuestra base de datos.
GRANT ALL ON Empresa.* TO elusuario@localhost IDENTIFIED BY laclave;

Con la base de datos creada, la tabla y sus campos y el usuario que permite utilizarla
podemos trabajar por medio de los scripts de JSP y de PHP.
Script JSP (Personal.jsp)
Como vamos a trabajar con la subida de archivos a MySQL con commons-fileupload-
1.2.2.jar y con commons-io-2.0.1.jar har un detalle no muy profundo de parte del
Script.
Primero la importacin de libreras:
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ include file="RTF.jsp" %>
Las importaciones para org.apache.commons.fileupload son las que nos permiten la
gestin de subida de archivos y otros parmetros como campos de formularios, etc.
La importacin java.sql obviamente para la gestin de consultas hacia MySQL.
La importacin java.util para manejo de iteraciones y la importacin java.io lectura y
escritura de archivos.
La inclusin del archivo RTF.jsp es para poder hacer uso de funciones inherentes al
formato RTF.
Script PHP (Personal.php)
Para el caso de PHP, no es necesario hacer la importacin de libreras de esta manera.
Solo la inclusin del archivo RTF.php de funciones para RTF.
<?php require("RTF.php"); ?>
Ahora detallo lo referente al cdigo HTML para nuestro formulario que nos permiten
ingresar los campos:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Registros - <?php print $_SERVER['PHP_SELF']; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1" />
<link rel="shortcut icon" href="BZ.ico" type="image/x-icon" />
</head>
<body>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post"
name="FormOperar" enctype="multipart/form-data">
Nombres y Apellidos: <input type="text" name="tNombre" value=""
size="30" /><br/>
Valor Salario: <input type="text" name="tSalario" value=""
size="11" /><br/>
Fecha Ingreso: <input type="text" name="tIngreso" value=""
size="10" /><br/>
Foto Reciente: <input type="file" name="fFoto" value=""
size="60" /><br/>
Resumen: <input type="file" name="fResumen" value="" size="60"
/><br/>
<input type="submit" name="bCargar" value="Cargar Datos"
style="FONT-SIZE: 8pt; FONT-FAMILY: Courier"/><br/>
<input type="submit" name="bListar" value="Listar Datos"
style="FONT-SIZE: 8pt; FONT-FAMILY: Courier"/><br/>
<input type="submit" name="bBorrar" value="Borrar Datos"
style="FONT-SIZE: 8pt; FONT-FAMILY: Courier"/><br/>
</form>

Como podemos ver adems de los campos que nos permitirn ingresar los valores a los
campos definidos anteriormente a la base de datos Empresa he dispuesto un cono
distintivo para nuestros Scripts llamado realmente BZ.ico.
Nombres y Apellidos; de tipo Texto
Valor Salario; de tipo numrico
Fecha Ingreso; de tipo Fecha
Foto Reciente; de tipo Binario
Resumen; de tipo Texto.
Adems tres botones que nos permitirn: ingresar un registro, listar los registros
generando un archivo RTF y borrar los registros.
Con esto cubrimos acciones bsicas pero importantes en nuestra base de datos en
MySQL.
Script JSP (Personal.jsp)
Para el caso de JSP es similar a PHP solo lo referente al lenguaje en si:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Registros - <% out.println(request.getServletPath());
%></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1" />
<link rel="shortcut icon" href="BZ.ico" type="image/x-icon" />
</head>
<body>
<form action="<% out.println(request.getServletPath()); %>"
method="post" name="FormOperar" enctype="multipart/form-data">
Nombres y Apellidos: <input type="text" name="tNombre" value=""
size="30" /><br/>
Valor Salario: <input type="text" name="tSalario" value=""
size="11" /><br/>
Fecha Ingreso: <input type="text" name="tIngreso" value=""
size="10" /><br/>
Foto Reciente: <input type="file" name="fFoto" value=""
size="60" /><br/>
Resumen: <input type="file" name="fResumen" value="" size="60"
/><br/>
<input type="submit" name="bCargar" value="Cargar Datos"
style="FONT-SIZE: 8pt; FONT-FAMILY: Courier"/><br/>
<input type="submit" name="bListar" value="Listar Datos"
style="FONT-SIZE: 8pt; FONT-FAMILY: Courier"/><br/>
<input type="submit" name="bBorrar" value="Borrar Datos"
style="FONT-SIZE: 8pt; FONT-FAMILY: Courier"/><br/>
</form>

Ahora la parte de captura de los campos de nuestro formulario:
<%
if(ServletFileUpload.isMultipartContent(request)){
ServletFileUpload SFileUpload = new ServletFileUpload(new
DiskFileItemFactory());
Iterator iter = null;
Hashtable Parameters = new Hashtable();
try{
iter = SFileUpload.parseRequest(request).iterator();
FileItem FItem = null;
while(iter.hasNext()){
FItem = (FileItem)iter.next();
if (FItem.isFormField() ){
Parameters.put(FItem.getFieldName(), FItem.getString());
} else {
if (FItem.getFieldName().equals("fFoto")){
Parameters.put(FItem.getFieldName(),
FItem.getInputStream());
}
if (FItem.getFieldName().equals("fResumen")){
Parameters.put(FItem.getFieldName(),
FItem.getString("ISO-8859-1"));
}
}
}
}
catch(FileUploadException e){ out.println(e.toString()); }
Lo que hace el Script anterior es crear un objeto con el que podamos obtener no solo los
parmetros bsicos del formulario de HTML, sino los archivos para los campos
input de tipo File. Ponindolos en un HashTable para su posterior uso, hacindo
obviamente una discriminacin entre ellos.
Script PHP (Personal.php)
Ahora creamos la conexin a MySQL que nos permita realizar la opcin segn el botn
presionado en el formulario. Tngase en cuenta que los parmetros para la base de datos
Empresa es la misma que se realiz anteriormente.
<?php
$host = "localhost";
$User = "elusuario";
$Pass = "laclave";
$DB = "Empresa";
$Enlace = new mysqli($host,$User,$Pass,$DB);
if ($Enlace->connect_error) {
printf ("Connect Error: (%d) %s",$Enlace->connect_errno,$Enlace-
>connect_error);
exit();
}
Script JSP (Personal.jsp)
String host = "localhost";
String User = "elusuario";
String Pass = "laclave";
String DB = "Empresa";
try { Class.forName("com.mysql.jdbc.Driver"); }
catch (ClassNotFoundException e) { out.println(e.toString());
}
Connection Conexion = null;
Statement Enunciado = null;
ResultSet Resultado = null;
PreparedStatement PE = null;
try{ Conexion =
DriverManager.getConnection("jdbc:mysql://"+host+"/"+DB,User,Pass); }
catch (SQLException e) { out.println(e.toString()); }
Como se puede notar no es mucha la diferencia conceptualmente hablando, solo los
objetos de los que posteriormente tendremos que hacer uso para nuestros objetivos.
Script PHP (Personal.php)
Ahora demostraremos el proceso de Insercin de un registro a la base de datos Empresa
if (isset($_POST['bCargar'])){
$Enunciado = $Enlace->prepare("INSERT INTO Registros
(Nombre,Salario,Ingreso,Foto,Resumen) VALUES(?,?,?,?,?)");
$sNombre = utf8_encode ($_POST['tNombre']);
$sSalario = $_POST['tSalario'];
$sIngreso = $_POST['tIngreso'];
$BytesFoto = NULL;
$BytesResumen = NULL;

$Enunciado-
>bind_param('sisbb',$sNombre,$sSalario,$sIngreso,$BytesFoto,$BytesResu
men);
if (is_uploaded_file($_FILES['fFoto']['tmp_name'])){
$fiFoto = fopen($_FILES['fFoto']['tmp_name'], "rb");
if ($fiFoto!=false){
while (!feof($fiFoto)){
$Enunciado->send_long_data(3, fread($fiFoto, 8192));
}
fclose($fiFoto);
}
} else {
printf("Error Upload File: (%d)
%s",$HTTP_POST_FILES['fFoto']['error'],$Enlace->error);
exit();
}

if (is_uploaded_file($_FILES['fResumen']['tmp_name'])){
$fiResumen = fopen($_FILES['fResumen']['tmp_name'], "rb");
if ($fiResumen!=false){
while (!feof($fiResumen)){
$Enunciado->send_long_data(4, fread($fiResumen, 8192));
}
fclose($fiResumen);
}
} else {
printf("Error Upload File: (%d)
%s",$HTTP_POST_FILES['fResumen']['error'],$Enlace->error);
exit();
}

if ($Enunciado->execute()) {
print("Insercin Exitosa!<br/>");
}else {
printf("Error: (%d) %s",$Enlace->errno,$Enlace->error);
exit();
}
$Enunciado->close();
$Enlace->close();
}
Si el botn que se presion fue bCargar, es porque se desea insertar un registro.
Dado que para la insercin de un archivo primero debemos pasar por una serie de
funciones, usamos el mtodo prepare para realizar una insercin con formato.
Inicializamos las variables a utilizar y luego hacemos una correspondencia entre ellas y
los valores para la sentencia de MySQL con el mtodo bind_param.
Luego hacemos las lecturas con la funcin is_uploaded_file de los archivos de Imagen
y de Texto y asignndolos a su variable respectiva.
Con todas las variables y sus valores respectivos asignados, ejecutamos el enunciado
con el mtodo Execute. Si no hay ningn error, la insercin se habr realizado
exitosamente.
Script JSP (Personal.jsp)
if((String)Parameters.get("bCargar")!=null){
try{
PE = Conexion.prepareStatement("INSERT INTO Registros
(Nombre,Salario,Ingreso,Foto,Resumen) VALUES(?,?,?,?,?)");
String sNombre = (String)Parameters.get("tNombre");
String sSalario = (String)Parameters.get("tSalario");
String sIngreso = (String)Parameters.get("tIngreso");
InputStream isFoto = (InputStream)Parameters.get("fFoto");
String sResumen = (String)Parameters.get("fResumen");
PE.setString(1,sNombre);
PE.setInt(2,Integer.parseInt(sSalario));
PE.setString(3,sIngreso);
PE.setBinaryStream(4,isFoto);
PE.setString(5,sResumen);
PE.executeUpdate();
out.println("Insercin Exitosa!<br/>");
}
catch (SQLException e) { out.println(e.toString()); }
catch (Exception e) { out.println(e.toString()); }
finally {
PE.close();
Conexion.close();
}
}
Para el caso de JSP el caso es ms simple aunque el principio es el mismo; tomando el
valor respectivo del Hashtable Parameters. La insercin con formato se hace con el
mtodo prepareStatement. Se puede notar que la lectura del archivo puede llevarse de
inmediato a la variable correspondiente segn la misma con setString, setInt,
setBinaryStream. Finalmente realizamos la insercin con el mtodo executeUpdate
Script JSP (Personal.jsp)
Seguimos ahora con la extraccin de los registros que estn en la base de datos:
if((String)Parameters.get("bListar")!=null){
String FS = System.getProperty("file.separator");//Separador
de Archivo o de Directorio
//Buscar ruta del Script
String ScriptRoot = application.getRealPath("");
ScriptRoot = ScriptRoot.replace("\\",FS);//Reemplaza \ por
FS
ScriptRoot = ScriptRoot.replace("/",FS);//Reemplaza / por FS
String FileName = "JSP.Personal.RTF";
String FullFileName = ScriptRoot+FS+"Files"+FS+FileName;
String ImageJPG = ScriptRoot+FS+"joseluisbz.jpg";
String ImagePNG = ScriptRoot+FS+"Empresa.png";
try {
BufferedWriter bw = new BufferedWriter(new
FileWriter(FullFileName));
bw.write(sHeader);
int[] iFormato = new int[1];
int[] iAlto = new int[1];
int[] iAncho = new int[1];
String sBytesJPG =
ByteFileImageString(ImageJPG,iFormato,iAlto,iAncho);
if (sBytesJPG.equals("Error")){
out.println("Error: el Archivo "+ImageJPG+" no es PNG o
JPG");
System.exit(0);
}
String InfImagenJPG =
RTFImagen(sBytesJPG,iFormato[0],iAlto[0],iAncho[0],100,100,iAlto[0]*10
,iAncho[0]*10,0,0,0,0);
String sBytesPNG =
ByteFileImageString(ImagePNG,iFormato,iAlto,iAncho);
if (sBytesPNG.equals("Error")){
out.println("Error: el Archivo "+ImagePNG+" no es PNG o
JPG");
System.exit(0);
}
String InfImagenPNG =
RTFImagen(sBytesPNG,iFormato[0],iAlto[0],iAncho[0],100,100,iAlto[0]*10
,iAncho[0]*10,0,0,0,0);
String sBytesIMG;
String InfImagenIMG;
//sFrmtBS(/*Alineacion*/,/*Color Frontal*/,/*Color
Fondo*/,/*Tipo Fuente*/,/*Tamao Fuente*/);
String FrmtTitle = sFrmtBS(1,1,2,5,20);
String FrmtTexto = sFrmtBS(2,1,2,4,12);
//sFrmtSP(/*Negrita*/,/*Italica*/,/*Subrayado*/);
String FrmtEspec = sFrmtSP(1,0,0);
String FrmtCampo = sFrmtSP(0,0,1);
String FrmtValor = sFrmtSP(0,1,0);
PE = Conexion.prepareStatement("SELECT * FROM Registros");
Resultado = PE.executeQuery();
Resultado.last();
int NumRegistros =
Resultado.getRow();Resultado.beforeFirst();
while(Resultado.next()){

//sTablIH(/*EspMd*/,/*Posic*/,/*Align*/,/*Borde*/,/*Grosor*/,/*Color*/
)

//sCeldaH(/*Ancho*/,/*Mezcla*/,/*AligV*/,/*Borde*/,/*Grosr*/,/*Color*/
)
bw.write(sTexto(FrmtTitle+FrmtEspec,"Empresa
Limitada"));
bw.write(sNParag);
bw.write(sTablIH(10,10,1,1,10,2));//Inicio Cabecera de
Tabla
bw.write(sCeldaH(4000,0,0,2,10,2));
bw.write(sCeldaH(8000,0,0,2,10,2));
bw.write(sTablFH());//Fin Cabecera de Tabla
bw.write(sCeldaC(sFrmtBS(1,0,0,0,0),InfImagenPNG));
bw.write(sCeldaC(sFrmtBS(1,0,0,0,0),InfImagenJPG));
bw.write(sTablFF());//Fin de Tabla
bw.write(sNLinea+sNLinea);//2 Saltos de Lnea
bw.write(sTexto(FrmtCampo+FrmtTexto,"Nombre: "));

bw.write(sTexto(FrmtValor+FrmtTexto,Resultado.getString(1)));
bw.write(sNLinea);
bw.write(sTexto(FrmtCampo+FrmtTexto,"Salario: "));

bw.write(sTexto(FrmtValor+FrmtTexto,String.valueOf(Resultado.getInt(2)
)));
bw.write(sNLinea);
sBytesIMG =
ByteStreamImageString(Resultado.getBytes(4),iFormato,iAlto,iAncho);
InfImagenIMG =
RTFImagen(sBytesIMG,iFormato[0],iAlto[0],iAncho[0],100,100,iAlto[0]*10
,iAncho[0]*10,0,0,0,0);
bw.write(InfImagenIMG);
bw.write(sTexto(FrmtCampo+FrmtTexto,"Resumen: "));

bw.write(sTexto(FrmtValor+FrmtTexto,Resultado.getString(5)));
NumRegistros--;
if (NumRegistros>0){
bw.write(sNPagina);//Nueva Pgina
}
}
bw.write(sFooter);
bw.close();
out.println("<a
href=\"http://localhost/"+"Files"+"/"+FileName+"\">http://localhost/"+
"Files"+"/"+FileName+"</a><P>");
}
catch (Exception e) { out.println(e.toString()); }
}
Si se ha presionado el botn bListar, el usuario desea producir un archivo RTF con
todos los registros que estn en la base de datos.
Primero almacenamos en FS la manera en la que el sistema operativo delimita los
directorios, subdirectorios y archivos; en Windows es con \ en Linux es con /.
Luego determinamos la ruta de alojamiento del Script almacenndola en una variable
llamada ScriptRoot, luego actualizamos la manera en que nuestro PHP o JSP presenta
el delimitador de directorios y archivos a la manera del Sistema Operativo.
Se crear un archivo RTF llamado JSP.Personal.RTF y se almacenar en un
subdirectorio llamado Files en la misma ruta donde se aloja este script.
ImageJPG y ImagePNG son archivos que se insertarn en el RTF.
FullFileName se crea el archivo RTF.
Las variables iFormato, iAlto, iAncho nos permiten pasar por referencia el formato, el
alto y el ancho de la imagen que se insertar.
ByteFileImageString Obtiene los bytes del archivo imagen, el formato, el alto y el
ancho.
RTFImagen es una cadena de texto que representa la imagen la imagen a insertar en el
archivo con sus respectivos formatos.
FrmtTitle y FrmtTexto son los formatos bsicos de nuestro archivo, uno para el ttulo
y el otro para el texto en general.
sFrmtSP, FrmtCampo y FrmtValor son formatos especiales que nos permiten
hacer modificaciones adicionales a nuestro texto.
Preparamos la consulta con formato usando el mtodo prepareStatement y la
ejecutamos con executeQuery.
Almacenamos el resultado en la variable Resultado. Para no insertar una pgina en
blanco al final necesitamos saber cuantos registros arroj la consulta, para ello
invocamos el mtodo last, almacenamos el nmero de la fila en NumRegistros con
getRow y posteriormente beforeFirst para poder llamar el mtodo next.
Insertamos los campos y el valor de cada registro teniendo en cuenta el tipo de cada uno
de ellos.
La insercin de texto, de conformacin de tabla, celdas y su contenido se hacen a
continuacin, segn lo descrito el Script de RTF.
Una vez finalizado publicamos el enlace con la que el usuario puede acceder al archivo
RTF creado.
Script PHP (Personal.php)
La forma en que PHP crea el archivo RTF para extraer los registros y presentarlos es
muy similar a la que los realiza JSP.
if (isset($_POST['bListar'])){
$FS = DIRECTORY_SEPARATOR;//Separador de Archivo o de
Directorio
//Buscar ruta del Script
$ScriptRoot = getenv("DOCUMENT_ROOT");
$ScriptRoot = str_replace("/",$FS,$ScriptRoot);//Reemplaza /
por $FS
$ScriptRoot = str_replace("\\",$FS,$ScriptRoot);//Reemplaza \
por $FS
$FileName = "PHP.Personal.RTF";
$FullFileName = $ScriptRoot.$FS."Files".$FS.$FileName;
$ImageJPG = $ScriptRoot.$FS."joseluisbz.jpg";
$ImagePNG = $ScriptRoot.$FS."Empresa.png";
$fw = fopen($FullFileName, "wb");
if($fw){
fwrite($fw,$sHeader);
$iFormato = NULL;
$iAlto = NULL;
$iAncho = NULL;
$sBytesJPG =
ByteFileImageString($ImageJPG,$iFormato,$iAlto,$iAncho);
if (strcmp($sBytesJPG,"Error")==0){
print("Error: el Archivo ".$ImageJPG." no es PNG o JPG");
exit();
}
$InfImagenJPG =
RTFImagen($sBytesJPG,$iFormato,$iAlto,$iAncho,100,100,$iAlto*10,$iAnch
o*10,0,0,0,0);
$sBytesPNG =
ByteFileImageString($ImagePNG,$iFormato,$iAlto,$iAncho);
if (strcmp($sBytesPNG,"Error")==0){
print("Error: el Archivo ".$ImagePNG." no es PNG o JPG");
exit();
}
$InfImagenPNG =
RTFImagen($sBytesPNG,$iFormato,$iAlto,$iAncho,100,100,$iAlto*10,$iAnch
o*10,0,0,0,0);
$sBytesIMG = NULL;
$InfImagenIMG = NULL;
//sFrmtBS(/*Alineacion*/,/*Color Frontal*/,/*Color
Fondo*/,/*Tipo Fuente*/,/*Tamao Fuente*/);
$FrmtTitle = sFrmtBS(1,1,2,5,20);
$FrmtTexto = sFrmtBS(2,1,2,4,12);
//sFrmtSP(/*Negrita*/,/*Italica*/,/*Subrayado*/);
$FrmtEspec = sFrmtSP(1,0,0);
$FrmtCampo = sFrmtSP(0,0,1);
$FrmtValor = sFrmtSP(0,1,0);

if ($Enunciado = $Enlace->prepare("SELECT * FROM
Registros")) {
$Enunciado->execute();
$Enunciado-
>bind_result($sNombre,$sSalario,$sIngreso,$BytesFoto,$BytesResumen);
$Enunciado->store_result();
$NumRegistros = $Enunciado->num_rows;
while ($Enunciado->fetch()) {

//sTablIH(/*EspMd*/,/*Posic*/,/*Align*/,/*Borde*/,/*Grosor*/,/*Color*/
)

//sCeldaH(/*Ancho*/,/*Mezcla*/,/*AligV*/,/*Borde*/,/*Grosr*/,/*Color*/
)
fwrite($fw,sTexto($FrmtTitle.$FrmtEspec,"Empresa
Limitada"));
fwrite($fw,$sNParag);
fwrite($fw,sTablIH(10,10,1,1,10,2));//Inicio Cabecera de
Tabla
fwrite($fw,sCeldaH(4000,0,0,2,10,2));
fwrite($fw,sCeldaH(8000,0,0,2,10,2));
fwrite($fw,sTablFH());//Fin Cabecera de Tabla
fwrite($fw,sCeldaC(sFrmtBS(1,0,0,0,0),$InfImagenPNG));
fwrite($fw,sCeldaC(sFrmtBS(1,0,0,0,0),$InfImagenJPG));
fwrite($fw,sTablFF());//Fin de Tabla
fwrite($fw,$sNLinea.$sNLinea);//2 Saltos de Lnea
fwrite($fw,sTexto($FrmtCampo.$FrmtTexto,"Nombre: "));

fwrite($fw,sTexto($FrmtValor.$FrmtTexto,utf8_decode($sNombre)));
fwrite($fw,$sNLinea);
fwrite($fw,sTexto($FrmtCampo.$FrmtTexto,"Salario: "));
fwrite($fw,sTexto($FrmtValor.$FrmtTexto,$sSalario));
fwrite($fw,$sNLinea);
$sBytesIMG =
ByteStreamImageString($BytesFoto,$iFormato,$iAlto,$iAncho);
$InfImagenIMG =
RTFImagen($sBytesIMG,$iFormato,$iAlto,$iAncho,100,100,$iAlto*10,$iAnch
o*10,0,0,0,0);
fwrite($fw,$InfImagenIMG);
fwrite($fw,sTexto($FrmtCampo.$FrmtTexto,"Resumen: "));
fwrite($fw,sTexto($FrmtValor.$FrmtTexto,$BytesResumen));
$NumRegistros--;
if($NumRegistros>0){
fwrite($fw,$sNPagina);//Nueva Pgina
}
}
$Enunciado->close();
}
fwrite($fw,$sFooter);
fclose($fw);
print("<a
href=\"http://localhost/"."Files"."/".$FileName."\">http://localhost/"
."Files"."/".$FileName."</a><P>");
} else {
print($FullFileName." (El sistema no puede encontrar la ruta
especificada)");
exit();
}
}
Con el mtodo prepare se prepara la consulta, se realiza con el mtodo execute y se
asigna a la variable respectiva el valor de cada campo con el mtodo bind_result; como
necesitamos saber el nmero de registros obtenidos invocamos el mtodo num_rows no
sin antes invocar el mtodo store_result para que el valor de las filas correspondiente a
cada registra no sea cero.
if (isset($_POST['bBorrar'])){
$Consulta = "DELETE FROM Registros";
$Resultado = $Enlace->query($Consulta);
if (!$Resultado) {
printf("Error: (%d) %s",$Enlace->errno,$Enlace->error);
exit();
}
print("Eliminacin Exitosa!<br/>");
}
?>
Para la eliminacin se determina si el botn presionado es bBorrar, luego se establece la
consulta y se ejecuta almacenndose el resultado con el fin de derminar si fue exitoso o
fallido, en ambos casos se desplegar un mensaje segn su valor.
Script JSP (Personal.jsp)
if((String)Parameters.get("bBorrar")!=null){
try {
Enunciado = Conexion.createStatement();
Enunciado.executeUpdate("DELETE FROM Registros");
out.println("Eliminacin Exitosa!<br/>");
}
catch (SQLException e) { out.println(e.toString()); }
}
}
%>
De igual forma se realiza la eliminacin de los registros en JSP.
Con esto hemos finalizado nuestro tutorial.
Fuente: http://joseluisbz.wordpress.com/2011/03/19/subiendo-imagenes-y-archivos-a-
mysql-con-php-y-jsp-y-desplegandolos-en-rtf/

You might also like