Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/07/2007, 04:22
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
problemas con tienda online

hola a todos. a ver. estoy armando una tienda virtual. utilizo base de datos y sesiones. y resulta lo siguiente:

en la pantalla principal muestro los productos que tengo en la base de datos, con sus precios, características, etc... y debajo de cada producto aparecen dos enlaces:

'añadir al carrito'
'ver mi carrito'

bien. el enlace añadir al carrito tiene la siguiente forma:

Código PHP:
echo ('<a href="adcarrito.php?new='.$row["codigo"].'">añadir al carrito</a>'); 
donde "codigo" es el código que tiene cada producto en la base de datos y que introduce el administrador para cada uno de los productos (ojo, no es un autonumérico, eh?).

el enlace ver mi carrito tiene la siguiente forma:
Código PHP:
echo ('<a href="adcarrito.php">ver mi carrito</a>'); 
Bien. el archivo "adcarrito.php" tiene el siguiente código:

Código PHP:
<?php 
  
include ('modulos/bases.php');
  
// El carrito de compra necesita sesiones, así que iniciar una.
  
   
if($new)
  {
    
//nuevo artículo seleccionado
    
if(!session_is_registered("cart"))
    {
      
$cart = array();
      
session_register("cart");
      
$unidades 0;
      
session_register("unidades");
      
$precio_total "0.00";
      
session_register("precio_total");
    }
    if(
$cart[$new])
      
$cart[$new]++;
    else
      
$cart[$new] = 1;
    
$precio_total calculo_importe($cart);
    
$unidades calculo_unidades($cart);
  }
  
  if(
$cart&&array_count_values($cart))
    
mostrar_carrito($cart);
  else
  {
    echo 
"<p>No hay artículos en tu carro";
    echo 
"<hr>";
  }
?>
Bien. $new es la variable para indicar que es un nuevo artículo para el carrito . se usan una serie de funciones, pero la que muestra el carrito es la funcion mostrar_carrito($cart), que es esta:

Código PHP:
function mostrar_carrito($cart$change true$images 1)
{
  
// mostramos las unidades del crrito
  // permitimos cambios (true -sí permitimos cambios or false  -no permitimos cambios)
  // permitimos incluir imágenes (1 - si, 0 - no)

  
global $unidades;
  global 
$precio_total;

  echo 
"<table border = 0 width = 100% cellspacing = 0>
        <form action = adcarrito.php method = post>
        <tr><th colspan = "
. (1+$images) ." bgcolor=\"#cccccc\">Artículo</th>
        <th bgcolor=\"#cccccc\">Precio</th><th bgcolor=\"#cccccc\">Unidades</th>
        <th bgcolor=\"#cccccc\">Total</th></tr>"
;

  
//mostramos cada artículo en una fila
  
foreach ($cart as $codigo => $qty)
  {
    
$producto detalles_productos($codigo);
    echo 
"<tr>";
    if(
$images ==true)
    {
      echo 
"<td align = left>";
      if (
file_exists("$imagen"))
      {
         
$size GetImageSize("$imagen");
         if(
$size[0]>&& $size[1]>0)
         {
           echo (
'<img src='.$row["imagen"].'"" border=0');
           echo 
"width = "$size[0]/." height = " .$size[1]/">";
         }
      }
      else
         echo 
"&nbsp;";
      echo 
"</td>";
    }
    echo 
"<td align = left>";
    echo 
"<a href = mostrarproductos?codigo=".$codigo.">".$producto["nombre"]."";
    echo 
"</td><td align = center>$".number_format($producto["precio"], 2);
    echo 
"</td><td align = center>";
    
// unidades si es que permitimos cambios
    
if ($change == true)
      echo 
"<input type = text name = \"$codigo\" value = $qty size = 3>";
    else
      echo 
$qty;
    echo 
"</td><td align = center>$".number_format($producto["precio"]*$qty,2)."</td></tr>\n";
  }
  
// columna total
  
echo "<tr>
          <th colspan = "
. (2+$images) ." bgcolor=\"#cccccc\">&nbsp;</td>
          <th align = center bgcolor=\"#cccccc\">
              $unidades
          </th>
          <th align = center bgcolor=\"#cccccc\">
              \$"
.number_format($precio_total2).
          
"</th>
        </tr>"
;
  
// mostramos salvar cambios
  
if($change == true)
  {
    echo 
"<tr>
            <td colspan = "
. (2+$images) .">&nbsp;</td>
            <td align = center>
              <input type = hidden name = save value = true>
              <input type = image src = \"images/save-changes.gif\"
                     border = 0 alt = \"Save Changes\">
            </td>
            <td>&nbsp;</td>
        </tr>"
;
  }
  echo 
"</form></table>";

entonces, cuando estamos en la página principal y yo no he añadido ningún artículo al carrito, si pincho en ver carrito, me debería sacar "No hay artículos en tu carro";

Pero si hubiera alguno, debería mostrarme la función "mostrar_carrito".
bien. pues resulta que al ejecutar cualquiera de las dos acciones me da estos errores:

cuando hago "ver mi carrito":

Código PHP:
NoticeUndefined variable: new in adcarrito.php on line 6

Notice
Undefined variablecart in adcarrito.php on line 38

No hay artículos en tu carro 
cuando hago "añadir a mi carrito":
Código PHP:
Warningsession_register() [function.session-register]: Cannot send session cookie headers already sent by (output started at funciones.php:309in adcarrito.php on line 11

Warning
session_register() [function.session-register]: Cannot send session cache limiter headers already sent (output started at funciones.php:309in adcarrito.php on line 11

Notice
Undefined index123456DDD in adcarrito.php on line 17 
Ambos errores en la línea 11 del archivo adcarrito.php corresponden a

session_register("cart");
$unidades = 0;
session_register("unidades");
$precio_total = "0.00";
session_register("precio_total");

cuál es el problema? por qué no va nada? necesito ayuda, por favor.