Foros del Web » Programando para Internet » PHP »

problema con carrito

Estas en el tema de problema con carrito en el foro de PHP en Foros del Web. Hola, esto instalando este script http://www.programacionweb.net/artic...67#comentarios para un carro y me da este error: Warning: session_start(): Cannot send session cache limiter - headers already sent ...
  #1 (permalink)  
Antiguo 07/11/2005, 08:51
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
problema con carrito

Hola, esto instalando este script http://www.programacionweb.net/artic...67#comentarios para un carro y me da este error:


Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home//domains//public_html/borracar.php:1) in /home//domains/public_html/borracar.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /home//domains/.com.ar/public_html/borracar.php:1) in /home//domains//public_html/borracar.php on line 13

Código PHP:
 <?php 
session_start
(); 
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada 
extract($_GET); 
//Como antes, usamos extract() por comodidad, pero podemos no hacerlo tranquilamente 
$carro=$_SESSION['carro']; 
//Asignamos a la variable $carro los valores guardados en la sessión 
unset($carro[md5($id)]); 
//la función unset borra el elemento de un array que le pasemos por parámetro. En este 
//caso la usamos para borrar el elemento cuyo id le pasemos a la página por la url 
$_SESSION['carro']=$carro
//Finalmente, actualizamos la sessión, como hicimos cuando agregamos un producto y volvemos al catálogo 
header("Location:catalogo.php?".SID); 
?>
Código PHP:
<?php 
session_start
();
//Iniciamos o retomamos la sesión
$carro=$_SESSION['carro'];
//La asignamos a la variable $carro
?>
<html>
<head>
<title>PRODUCTOS AGREGADOS AL CARRITO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.tit {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 9px;
    color: #FFFFFF;
}
.prod {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 9px;
    color: #333333;
}
h1 {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 20px;
    color: #990000;
}
-->
</style>
</head>

<body>

