Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema redirección (headers already sent by)

Estas en el tema de Problema redirección (headers already sent by) en el foro de PHP en Foros del Web. Hola estimados, por favor denme una manito: Estoy tratando de redireccionar (en realidad lo que busco es refrescar que para los efectos es lo mismo) ...
  #1 (permalink)  
Antiguo 13/01/2016, 12:48
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Problema redirección (headers already sent by)

Hola estimados, por favor denme una manito:
Estoy tratando de redireccionar (en realidad lo que busco es refrescar que para los efectos es lo mismo) después de realizar una exportación a excel.
Necesito hacerlo por que para exportar primero levanto un popup para capturar las fechas de exportación y no la logro bajar después de la exportación y generalmente redirecciono/refresco para que desaparezca.

El extracto de código:

Código PHP:
header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=$filename.xls");
echo 
mb_convert_encoding("$headers\n$data",'utf-16','utf-8');
redirect('adondequieroir''refresh'); 
Y el mensaje de error, que curiosamente aparece dentro del excel al final de todos los datos exportador:
Message: Cannot modify header information - headers already sent by . .........

Estuve averiguando y entiendo que no puedo volver a ocupar el header cuando este ha enviado algo al navegador, que es exactamente lo que pasa. He intentado redireccionar con javascript y no puedo, ya que me sale impreso dentro del excel al igual que el mensaje de error.

Se les ocurre como lo puedo hacer, ¿se pueden refrescar los headers después de utilizarlos?

PD: uso codeigniter
  #2 (permalink)  
Antiguo 13/01/2016, 16:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema redirección (headers already sent by)

Eso es un error clásico: no debes imprimir nada antes de enviar una cabecera y eso es precisamente lo que estás haciendo.

Cita:
¿se pueden refrescar los headers después de utilizarlos?
No.

Seriamente ¿para qué quieres hacer una redirección si ya imprimiste contenido?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/01/2016, 20:08
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema redirección (headers already sent by)

Gracias por responder.

Quiero quitar la ventana emergente que levanto para capturar las fechas y generar la exportación. Dentro de mi programa logro el efecto redireccionando.
Aqui lo que uso para el popup, que es un extracto de codigo que pille por ahi y lo tengo funcionando para un login.

Aca la funcion en javascript del popup

Código HTML:
 <!-- popup para exportacion -->
        <script type="text/javascript">
            $(document).ready(function() {
                $('a.login-window').click(function() {
                    
                    // Getting the variable's value from a link 
                    var loginBox = $(this).attr('href');

                    //Fade in the Popup and add close button
                    $(loginBox).fadeIn(300);

                    //Set the center alignment padding + border
                    var popMargTop = ($(loginBox).height() + 24) / 2; 
                    var popMargLeft = ($(loginBox).width() + 24) / 2; 

                    $(loginBox).css({ 
                        'margin-top' : -popMargTop,
                        'margin-left' : -popMargLeft
                    });

                    // Add the mask to body
                    $('body').append('<div id="mask"></div>');
                    $('#mask').fadeIn(300);
                    return false;
                });

                // When clicking on the button close or the mask layer the popup closed
                $('a.close, #mask').live('click', function() { 
                    $('#mask , .login-popup').fadeOut(300 , function() {
                        $('#mask').remove();  
                    }); 
                    return false;
                });
            });
        </script> 
Y aqui un extracto del div que se levanta cuando apreto el boton asociada a la funcion de arriba.

Código PHP:
<!-- popup exportacion -->
        <div id="export-box1" class="login-popup">
                    <a href="#" class="close"><img src="<?php echo base_url();?>imagen/close_pop.png" class="btn_close" title="Close Window" alt="Close" /></a>
                    <?php 
                    
echo "<fieldset class='textbox'>";
                    echo 
"EXPORTACIÓN BD";
                    echo 
"<div id='boton'>";
                    echo 
form_submit('botonSubmit''Exportar');
                    echo 
"</div>";
                    echo 
"</fieldset>";
                    echo 
form_close();
                    
?> 
        </div>
El tema es que logro hacerlo pero cuando hace la exportación el popup no cierra y lo que hacia era redireccionar a la misma pagina y daba el efecto que quería. Lo mas lógico pienso que es cerrar el popup cuando apretó el botón de submit pero no he logrado hacerlo, no soy muy bueno para javascript.
  #4 (permalink)  
Antiguo 13/01/2016, 20:26
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Problema redirección (headers already sent by)

La verdad es que me respondi un poco solo jajajaja. Agrego la siguiente funcion:

Código HTML:
<script>
function ocultar(){
document.getElementById('export-box1').style.display = 'none';}
</script> 
Y agrego esto al boton

Código PHP:
echo form_submit('botonSubmit''Exportar''onclick="ocultar()"'); 
Logro bajar el div pero esta funcion levanta un fondo plomo, trasparente al cual la funcion le llama "mask". Este no lo logro hacer desaparecer

Edito.....

Dios mio lo mareado que estaba que no lei ni mi codigo asi lo solucione:

Código HTML:
<script>
function ocultar(){
document.getElementById('export-box1').style.display = 'none';
document.getElementById('mask').style.display = 'none';}
</script> 
Gracias pateketrueke, solo me hacia falta hablar con alguien y sacarme el mareo que tenia

Etiquetas: headers
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:53.