Foros del Web » Programando para Internet » PHP »

PHPWord llenar plantilla con registros de una tabla mysql

Estas en el tema de PHPWord llenar plantilla con registros de una tabla mysql en el foro de PHP en Foros del Web. Qué tal, soy nuevo en este foro y también el lo que respecta a la programación en el lenguaje php. Bueno mi duda es la ...
  #1 (permalink)  
Antiguo 20/07/2015, 10:06
 
Fecha de Ingreso: julio-2015
Ubicación: Saltillo, Coahuila
Mensajes: 3
Antigüedad: 8 años, 9 meses
Puntos: 0
Pregunta PHPWord llenar plantilla con registros de una tabla mysql

Qué tal, soy nuevo en este foro y también el lo que respecta a la programación en el lenguaje php.

Bueno mi duda es la siguiente:

Estoy realizando un proyecto para crear vales de gasolina, los vales llevan datos como departamento, responsable, fecha, cantidad, artículo, importe, entre otros...

Con la ayuda de la librería PHPWord creo un documento de word que me servira como plantilla, en ella diseño las tablas de los vales y defino las varibles que reemplazaré con php.

Tengo mi documento php con el cual proceso la plantilla y reemplazo las variables.
Para llenar los vales hago uso de un formulario html, este formulario tiene conexión con el documento php y con una base de datos en mysql.

Al momento de llenar los campos del formulario se guardan en la base de datos y a su vez son procesados por el documento php para reemplazarlos en la plantilla de word.

El problema es que sólo puedo crear un vale, es decir que cuando termino de llenar todos los campos del formulario y doy click al botón para enviar los datos solo me crea un solo vale y se descarga el documento de Word con dicho vale.

La aplicación hasta el momento me funciona muy bien, el único problema es ese, que no sé como crear un documento de word con más de un vale, es decir que el formulario me permita llenarlo cuantas veces quiera antes de descargar el documento y que los datos que se tomen para llenar los vales sean tomados de la base de datos. No sé si me explico bien

Anexo los códigos de los archivos que utilizo

Código php:

Código PHP:
<?php
require_once dirname(__FILE__).'/PHPWord-master/src/PhpWord/Autoloader.php';
PhpOfficePhpWordAutoloader::register();

use 
PhpOfficePhpWordTemplateProcessor;


$total $_REQUEST[cantn] * $_REQUEST[precio];


$conexion=mysql_connect("localhost","root","") or
  die(
"Problemas en la conexion");
mysql_select_db("presi",$conexion) or
  die(
"Problemas en la seleccion de la base de datos");
mysql_query("insert into vales(dpto,rsp,cantn,imp,precio,uni,placas,placas2) values ('$_REQUEST[dpto]','$_REQUEST[rsp]','$_REQUEST[cantn]','$_REQUEST[imp]','$total','$_REQUEST[uni]','$_REQUEST[placas]','$_REQUEST[placas2]')"$conexion) or
  die(
"Problemas en el select".mysql_error());
mysql_close($conexion);

$templateWord = new TemplateProcessor('plantilla.docx');
 
//$nombre = $_REQUEST['nombre'];
$folio $_GET['id'];
$departamento $_REQUEST['dpto'];
$responsable $_REQUEST['rsp'];
$dia $_REQUEST['dia'];
$mes $_REQUEST['mes'];
$year $_REQUEST['year'];
$cantn $_REQUEST['cantn'];
$cantl $_REQUEST['cantl'];
//$articulo = $_REQUEST['articulo'];
$importe $_REQUEST['imp'];
$unidad $_REQUEST['uni'];
$placas $_REQUEST['placas'];


// --- Asignamos valores a la plantilla
//$templateWord->setValue('nombre',$nombre);
$templateWord->setValue('folio',$folio);
$templateWord->setValue('departamento',$departamento);
$templateWord->setValue('responsable',$responsable);
$templateWord->setValue('dia',$dia);
$templateWord->setValue('mes',$mes);
$templateWord->setValue('year',$year);
$templateWord->setValue('cantn',$cantn);
$templateWord->setValue('cantl',$cantl);
//$templateWord->setValue('articulo',$articulo);
$templateWord->setValue('importe',$importe);
$templateWord->setValue('unidad',$unidad);
$templateWord->setValue('placas',$placas);


// --- Guardamos el documento
ob_clean();
$templateWord->saveAs('Vales.docx');