<h1 align="center">Carrito</h1>
<?php 
if($carro){
//si el carro no está vacío, mostramos los productos
?>
<table width="720" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr bgcolor="#333333" class="tit"> 
    <td width="105">Producto</td>
    <td width="207">Precio</td>
    <td colspan="2" align="center">Cantidad de Unidades</td>
    <td width="100" align="center">Borrar</td>
    <td width="159" align="center">Actualizar</td>
  </tr>
  <?php
  $color
=array("#ffffff","#F0F0F0");
  
$contador=0;
  
//las 2 líneas anteriores sirven para hacer una tabla con colores alternos
  
$suma=0;
  
//antes de recorrer todos los valores de la matriz carro, ponemos a cero la variable $suma,
  //en la que iremos sumando los subtotales del costo de cada item por la cantidad de unidades que se especifiquen
   
foreach($carro as $k => $v){
   
//recorremos la matriz que tiene todos los valores del carro, calculamos el subtotal y el total
   
$subto=$v['cantidad']*$v['precio'];
   
$suma=$suma+$subto;
   
$contador++;//este es el contador que usamos para los colores alternos
    
?>
  <form name="a<?php echo $v['identificador'?>" method="post" action="agregacar.php?<?php echo SID ?>" id="a<?php echo $v['identificador'?>">
    <tr bgcolor="<?php echo $color[$contador%2]; ?>" class='prod'> 
      <td><?php echo $v['producto'?></td>
      <td><?php echo $v['precio'?></td>
      <td width="43" align="center"><?php echo $v['cantidad'?></td>
      <td width="136" align="center"> 
        <input name="cantidad" type="text" id="cantidad" value="<?php echo $v['cantidad'?>" size="8">
        <input name="id" type="hidden" id="id" value="<?php echo $v['id'?>"> </td>
      <td align="center"><a href="borracar.php?<?php echo SID ?>&id=<?php echo $v['id'?>"><img src="trash.gif" width="12" height="14" border="0"></a></td>
      <td align="center"> 
        <input name="imageField" type="image" src="actualizar.gif" width="20" height="20" border="0"></td>
  </tr></form>
  <?php 
  
//por cada item creamos un formulario que submite a agregar producto y un link que permite eliminarlos
  
}?>
</table>
<div align="center"><span class="prod">Total de Artículos: <?php echo count($carro);
//el total de items va a ser igual a la cantidad de elementos que tenga la matriz $carro, valor que obtenemos con la
//función count o con sizeof
?></span> 
</div><br>
<div align="center"><span class="prod">Total: $<?php echo number_format($suma,2);
//mostramos el total de la variable $suma formateándola a 2 decimales
 
?></span> 
</div><br>
<div align="center"><span class="prod">Continuar la selección de productos</span> 
  <a href="catalogo.php?<?php echo SID;?>"><img src="continuar.gif" width="13" height="13" border="0"></a> 
</div>
 
<?php }else{ ?>
<p align="center"> <span class="prod">No hay productos seleccionados</span> <a href="catalogo.php?<?php echo SID;?>"><img src="continuar.gif" width="13" height="13" border="0"></a> 
  <?php }?>
</p>
</body>
</html>
Código PHP:
<?php 
ob_start
("ob_gzhandler"); 
//Las funciones ob_start y ob_end_flush te permiten escojer en qué momento enviar el resultado 
// de un script al navegador. Si no las utilizamos estamos 
//obligados a que nuestra primera línea de código sea session_start() u obtendremos un error 
session_start(); 
//conectamos a la base de datos 
mysql_connect("localhost","",""); 
mysql_select_db(""); 
//rescatamos los valores guardados en la variable de sesión (si es que hay alguno) y los 
//asignamos a $carro 
$carro=$_SESSION['carro']; 
//y hacemos la consulta 
$qry=mysql_query("select * from catalogo order by producto asc"); 
?> 
<html> 
<head> 
<title>CAT&Aacute;LOGO</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<style type="text/css"> 
<!-- 
.catalogo { 
 font-family: Verdana, Arial, Helvetica, sans-serif; 
 font-size: 9px; 
 color: #333333; 

--> 
</style> 
</head> 
<body> 
<table width="272" align="center" cellpadding="0" cellspacing="0" style="border: 1px solid #000000;"> 
 <tr valign="middle" bordercolor="#FFFFFF" bgcolor="#DFDFDF" class="catalogo"> 
 <td width="170"><strong>Producto</strong></td> 
 <td width="77"><strong>Precio</strong></td> 
 <td width="25" align="right"><a href="vercarrito.php?<?php echo SID ?>" title="Ver el contenido del carrito"><img src="vercarrito.gif" width="25" height="21" border="0"></a></td> 
 </tr> 
 <?php 
 
//mostramos todos nuestros artículos, viendo si han sido agregados o no a nuestro carro de compra 
 
while($row=mysql_fetch_assoc($qry)){ 
 
?> 
 <tr valign="middle" class="catalogo"> 
 <td><?php echo $row['producto'?></td> 
 <td><?php echo $row['precio'?></td> 
 <td align="center"><?php 
 
if($carro[md5($row['id'])]['identificador']!=md5($row['id'])){ 
 
//si el producto no ha sido agregado, mostramos la imagen de no agregado, linkeada 
 // a nuestra página de agregar producto y transmitíéndole a dicha 
 //página el id del artículo y el identificador de la sesión 
 
?><a href="agregacar.php?<?php echo SID ?>&id=<?php echo $row['id']; ?>"><img src="productonoagregado.gif" border="0" title="Agregar al Carrito"></a><?php 
 else 
 
//en caso contrario mostramos la otra imagen linkeada., a la página que sirve para borrar el artículo del carro. 
 
{?><a href="borracar.php?<?php echo SID ?>&id=<?php echo $row['id']; ?>"><img src="productoagregado.gif" border="0" title="Quitar del Carrito"></a><?php ?></td> 
 </tr><?php ?> 
</table> 
</body> 
</html> 
<?php 
ob_end_flush
(); 
?>
  #2 (permalink)  
Antiguo 07/11/2005, 10:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El mensaje de error te dice que:

Cita:
output started at /home//domains//public_html/borracar.php:1)
En la línea 1 de "borracar.php" tienes alguna salida al navegador: puede ser un simple espacio antes de <? .. o un salto de línea antes de <? .. o algo de HTML por médio .. o un echo "algo".

PD: .. estás comprimiendo la página?:

Código PHP:
ob_start("ob_gzhandler"); 
//Las funciones ob_start y ob_end_flush te permiten escojer en qué momento enviar el resultado 
// de un script al navegador. Si no las utilizamos estamos 
//obligados a que nuestra primera línea de código sea session_start() u obtendremos un error 
session_start(); 
Ya tienes estructurado tu código bien .. con el requisito de "session_Start()" antes de cualquier salida al navegador (no necesariamente la primera línea! .. como dice el comentario .. sino de -antes- de cualquier salida ... y el "error" que dice es lo que obtienes por no cumplir el requisito que te menciono más arriba).

Un saludo,
  #3 (permalink)  
Antiguo 07/11/2005, 11:09
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Graias cluster y van..., ahora te hago una consulta mas, como puedo hacer para que una vez realizada la "compra" esta quede dentro de un formulario para que la envíen a mi correo? ya que solo lo usaremos como para hacer ordenes de pedido o compras y no compras reales por transferencia.

este es el archivo vercarrito.php

Código PHP:
<?php 
session_start
();
//Iniciamos o retomamos la sesión
$carro=$_SESSION['carro'];
//La asignamos a la variable $carro
?>
<html>
<head>
<title>PRODUCTOS AGREGADOS AL CARRITO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.tit {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 9px;
    color: #FFFFFF;
}
.prod {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 9px;
    color: #333333;
}
h1 {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 20px;
    color: #990000;
}
-->
</style>
</head>

<body>

<h1 align="center">Carrito</h1>
<?php 
if($carro){
//si el carro no está vacío, mostramos los productos
?>
<table width="720" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr bgcolor="#333333" class="tit"> 
    <td width="105">Producto</td>
    <td width="207">Precio</td>
    <td colspan="2" align="center">Cantidad de Unidades</td>
    <td width="100" align="center">Borrar</td>
    <td width="159" align="center">Actualizar</td>
  </tr>
  <?php
  $color
=array("#ffffff","#F0F0F0");
  
$contador=0;
  
//las 2 líneas anteriores sirven para hacer una tabla con colores alternos
  
$suma=0;
  
//antes de recorrer todos los valores de la matriz carro, ponemos a cero la variable $suma,
  //en la que iremos sumando los subtotales del costo de cada item por la cantidad de unidades que se especifiquen
   
foreach($carro as $k => $v){
   
//recorremos la matriz que tiene todos los valores del carro, calculamos el subtotal y el total
   
$subto=$v['cantidad']*$v['precio'];
   
$suma=$suma+$subto;
   
$contador++;//este es el contador que usamos para los colores alternos
    
?>
  <form name="a<?php echo $v['identificador'?>" method="post" action="agregacar.php?<?php echo SID ?>" id="a<?php echo $v['identificador'?>">
    <tr bgcolor="<?php echo $color[$contador%2]; ?>" class='prod'> 
      <td><?php echo $v['producto'?></td>
      <td><?php echo $v['precio'?></td>
      <td width="43" align="center"><?php echo $v['cantidad'?></td>
      <td width="136" align="center"> 
        <input name="cantidad" type="text" id="cantidad" value="<?php echo $v['cantidad'?>" size="8">
        <input name="id" type="hidden" id="id" value="<?php echo $v['id'?>"> </td>
      <td align="center"><a href="borracar.php?<?php echo SID ?>&id=<?php echo $v['id'?>"><img src="trash.gif" width="12" height="14" border="0"></a></td>
      <td align="center"> 
        <input name="imageField" type="image" src="actualizar.gif" width="20" height="20" border="0"></td>
  </tr></form>
  <?php 
  
//por cada item creamos un formulario que submite a agregar producto y un link que permite eliminarlos
  
}?>
</table>
<div align="center"><span class="prod">Total de Artículos: <?php echo count($carro);
//el total de items va a ser igual a la cantidad de elementos que tenga la matriz $carro, valor que obtenemos con la
//función count o con sizeof
?></span> 
</div><br>
<div align="center"><span class="prod">Total: $<?php echo number_format($suma,2);
//mostramos el total de la variable $suma formateándola a 2 decimales
 
?></span> 
</div><br>
<div align="center"><span class="prod">Continuar la selección de productos</span> 
  <a href="catalogo.php?<?php echo SID;?>"><img src="continuar.gif" width="13" height="13" border="0"></a> 
</div>
 
<?php }else{ ?>
<p align="center"> <span class="prod">No hay productos seleccionados</span> <a href="catalogo.php?<?php echo SID;?>"><img src="continuar.gif" width="13" height="13" border="0"></a> 
  <?php }?>
</p>
</body>
</html>
  #4 (permalink)  
Antiguo 07/11/2005, 11:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
ahora te hago una consulta mas, como puedo hacer para que una vez realizada la "compra" esta quede dentro de un formulario para que la envíen a mi correo?
No entendí eso .. ¿Para que quieres el "formulario" (supongo que hablaremos de un form HTML: <form .... ></form>?) ? .. envia la orden de compra directamente leyendo los datos de tu sesión generando el e-mail a enviar.

Un saludo,
  #5 (permalink)  
Antiguo 07/11/2005, 13:34
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
si lo ideal sería poner la página vercarrito.php dentro de un formulario y un submit a mi mail, pero no logro hacerlo, o enviar a un formu de envío esos datos mostrados sería por metodo GET?
He leído info por todos lados, pero todos los carritos pre-diseñados terminan ahí, ninguno te da la opción de enviarlos datos vía mail. Veré que puedo hacer y les consulto. gracias cluster.
  #6 (permalink)  
Antiguo 07/11/2005, 14:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Insito que no sé para que quieres el "formulario" .. a lo sumo una "confirmación" leyendo los datos de tu carrito para que añada a lo sumo (eso sí sería con un formulario) donde el usuario quiere tal vez que le envien respuesta de su cotización o algo similar (por qué lo ideal sería gestionar un sistema de usuarios para tus clientes y que se registren para hacer la cotización; sobre todo para que aporten más datos sobre si mismos).

--------------------

Según tu código .. en la variable $_SESSION['carro'] tienes tus datos .. no sé que formato tienen .. pero se trata de leerla tal cual para componer tu e-mail .. Pero, lo ideal llegado este punto es NO tener que generar un e-mail (eso no te dá ningún juego para hacer estadísticas .. ni control .. ni posibilidad de expasión de tu própia aplicación) sino que gestiones esos "pedidos" en una Base de datos ..

Un saludo,
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 19:03.