1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Error PHP: Warning: Cannot modify header information - headers already sent by

Tema en 'Programación y Diseño Web' iniciado por Apolo, 22 Ago 2006.

  1. alejandrog95

    alejandrog95 Nuevo usuario

    Sesiones con PHP y HTM

    Minervah:
    Gracias por tus respuestas.

    Seguí tus consejos y modifiqué el código del sitio de la siguiente forma...

    ventaspaso1.HTM => recoje datos y los pasa a ventaspaso1.PHP
    ventaspaso1.PHP los guarda en una sesión y avanza a ventaspaso2.HTM
    ventaspaso2.HTM => recoje más datos y los pasa a ventaspaso2.PHP
    ventaspaso2.PHP los guarda en una sesión y avanza a ventaspaso3.PHP
    ventaspaso3.PHP los muestra y si el usuario confirma los guarda en la base de datos y envía un e-mail a ventas con el pedido.

    Ahora bien, tengo el siguiente problema
    Ejemplo


    ventaspaso1.HTM
    Hago el input de los datos y se los paso a ventaspaso1.PHP


    ventaspaso1.PHP

    PHP:

    <?php

    session_start
    (); 

    $nombre      $_POST['nombre'];
    $mail        $_POST['mail'];
    $telefono    $_POST['telefono'];
    $direccion   $_POST['direccion'];
    $CP          $_POST['CP'];
    $localidad   $_POST['localidad'];
    $provincia   $_POST['provincia'];

    $comollego   $_POST['comollego'];
    $horarios    $_POST['horarios'];
    $comentarios $_POST['comentarios'];


    // Guardo las variables de sesión
    $_SESSION['nombre']      = $usuario;
    $_SESSION['mail']        = $mail;
    $_SESSION['telefono']    = $telefono;
    $_SESSION['direccion']   = $direccion;
    $_SESSION['CP']          = $CP;
    $_SESSION['localidad']   = $localidad;
    $_SESSION['provincia']   = $provincia;

    $_SESSION['comollego']   = $comollego;
    $_SESSION['horarios']    = $horarios;
    $_SESSION['comentarios'] = $comentarios;

    header('Location: ventaspaso2.htm');
    ?>


    Ahora bien...
    Si SUPRIMO el header() y lo reemplazo por
    PHP:
    echo $_REQUEST['nombre']; 
    me muestra el nombre ingresado ( o sea, todo bien ).
    Pero si cambio el $_REQUEST POR $_SESSION, NO MUESTRA NADA.

    Por lo tanto, cuando ejecuta la última sentencia header(), NO MANTIENE LAS VARIABLES GUARDADAS EN $_SESSION().


    Si tomo nuevos datos en ventaspaso2.HTM y los paso a ventaspaso2.PHP

    ventaspaso2.PHP


    PHP:
    session_start(); 

    if (
    $_SESSION['nombre'] ==NULL )
    {   
    header("refresh:3;url=ventaspaso1.htm");
         die(
    "Ingreso incorrecto a paso2.");
    }


    ...entra por el die() porque el if() le devuelve FALSO.

    Por ende, no está guardando en la $_SESSION() el primer campo que ingresé ( nombre ). De hecho, entiendo que no guarda ninguno...


    El session_start(); lo tengo en cada comienzo de los .PHP ( pero no en el ventaspaso2.HTM ) y aunque lo agregue, tampoco mantiene los valores de $_SESSION().


    Podrás ayudarme y/o explicarme por qué ?
    Gracias.
    Alejandrog95 :crap:
     
    Última edición: 27 Mar 2008
  2. ideasmultiples

    ideasmultiples Usuario activo

    Estas recogiendo en la variable $nombre

    $nombre = $_POST['nombre'];

    y guardando desde $usurio que no tienen ninguna asignacióin.

    $_SESSION['nombre'] = $usuario;
     
  3. nostromo007

    nostromo007 Nuevo usuario

    Hola! Con el permiso de todos los que han preguntado antes (me pongo en fila para la respuesta), yo también tenía el mismo problema. Siguiendo vuestras instrucciones ahora el esquema de mi web es más o menos así:
    <?php introduzco los headers>
    <Pongo el código HTML de mi web>
    <?php cuando llega el lugar en la web donde quiero que aparezca, introduzco el código php de la aplicación que llama a otros archivos, q es un sencillo blog>
    <Continúo con el resto del código de HTML>

    Pues bien, esto funciona bien, sin errores, pero cuando en el blog llega el momento de autentificarse, vuelve a salir el dichoso error de no poder modificar los headers.
    Buscando la línea donde sale el error, os pongo la susodicha y lo que le rodea:

    if ($user = $db->fetch($sql)) {
    // Login OK
    $_SESSION['user'] = $user;
    $referer = $_SESSION['referer'];
    unset($_SESSION['referer']);
    header('Location: ' . $referer);
    exit();

    Así para concluir, el error me indica que los headers ya fueron introducidos en la página principal (la que he esquematizado arriba) justo cuando pongo lo primero en HTML que aparece en pantalla. Y ya me pierdo, es como si los headers que mando con el php del principio, fueran sobreescritos con los del html, y para cuando se llama al otro archivo php, ya volvemos a empezar.

    Espero haberme explicado bien. No tengo apenas conocimientos de php (el código del blog es libre, no es mio, yo solo lo he aplicado) y no me siento capaz de encontrar solución.

    Como alternativas, he intentado usar un iframe, pero mi web utiliza CSS y no queda nada nada bien, sobre todo pq el iframe no se ajusta al contenido del php.

    Y ya, gracias a todos los que nos ayudais :D
     
  4. ideasmultiples

    ideasmultiples Usuario activo

    Los header se deben enviar ANTES de cualquier otra cosa, por cierto si te da ese error en un foro comercial, mejor cambia de foro.

    Si quieres corregirlo lo que debes haces es primero ejecutar la rutina de autentificación y despues enviar los header.
     
  5. nostromo007

    nostromo007 Nuevo usuario

    No he entendido muy bien tu respuesta, la verdad. supongo que me respondias a mi, no lo tengo muy claro.
    Respecto a eso del foro, no es un foro, y tampoco es comercial. Simplemente es una aplicación php que forma un blog que kiero hacer funcionar.
    Respecto a lo de enviar antes los headers, creo que he explicado en el esquema que los envio lo primero. De todas formas intentaré explicarme mejor.

    La aplicacion es un blog NO COMERCIAL. Consta de una serie de archivos php, tpl y dos librerias.
    Tiene un archivo inicial que se llama INDEX.PHP y lanza la aplicacion.
    Funciona estupendamente hasta que antes del codigo php del archivo INDEX.PHP introduzco codigo html.
    Por ello, ANTES de mi primer post, ya solucione el tema mandando los headers del php LO PRIMERO del archivo.
    Con esto, al cargar INDEX.PHP no da errores, ya que los headers se han mandado ANTES que nada.

    El problema viene cuando la aplicacion PHP utiliza el codigo de OTRO archivo PHP que contiene esto

    if ($user = $db->fetch($sql)) {
    // Login OK
    $_SESSION['user'] = $user;
    $referer = $_SESSION['referer'];
    unset($_SESSION['referer']);
    header('Location: ' . $referer)
    exit();

    Este es un archivo DISTINTO a INDEX.PHP, pero el error de los headers hace referencia a que se enviaron con la primera linea de HTML de INDEX.PHP, mientras que siguiendo vuestras instrucciones se enviaron en la primera linea de la pagina.

    Ideasmultiples, supongo que cuando en el post anterior me decias que enviara los headers lo primero te referias a la linea que he resaltado.
    Si era asi, en primer lugar no creo que el codigo funcionara si pusiera esa linea la primera del archivo, pero en segundo lugar, no dice que ESE archivo mandara los headers, sino que lo mando el otro, INDEX.PHP.
    Por cierto, no entiendo
    Es que ando algo corto de php... :-(
    Ah, y gracias por responder :-D
     
  6. ideasmultiples

    ideasmultiples Usuario activo

    Lo de los foros, me confundí en vez de poner blog, pero no tiene nada que ver con la respuesta.

    El problema es que cuando usas la rutina de autentificacion
    Vuelves a enviar los header nuevamente si el usuario es correcto.

    Por eso te decía que primero hagas la rutina de atentificación, porque si tienes que volver a enviar los Header y vuelves a tener el problema.

    Tu solución más facil es que en vez de enviar de nuevo al index directamente lo pongas un link para que pulse donde ir.

    El prtoblema real es que si envías 2 veces un header el conjunto del programa de PHP y las autentificaciones están MAL diseñadas.

    Es muy dificil ayudarte más sin ver el resto del código completo, pero parece que vas a tener que redifinir la entrada y la autentificación antes de empezar a enviar headers.
     
  7. nostromo007

    nostromo007 Nuevo usuario

    Jeje oki, asi ya lo entiendo, gracias :D. No he puesto más código pq entiendo que ya la cosa pasaría de ser una simple duda a ser un hilo para solucionarme los problemas XD
    Voy a intentar aprender un poco más a ver si consigo llegar a las soluciones que me propones. Más que na es que claro es código libre y no lo he hecho yo, asi que mis conocimientos están muy por debajo y las modificaciones las hago casi a ciegas.
    Entiendo que lo que me comentas es que antes de cargar visualmente el blog se haga la autentificación y así luego no haya problemas con los headers. El tema de autentificar primero, es que al ser un blog el login sale al clickear en el link, y por tanto ese fragmento de código va aparte. Así que esta solución la veo un poco difícil (más que nada con mis conocimientos)

    Pero veo más sencilla la de poner un link de vuelta. No interferiría en el funcionamiento del blog tener que clickear en un "Login correcto" o algo así y volver.

    Lo único que no entiendo es pq el blog funciona perfectamente si kito todo el html del principio. Pero bueno para responder eso tendriais que miraros el código y no es plan de ir por ahí repartiendoos trabajo XD.

    Muchas gracias otra vez, intento solucionarlo y os digo.
     
  8. nostromo007

    nostromo007 Nuevo usuario

    Pues lo estoy mirando, y no se como poner un link.
    Pero el problema del código es que después de la identificación tengo que cargar de nuevo el blog de alguna forma. Si tal como está diseñado, los headers no pueden volver a mandarse, y yo no sabría como modificar toda la estructura, sólo queda lo del link. Pero no se como poner un link :(
    Lo intento eliminando la linea de los headers , y añadiendo al final del archivo el código html básico para poner un link, y na de na.

    Supongo que sera porque ese archivo es un controlador y la propia estructura lo llamará de alguna forma que desconozco.

    En resumen, no se como poner el link :crap:
     
  9. Victoria7885

    Victoria7885 Nuevo usuario

    Ayuda!

    hola porfavor!!

    necesito d su ayuda tengo q instalar un sistemita ya hecho.. pero me marca el error de Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\xampp\htdocs\xampp\newphp\res_inicio.php:5) in C:\Program Files\xampp\htdocs\xampp\newphp\res_inicio.php on line 14

    cual es el error??? no entiendo ya intente de todo gracias
    ahh soy nueva en php disculpen mi ignorancia

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>ACCESO</title>
    <? include ("res_conexion.php");?>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <? session_start();
    $_SESSION["autentificado"]= "NO";
    session_destroy();
    ?>

    <form action="res_procesa_acceso2.php" method="post" enctype='multipart/form-data'>
    <TR>
    <TD>
    <TABLE cellSpacing=0 cellPadding=0 width=206 border=0 align="center">
    <!--DWLayoutTable-->
    <TBODY align="center">
    <tr>
    <td height="185" colspan="3" valign="top"> <img src="header.jpg">
    </td>
    <td width="1">&nbsp;</td>
    </tr>
    <tr bgcolor="#FFFFFF">
    <td height="32" colspan="4" align="center" valign="top"></td>
    </tr>
    <tr bgcolor="#FFFFFF">
    <td height="12" colspan="4" align="center" valign="top"><img src="search_01.gif" width="208"></td>
    </tr>
    <TR>
    <TD width="391" height="24" align="right" valign="top" bgcolor="#FFFFFF"><img src="search_02.gif" width="10" height="24"></TD>
    <TD width="186" align="center" valign="top" ><b>Ingrese su clave</TD>
    <TD colSpan=2 align="left" valign="top" bgcolor="#FFFFFF"><img src="search_04.gif" width="10" height="24"></TD>
    <TR bgcolor="#FFFFFF">
    <TD height="6" colSpan=4 align="center" valign="middle"><img height=6 alt="" src="search_09.gif" width=208></TD>
    </TR>
    <tr>
    <TD height="22" align="right" valign="top" bgcolor="#FFFFFF"><!--DWLayoutEmptyCell-->&nbsp;</TD>
    <TD align="center" valign="top" bgcolor="#FFFFFF" >
    <input type="Text" name="clave" size="8" maxlength="5" ></TD>
    <TD colspan="2" valign="top" bgcolor="#FFFFFF"><!--DWLayoutEmptyCell-->&nbsp;</TD>
    <TR bgcolor="#FFFFFF">
    <TD height="12" colSpan=4 align="center" valign="top"><IMG src="search_01.gif" width=206></TD>
    </TR>
    <TR>
    <TD height="24" valign="top" align="right" width="392" bgcolor="#FFFFFF"><img src="search_02.gif" width="10" height="24"></TD>
    <TD align="center" valign="top" width="186"><b>Contraseña</b></TD>
    <TD colspan="2" valign="top" bgcolor="#FFFFFF" align="left"><img src="search_04.gif" width="10" height="24"></TD>
    </TR>
    <TR bgcolor="#FFFFFF">
    <TD height="6" colspan="4" align="center" valign="top"><IMG height=6 alt="" src="search_09.gif" width=206></TD>
    </TR>
    <TR bgcolor="#FFFFFF">
    <TD height="22" colspan="4" align="center" valign="top">
    <input type="password" name="psw" size="8" maxlength="50"></TD>
    </TR>
    <tr bgcolor="#FEFEFE">
    <td height="40" valign="middle" colspan="1" align="right"><strong>MATERIA:</strong></td>
    <? $sql="SELECT * FROM materias order by nombre;";
    $resultado_set = pg_Exec ($conexion, $sql);
    $filas = pg_NumRows($resultado_set);

    ?>
    <td align="left" valign="middle" colspan="2"><select name="materia" size="1" >
    <? for ($ii=0; $ii<($filas) ; $ii++)
    {
    echo '<option> '.pg_result($resultado_set, $ii, 1).'';
    }


    ?>
    </select> </tr>
    <TR bgcolor="#FFFFFF">
    <TD height="74" colspan="4" align="center" valign="middle">
    <input type="Submit" value="ENTRAR">
    </TD>
    </TR>
    <tr bgcolor="#FFFFFF">
    <td height="80" colspan="4" valign="top">
    <? if($_GET)
    {
    $a= $_GET['a'];
    if($a==1)
    echo "<br><b><font color= #F0000> contraseña equivocada</font></b>";
    else
    echo "<br><b><font color= #F0000> la clave no existe</font></b>";
    }
    else
    echo "<br>";?>
    </td>
    </tr>

    </TBODY>
    <tr>
    <td height="17" colspan="4" align="center" valign="top"><img src="barrabaja.gif"></td>
    <tr>
    <td height="1"><a href="res_inicio_estudiantes.php">&nbsp;</a></td>
    <td></td>
    <td width="388"></td>
    <td></td>
    </tr>
    </TABLE>
    </form>

    </body>
    </html>
     
  10. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Hola Victoria7885,

    Te recomiendo que revises al comienzo del tema, junto con todas las recomendaciones que se han hecho posteriormente.

    Saludos,
     
  11. javier14

    javier14 Nuevo usuario

    necesito ayuda

    este es mi código:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>imagen</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>

    <?php

    # Configurar las dos lineas siguientes

    @mysql_connect('localhost','usuario','contraseña') or die('No se puede conectar con el servidor mysql');

    @mysql_select_db('base_datos') or die('No se puede seleccionar la base de datos especificada');

    $datos = ($_GET['id']) ? 'id=' . mysql_escape_string($_GET['id']) : "nombre='" . mysql_escape_string($_GET['nombre']) . "'";

    $resultado = @mysql_query("SELECT imagen,tipo FROM subir_imagenes WHERE " . $datos);

    $imagen = @mysql_fetch_assoc($resultado) or die('Imagen inexistente');

    header("Content-type: $imagen[tipo]");

    print $imagen['imagen'];

    ?>
    </body>
    </html>
    y el error es:

    Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\vhosts\loschoposdelrealtesoro.com\httpdocs\imgs\ejemplo2\imagen.php:11) in C:\Inetpub\vhosts\loschoposdelrealtesoro.com\httpdocs\imgs\ejemplo2\imagen.php on line 27

    Ya me ha aparecido este error con otros códigos y siempre en la utilización del header, he leido los demás soluciones pero no las entiendo bien.
    La página es muy simple , enseña una imagen que hay en la base de datos.
    Les estaría muy agradecido si pudieran ayudarme.
     
  12. ideasmultiples

    ideasmultiples Usuario activo

    No puedes enviar un header("Content-type: $imagen[tipo]");
    Si antes ya has enviado la cabecera en el mismo script...
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
     
  13. touring

    touring Nuevo usuario

    Me sale el error Error PHP: Warning: Cannot modify header information

    Hola soy nuevo en php, tengo un formulario de contacto que al llamarlo desde otra pagina con un <?php include("contacto.php"); ?> al enviar el form me da el error "Warning: Cannot modify header information - headers already sent by (output started at..."

    Cual puede ser el problema?

    A continuación pongo el codigo del formulario:

    Gracias!
    ......................................................................................

    <?php
    @putenv("TZ=Europe/Paris");
    //ERROR_REPORTING(E_ALL);
    //-----------------------

    $mail_destino='tuemail@tuemail.com';

    //Aqui coloca el mensaje que quieres que aparesca como titulo del mail.
    $titulo="Mensaje desde el formulario de contacto de tu web";

    //********************************************
    $msg="";
    $email_form="";
    $nombre_form="";
    $mensaje_form="";


    if(isset($_POST['nombre'])){

    $email_form=$_POST['email'];
    $nombre_form=$_POST['nombre'];
    $mensaje_form=$_POST['mensaje'];

    /*Aqui verificamos si nos estan haciendo spam */
    function verificar_spam($verificar) {
    $msg="";
    $palabras_prohibidas = array(
    "content-type:"
    ,"mime-version:"
    ,"multipart/mixed"
    ,"Content-Transfer-Encoding:"
    ,"bcc:"
    ,"cc:"
    ,"to:" );

    foreach($palabras_prohibidas as $palabra) {
    if(eregi($palabra, strtolower($verificar))) {
    $msg.= "Se encontro una palabra prohibida <b><u>$palabra</u></b> en el nombre o Email<br />";
    }
    }

    if(preg_match("/(%0A|%0D|\\n+|\\r+)/i", $verificar) != 0) {
    $msg.= "El nombre o Email no pude contener saltos de linea <br />";
    }
    return $msg;
    }


    $msg.=verificar_spam($email_form);
    $msg.=verificar_spam($nombre_form);

    /*Aqui termina la la verificacion de spam */

    /*Aqui verificamos los campos del formulario */

    if($email_form != "")
    {
    $email_form=trim($email_form);
    if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$", $email_form))
    $msg.="Tu E-mail es invalido <br />";
    }else
    $msg.="Tu e-mail es obligatorio <br />";

    if($nombre_form != ""){
    $nombre_form=trim($nombre_form);
    if(!preg_match("/^[\w\s_]+$/",$nombre_form))
    $msg.="El nombre no es valido <br />";
    }else
    $msg.="Tu nombre es obligatorio <br />";

    if($mensaje_form == "") $msg.="El mensaje es obligatorio <br />";


    if($msg == ""){
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "From: ".$email_form."\n";
    $headers .= "To: ".$mail_destino."\n";
    $headers .= "Reply-To: ".$email_form."\n";
    $headers .= "Return-Path: ".$email_form."\n";
    $headers .= "X-Priority: 1\n";
    $headers .= "X-Mailer:pHP ".phpversion()."\n";
    $headers .= "Content-Type: text/plain; charset=iso-8859-1";
    $contenido="Te han enviado un mensaje ".$nombre_form." desde el formulario de contacto de tu web \r\n";
    $contenido.="Nombre: ".$nombre_form."\r\n";
    $contenido.="Email: ".$email_form."\r\n";
    $contenido.="Mensaje: ".$mensaje_form."\r\n";

    if(mail($mail_destino, $titulo, $contenido, $headers))
    {
    header("location:".$_SERVER['PHP_SELF']."?ok=ok");

    }
    else
    $msg.="Ocurrio un error al enviar el mensaje";

    }

    }
    if(isset($_GET['ok'])) $msg="El mensaje se ha enviado correctamente";

    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Formulario Contacto </title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style type="text/css">
    .texto{color:#42606C;font-weight:bold;font-family: Geneva, Arial, Helvetica, sans-serif;}
    body td,form {font-family:verdana;font-size:11px;color:#535353;}
    form input,textarea{margin-bottom:4px;font-size:11px;background-color:#F0F0F0;border:1px solid #C0C0C0;}
    .boton {color:#FFFFFF;height:20px;width:55px;border:1px solid #698B9A;background-color:#8BA6B1;font-size:11px;font-weight:bold;}
    </style>
    </head>
    <body>
    <table cellspacing='2' cellpadding='2'>
    <tr>
    <td>
    <!-- Formulario de contacto creado por VictorCL , descargatelo en www.victorcl.com -->
    <span style='font-size:11px;font-weight:bold;color:#F20000;'><?php echo $msg; ?></span>

    </td>
    </tr>
    <tr>
    <td>
    <form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
    <span class='texto'>* Nombre:</span><br />
    <input type='text' name='nombre' size='28' value="<?php echo $nombre_form;?>"/><br />
    <span class='texto'>* Tu email:</span><br />
    <input type='text' name='email' size='28' value="<?php echo $email_form;?>" /><br />
    <span class='texto'>* Mensaje:</span><br />
    <textarea name='mensaje' rows='10' cols='20'><?php echo $mensaje_form;?></textarea><br />
    <input type='submit' value='Enviar' class='boton' />
    </form>
    </td>
    </tr>
    </table>
    </body>
    </html>
     
  14. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Es porque NO SE PUEDEN enviar cabeceras si ya las has enviado antes desde otro archivo. Si lees cuidadosamente el hilo del tema, ojalá desde el principio, encontrarás una luz al respecto.

    Saludos,
     
  15. aventura4ever

    aventura4ever Nuevo usuario

    Hola, yo soy un novato en esto del php y siempre aprendo algo nuevo... gracias a Apolo por la solución # 3 :-D

    Salu2

    PD: una vez que me registre el orden de los mensajes se invirtieron eso me confundió mucho :golpe: después ya lo pille.
     
  16. charles_015

    charles_015 Nuevo usuario

    yo pude solucionar ese warning, solo hay que poner el script de php antes de las etiquetas de html, y asi desaperece el warning
    <?php
    MI SCRIPT
    <?
    <html>....</html>
    prueben esta pequeña solucion
     
  17. juankysmith

    juankysmith Nuevo usuario

    Exportar a Excel

    Hola, ¿qué tal?

    He estado mirando la solución que propusiste creando un archivo php externo que contiene exclusivamente el siguiente código para exportar de PHP a Excel:

    <?php
    header("Content-type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
    header("Pragma: public");
    echo '<table border="1">';
    echo '<tr>';
    echo '<th>Nombre</th>';
    echo '<th>Email</th>';
    echo '</tr>';
    echo '<tr>';
    echo '<td><font>juanky</font></td>';
    echo '<td>hey@hey.com</td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td><font>weeee</font></td>';
    echo '<td>test@hey.com</td>';
    echo '</tr>';
    echo '</table>';
    ?>


    al cual convoco desde otro HTML con la siguiente llamada:

    <?php $link2 = JFilterOutput::ampReplace( JURI::root()."exportDatos.php" ); ?>
    <a target="_blank" href="<?php echo $link2 ?>" >
    </a>


    al ejecutarlo da el siguiente error:

    Warning: Cannot modify header information - headers already sent by (output started at /home/admin/www/exportDatos.php:1) in /home/admin/www/exportDatos.php on line 2

    Warning: Cannot modify header information - headers already sent by (output started at /home/admin/www/exportDatos.php:1) in /home/admin/www/exportDatos.php on line 3

    ...


    He estado buscando soluciones por distintos foros y manuales pero no me sirve ninguna:
    1. No tengo espacios después del cierre de php '?>'
    2. No ejecuto salidas de tipo echo o print antes de modificar lo headers.
    3. He usado las funciones ob_start(); y ob_flush(); antes y después de ejecutar el script respectivamente.

    No se donde mando los headers antes de ejecutar el script.

    ¿Hay alguna manera de evitar este warning?

    Gracias!!
     
  18. Si llamas un PHP desde un HTML no procesara dicha llamada, ya que para que procese, el PHP tiene que llamarse desde otro archivo PHP y no HTML.

    Llamar un PHP desde un HTML, al ser HTML el segundo no ejecuta el código PHP.

    Puedes ver: http://www.webestilo.com/foros/mensaje.phtml?foro=3&msg=40622

    Saludos,
     
  19. Minervah

    Minervah Usuario activo

    ¿Ese html ha enviado antes de llamar al php algo al navegador?

    Cuando se usa header() no se puede enviar antes nada al navegador del visitante, ni un espacio en blanco.
     
  20. juankysmith

    juankysmith Nuevo usuario

    Export a Excel

    Hola compañer@s, resulta que al abrir mi fichero .php con las instrucciones header usando otro editor había caracteres "basura" antes de '<?php'

    Y perdonen, me expresé mal, la llamada al php externo la hacía desde otro fichero php

    Ahora el problema resulta que este php externo no me reconoce la función JRequest::getVar() ni cualquiera que le ponga!! .... ni siquiera reconoce los jimport!!!

    ¿Saben a qué puede ser debido?
    Gracias
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·