header("Content-Disposition: attachment; filename=Vales.docx; charset=iso-8859-1");
echo 
file_get_contents('Vales.docx');
?>
Código html:
Código HTML:
<html>
<head>
<title>Creaci&oacute;n de Vales</title>
<script type="text/javascript" src="dynamicoptionlist.js"></script>
<link rel="icon" type="image/png" href="favicon.png">
<link rel="stylesheet" href="estilos.css">
</head>
<body onLoad="initDynamicOptionLists()">
<header>
<div class="menu">
	<div class="contenedor">
		<div class="logo">
			<a href="index.html">Creaci&oacute;n de vales</a>
		</div>
		<nav>
		<ul>
		<li><a href="index.html">Inicio</a></li>
		<li><a href="altas.html">Creaci&oacute;n de vales</a></li>
		<li><a href="../graph2/index.php">Consulta de gr&aacute;ficas</a></li>
		<li><a href="extras.html">Vales Extras</a></li>
		</ul>
		</nav>
	</div>
</div>
</header>
<center>
	<div class="Shield">
		<img src="shield.png" width="150px" height="150px">
	</div>
<div class="CV">
	<h1>Creaci&oacute;n de Vales</h1>
</div>
<div class="formu">
<form action="template.php" method="post">
<b>Nombre:&nbsp;Presidencia Municipal</b><br><br>
<b>Departamento:</b>
<select name="dpto">
<option value="Seguridad">Seguridad</option>
<option value="Servicios Primarios">Servicios Primarios</option>
<option value="Ecologia">Ecolog&iacute;a</option>
<option value="Desarrollo Rural">Desarrollo Rural</option>
<option value="Desarrollo Social">Desarrollo Social</option>
<option value="Presidencia">Presidencia</option>
<option value="Fomento Civico">Fomento Civico</option>
<option value="Regidores">Regidores</option>
<option value="Recursos Humanos">Recursos Humanos</option>
<option value="Tesoreria">Tesorer&iacute;a</option>
<option value="Gestoria">Gestor&iacute;a</option>
<option value="Parques y Jardines">Parques y Jard&iacute;nes</option>
<option value="Contraloria">Contralor&iacute;a</option>
<option value="Alumbrado Publico">Alumbrado P&uacute;blico</option>
<option value="Juridico">Jur&iacute;dico</option>
<option value="Obras Publicas">Obras P&uacute;blicas</option>
<option value="Comunicacion Social">Comuniaci&oacute;n Social</option>
<option value="DIF">DIF</option>
<option value="Biblioteca">Biblioteca</option>
<option value="Secretaria del Ayuntamiento">Secretar&iacute;a del Ayuntamiento</option>
<option value="Proteccion Civil">Protecci&oacute;n Civil</option>
<option value="Bomberos">Bomberos</option>
<option value="Turismo Municipal">Turismo Municipal</option>
<option value="Union de Pensionados">Uni&oacute;n de Pensionados</option>
<option value="SEDENA Ejercito Mexicano">SEDENA Ejercito Mexicano</option>
<option value="Instituto de la Juventud">Instituto de la Juventud</option>
<option value="Centro de Salud">Centro de Salud</option>
<option value="Apoyo Cam 10">Apoyo Cam 10</option>
<option value="Apoyo estudiantes Ejido La Cecilia CBTA">Apoyo estudiantes Ejido La Cecilia CBTA</option>
<option value="Apoyo Atencion Medica Oficial de Seguridad">Apoyo Atenci&oacute;n M&eacute;dica Oficial de Seguridad</option>
<option value="Apoyo EMSAD 28 de Agosto">Apoyo EMSAD 28 de Agosto</option>
<option value="Apoyo estudiantes ejido el Durazno">Apoyo estudiantes ejido el Durazno</option>
<option value="Apoyo estudiantes ejido Ganivete">Apoyo estudiantes ejido Ganivete</option>
<option value="Apoyo estudiantes ejido Estacion Madero">Apoyo estudiantes ejido Estaci&oacute;n Madero</option>
</select><br><br>
<b>Responsable:</b>
<select name="rsp">
</select><br><br>
<b>Fecha:</b><br><br>
D&iacute;a:
<input type="text" size="5" placeholder="15" name="dia">&nbsp;&nbsp;
Mes:
<input type="text" size="5" placeholder="9" name="mes">&nbsp;&nbsp;
A&ntilde;o
<input type="text" size="5" placeholder="2015" name="year"><br><br>&nbsp;&nbsp;
<b>Cantidad:</b>
<input type="text" size="5" placeholder="40" name="cantn">&nbsp;&nbsp;&nbsp;&nbsp;
<b>Cantidad Letra:</b>
<input type="text" size="12" placeholder="Cuarenta" name="cantl"><br><br>
<b>Art&iacute;culo:</b>&nbsp;&nbsp;<i>Litros</i>&nbsp;&nbsp;
<b>Importe:</b>
<select name="imp">
	<option>Magna
	<option>Premium
	<option>Diesel
