Foros del Web » Programando para Internet » PHP »

Crear varios Words con diferentes datos

Estas en el tema de Crear varios Words con diferentes datos en el foro de PHP en Foros del Web. Buenos días, tengo este código que después de recibir los datos de otra página me crea un documento word con la búsqueda en la BD. ...
  #1 (permalink)  
Antiguo 20/08/2015, 02:47
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 4 años, 1 mes
Puntos: 1
Pregunta Crear varios Words con diferentes datos

Buenos días, tengo este código que después de recibir los datos de otra página me crea un documento word con la búsqueda en la BD.
Si recibe de la otra página dos valores(procedentes del array) sigue creando un mismo word pero con los valores diferentes.

La pregunta es ¿Existe alguna manera de que el programa cree por cada valor del array un word diferente?
De tal manera que si en el array encuentra dos referencias me cree dos Words.

Muchas gracias!!


Código PHP:
<?php
$escrito
$_GET['escrito'];
$referencia=$_GET["referencia"];
$array explode(","$referencia);
$longitud count($array);
$escritoL count($escrito);

foreach (
$array as $valor){
require(
"../models/conexionBD.php");
    
$busqueda "SELECT * FROM basica WHERE ref_cortas = '$valor'";
    
$result mysqli_query($conexion$busqueda);
     while (
$datamysqli_fetch_array($result)){
         
    
$referencia                 $data["ref_cortas"];
    
$fecha                        $data["fecha"];

    
header("Cache-Control: ");// leave blank to avoid IE errors
header("Pragma: ");// leave blank to avoid IE errors
header("Content-type: application/vnd.ms-word");
if (
$escrito == "escrito1"){
header("content-disposition: attachment;filename=DOCUMENTO 1 - ".$referencia.".doc");

if (
$escrito == "escrito2"){
header("content-disposition: attachment;filename=DOCUMENTO 2 - ".$referencia.".doc");

if (
$escrito == "escrito3"){
header("content-disposition: attachment;filename=DOCUMENTO 3 - ".$referencia.".doc");


?>
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">


<title>Escritos</title>

</head>
<body style="text-align:justify;font-size:18.5px;">
    
<?php
if ($escrito == "escrito1"){
?>
<p><strong>REF. <?php echo $referencia;?> / Fecha <?php echo $fecha;?></strong></p>
<p> Este es el primer parrafo del documento</p>
<p> Este es el primer segundo parrafo del documento</p>
<?php
}
if (
$escrito == "escrito2"){    
?>
<p><strong>REF. <?php echo $referencia;?> / Fecha <?php echo $fecha;?></strong></p>
<p> Este es el primer parrafo del documento 2 </p>
<p> Este es el segundo parrafo del documento 2</p>
<?php    
}
if (
$escrito == "escrito3"){
?>
<p><strong>REF. <?php echo $referencia;?> / Fecha <?php echo $fecha;?></strong></p>
<p> Este es el primer parrafo del documento 3 </p>
<p> Este es el segundo parrafo del documento 3</p>
<?php        
}
?>
<?php        

}
}
?>
</body>
</html>
  #2 (permalink)  
Antiguo 20/08/2015, 06:46
Avatar de jpint  
Fecha de Ingreso: junio-2012
Ubicación: Ciudad Real - España
Mensajes: 97
Antigüedad: 7 años, 2 meses
Puntos: 12
Respuesta: Crear varios Words con diferentes datos

Puedes crear tantos documentos como quieras, lo que no puedes es enviar por HTTP más de un documento por petición, si tienes que devolver varios ficheros podrías comprimirlos en un ZIP.

Te dejo un hilo similar en stackoverflow.com
  #3 (permalink)  
Antiguo 20/08/2015, 08:38
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 4 años, 1 mes
Puntos: 1
Respuesta: Crear varios Words con diferentes datos

Primero y antes de nada gracias.

He estado leyendo la documentación y ejemplos y aunque entiendo perfectamente todo, no tienedo como meter los ficheros en la variable puesto que me crea uno...
Entiendo que por el método no se puede descargar más de uno, pero ¿cómo generas los otros para meterlos?

Gracias!
  #4 (permalink)  
Antiguo 20/08/2015, 09:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 4 meses
Puntos: 2534
Respuesta: Crear varios Words con diferentes datos

A lo que le llamas "generar" es sólo la impresión de código html, justamente todo el bloque después de cerrar el ?> final.

Bien, eso sí se puede capturar usando buffers:

Código PHP:
Ver original
  1. <?php ob_start(); ?>
  2. documento...
  3. <?php $html = ob_get_clean(); ?>

Esa es la idea.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 20/08/2015, 23:40
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 4 años, 1 mes
Puntos: 1
Respuesta: Crear varios Words con diferentes datos

Entonces que me aclare yo... ¿Cómo sería la estructura de todo ello con buffer y zip inluido? Es decir, guardo los datos en el buffer y cómo le puedo decir que una vez los haya guardado los integre en el zip.


Por otra parte en el la creación del zip:

Código PHP:

    $archivos 
= array();

    
/* Este código comentado nos permite comprimir todo los archivos de una carpeta X
     * Si descomentamos este código, no se olivden de comentar el de la variable $archivos = array( ...)
    */
    /*foreach(scandir ('download') as $s)
    {
        if($s != '.' && $s != '..'){
            $archivos[] = 'download/' . $s;            
        }
    }*/

// Creamos el array que contiene los archivos a comprimir
$archivos = array(
    
'download/MGS.jpg',
    
'download/RE-2.jpg'
);


// Nombre que usaremos para el zip
$zip_nombre 'mi-archivo.zip';

// Instanciamos la clase, esta viene en el paquete de PHP
$zip = new ZipArchive();
$zip->open($zip_nombreZipArchive::CREATE);

// Agregamos los archivos a comprimir
foreach ($archivos as $a){
    
/* Removemos la palabra 'download/', ya que si no hacemos esto
     * va a crear el zip dentro de una carpeta llamada download
     * Tip: si queremos crear archivos comprimidos dentro de carpetas
     * ya saben como hacerlo ;) */
    
$zip->addFile($astr_replace('download/'''$a));
}

$zip->close();

// Forzamos la descarga
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zip_nombre);
header('Content-Length: ' filesize($zip_nombre));
readfile($zip_nombre);

// Eliminamos el archivo que se creo en nuestro host
unlink($zip_nombre); 
Cuando creamos el array donde integramos los datos, ¿Hay alguna manera de indicarle que los datos son del buffer?

Código PHP:
 $archivos = array(
    
'download/MGS.jpg',
    
'download/RE-2.jpg' 

¡Gracias!
  #6 (permalink)  
Antiguo 23/08/2015, 23:53
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 4 años, 1 mes
Puntos: 1
Respuesta: Crear varios Words con diferentes datos

Si no me equivoco la estructura sería así...
Código PHP:
Ver original
  1. <?php ob_start(); ?>
  2. documento...
  3. <?php $html = ob_get_clean();
  4.  
  5. Codigo zip...?>
  #7 (permalink)  
Antiguo 24/08/2015, 10:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 4 meses
Puntos: 2534
Respuesta: Crear varios Words con diferentes datos

Cita:
¿Hay alguna manera de indicarle que los datos son del buffer?
Claro que sí, eso se indica en el manual.

Aunque no necesariamente acepte "los datos del buffer", eso lo debes especificar por tu cuenta:

http://php.net/manual/es/ziparchive.addfromstring.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: arrays, datos+db+mysql, pdf
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 06:20.