Foros del Web » Programando para Internet » PHP »

Problema con cabeceras

Estas en el tema de Problema con cabeceras en el foro de PHP en Foros del Web. Hola, estoy haciendo un sitio de comercio y me he encontrado con el problema Warning: Cannot modify header information - headers already sent by (output ...
  #1 (permalink)  
Antiguo 25/03/2006, 17:22
 
Fecha de Ingreso: enero-2002
Ubicación: Graná
Mensajes: 646
Antigüedad: 15 años, 11 meses
Puntos: 0
Problema con cabeceras

Hola, estoy haciendo un sitio de comercio y me he encontrado con el problema

Warning: Cannot modify header information - headers already sent by (output started at I:\Archivos de programa\Apache Group\Apache2\htdocs\anchuron\carrito\carrito\clas e_carrito.php:50) in I:\Archivos de programa\Apache Group\Apache2\htdocs\anchuron\carrito\carrito\clas e_carrito.php on line 199

El código es el siguiente:

(la línea 50 es el primer echo de imprime_carrito y la 199 es la llamada a location: ver_carrito.php dentro de la función elimina_producto que es la que se llama cuando se pincha el botón de eliminar)



function imprime_carrito(){
// inicio plantilla
// include_once ('../funciones_comunes.php');
// imprime_cabecera("COMPRAS- Artículos en el carrito");
echo '<table width="753" border="0" cellpadding="0" cellspacing="0" background="'.$_SERVER['APPL_PHYSICAL_PATH'].'img/fondo_contorno.gif" bgcolor="#E9D8AA"><tr><th scope="col"><table width="725" cellspacing="0" cellpadding="5"><tr><td align="right" valign="top" class="seccion">COMPRAS- Art&iacute;culos en el carrito</td></tr><tr><td>';
//fin plantilla. Inicio programación
$num_prod=$this->num_productos;
if ($num_prod>0){
echo '<table border="0" align="center" cellpadding="3"><form name="lista_productos" action="'.$_SERVER['PHP_SELF'].'" method="post"><tr>
<td class="encabezado">Artículo</td>
<td class="encabezado">Precio/Artículo</td>
<td class="encabezado">Unidades</td>
<td class="encabezado">Total</td>
<td class="encabezado">Eliminar</td>
</tr>';
//imprimo los productos del carrito
for ($i=0, $this->total_compra=0;$i<$num_prod;$i++){
//si $_post['cantidad'.$i] no es vacío, es que el usuario está actualizando la cantidad del producto y hay que actualizar la matriz de productos para que refleje la nueva cantidad
[email protected]$_POST['cantidad'.$i];
if ((is_numeric ($num)) && ($num>=0)){
$this->producto[$i]['num_unidades']=$_POST['cantidad'.$i];
$this->producto[$i]['importe_total']=$_POST['cantidad'.$i]*$this->producto[$i]['precio'];
}
echo '<tr>
<td align="center" class="texto">'. $this->producto[$i]['nombre'] .'</td>
<td align="center" class="texto">'. number_format ($this->producto[$i]['precio'], 2, ",", ".") .'€</td>
<td align="center"><input type="text" name="cantidad'.$i.'" value="'.$this->producto[$i]['num_unidades'].'" size="5" class="campo_numeros"></td>
<td align="center" class="texto">'.number_format ($this->producto[$i]['importe_total'], 2, ",", ".").'€</td>
<td>
<img src="../../img/i_eliminar.gif" align="absmiddle"><input type="submit" name="eliminar'.$i.'" value="Eliminar" class="boton">
</td>
<input type="hidden" name="id'.$i.'" value="'.$this->producto[$i]['id'].'"></tr>';
$this->total_compra += $this->producto[$i]['precio']*$this->producto[$i]['num_unidades'];
}
//muestro el total y el total con IVA
$this->total_compra_con_iva=$this->total_compra*1.16;
echo '<tr><td colspan="5" align="center">
<img src="../../img/i_recalcular.gif" align="absmiddle"><input type="submit" name="recalcular" value="Recalcular" class="boton"> ||
<img src="../../img/i_caja.gif" align="absmiddle"><input type="submit" name="caja" value="Ir a caja" class="boton"> ||
<img src="../../img/i_compra.gif" align="absmiddle"><input type="submit" name="comprar_mas" value="Comprar más" class="boton">
</td></tr>
<tr>
<td class="precio_pequenyo">Total</td>
<td colspan="4" align="right" class="precio">'.number_format($this->total_compra, 2, ",", ".").'€+IVA='.number_format($this->total_compra_con_iva,2, ",", ".").'€</td>
</tr></form>';
//busco si se pulsó algún botón del tipo eliminar<nº> y si así es, llamo a elimina_producto con el nº que tenía el botón de eliminar
for ($i=0; $i<$num_prod; $i++)
if (isset ($_POST['eliminar'.$i]))
$_SESSION['ocarrito']->elimina_producto($i);
//si se pinchó el botón comprar, llamar a la función compra
if (isset ($_POST['caja']))
$_SESSION['ocarrito']->compra();
if (isset ($_POST['comprar_mas']))
Header ("Location: ../index.php");
}else
echo '<table align="center">
<tr><td class="texto_destacado">Su carro de la compra está vacío</td></tr>
<tr><td colspan="5" class="texto" align="center"><a href="../index.php"><img src="../../img/i_atras.gif" align="absmiddle" border="0"> Volver</a></td></tr>';
echo '</table></td></tr>';
//fin programación. Inicio plantilla
echo '</table>
</th>
</tr>
</table>';
// imprime_pie(1);
}



function elimina_producto($cual){
for ($i=$cual; $i<$this->num_productos; $i++)
$this->producto[$i]=$this->producto[$i+1];
$this->num_productos--;
header ("location: ver_carrito.php");
}


Ayuda porfa!
  #2 (permalink)  
Antiguo 25/03/2006, 18:12
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
clas e_carrito.php ?? asi se llama tu archivo?? no sabes ke los nombres de los archivos no deben llevar espacios en blanco ??, ojala sea una falla mia.

y vuelvo a repetir ya ke este problema se repite mucho y es nada extraño, no puedes enviar NADA antes de modificar las cabeceras (con funciones como setcookie(), header() o session_start()). Posiblemente tengas un espacio antes o después de abr/cerrar el modo de PHP, concretamente en el archivo login clas e_carrito.php, en la línea 50. y como tu bien dices en esa linea 50 estas haciendo un echo antes de modificar las cabeceras intenta poner en la primera linea de es archivo un session_start()

saludos
  #3 (permalink)  
Antiguo 26/03/2006, 03:06
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 15 años, 8 meses
Puntos: 0
Aprovecho el trhead, queria consultar algo que me ha pasado con cabeceras.
En PHP 4.x cuando mandas algo antes que una cabecera fuiste, te salta el error que le salta a aviana, porque ya se envio informacion antes como un echo por ejemplo o cuando queres hacer un header("location: algo.php") y lo tenes en medio del body te dice que no se puede hacer.
Ahora en PHP 5.x por lo menos en mi maquina usando la ultima version del WAMP5 en medio del body y tabas y demas, le ponia un header para redireccionar a una pagina y me funciono sin problemas, nunca me di cuenta porque eran casi mis inicios, y me tope con los errores al subir el sitio a un server con PHP 4.x
Esta es una caracteristica mas del PHP5?

Saludos.-
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #4 (permalink)  
Antiguo 27/03/2006, 00:56
 
Fecha de Ingreso: enero-2002
Ubicación: Graná
Mensajes: 646
Antigüedad: 15 años, 11 meses
Puntos: 0
Que va, el archivo se llama clase_carrito.php, sin espacios. No se porqué el apache me lo ha puesto mal. Por cierto, pruebo en otro ordenador y no me da ningún problema. No entiendo nada :(
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 16:00.