</select>&nbsp;&nbsp;
<b>Precio:<b>
<select name="precio">
</select><br><br>
<b>Seleccione o ingrese Unidad:</b><br><br>
<select name="uni">
</select><br><br>
<input type="text" size="25" placeholder="Camion de pasajeros" name="uni2"><br><br>
<b>Seleccione o ingrese placas:</b><br><br>
<select name="placas">
</select><br><br>
<input type="text" size="12" placeholder="EXO9843" name="placas2"><br><br>
<input type="submit" value="Registrar">
</div>
</form>
</center>
</body>
</html> 
Sí, mi código es un desastre pero como lo dije, soy nuevo en esto de la programación.
Espero y alguien me pueda ayudar ya que es lo único que me falta para terminar la aplicación
  #2 (permalink)  
Antiguo 20/07/2015, 10:10
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: PHPWord llenar plantilla con registros de una tabla mysql

porque mejor no lo haces con dompdf y le creas un salto de pagina donde quieras que termine el primer vale y asi suscesivamente mediante un while de datos???, lo veo más sencillo y menos problematico, a parte de que no le veo la utilidad a word en esto si lo puedes hacer con un pdf y generar una secuencia con el mismo
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 21/07/2015, 09:38
 
Fecha de Ingreso: julio-2015
Ubicación: Saltillo, Coahuila
Mensajes: 3
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: PHPWord llenar plantilla con registros de una tabla mysql

Gracias xfxstudios le echare una leida a esa librería que me comentas. Otra cosa, me podrías poner algún ejemplo de como realizar un while de datos? de verdad te lo agradecería.
  #4 (permalink)  
Antiguo 21/07/2015, 09:48
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: PHPWord llenar plantilla con registros de una tabla mysql

Código PHP:
Ver original
  1. while($fila = NOMBREDETUCONSULTA->fetch_array())
  2. {
  3.    echo $fila['nombredecampo1']."<br>";
  4.    echo $fila['nombredecampo2']."<br>";
  5. }
si vas a usar la libreria avisa y vemos que hacemos
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 22/07/2015, 13:28
 
Fecha de Ingreso: julio-2015
Ubicación: Saltillo, Coahuila
Mensajes: 3
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: PHPWord llenar plantilla con registros de una tabla mysql

Este es un ejemplo que encontré de un while de datos, lo uso para tomar los campos de mi base de datos y crear una tabla html con los mismos

Código PHP:
Ver original
  1. $sql = "SELECT id, dpto, rsp, cantn, imp, precio, uni, placas FROM vales";
  2. $result = mysqli_query($conn, $sql);
  3.  
  4. if (mysqli_num_rows($result) > 0) {
  5.     echo "<table><tr><th>ID</th><th>Departamento</th><th>Responsable</th><th>Cantidad</th><th>Importe</th><th>Precio</th><th>Unidad</th><th>Placas</th></tr>";
  6.     // Muestra de los datos de cada columna
  7.     while($row = mysqli_fetch_assoc($result)) {
  8.         echo "<tr><td>" . $row["id"]. "</td><td>" . $row["dpto"]. "</td><td>" . $row["rsp"]. "</td><td>" .$row["cantn"]. "</td><td>" .$row["imp"]. "</td><td>" .$row["precio"]. "</td><td>" .$row["uni"]. "</td><td>" .$row["placas"]. "</td></tr>";
  9.     }
  10.     echo "</table>";
  11. } else {
  12.     echo "Sin Resultados";
  13. }

La pregunta es: hay forma de editar ese while para llenar los vales con la aplicación que estoy usando hasta el momento.

En lo que respecta a la libreria de dompdf traté de realizar un documento, pero me aparecía un error sobre algo de las fonts, despues me funcionó pero el pdf creado me resultaba dañado :/

Etiquetas: php+bd+mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:32.