Foros del Web » Programando para Internet » PHP »

problemas con tienda online

Estas en el tema de problemas con tienda online en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/07/2007, 04:22
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
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.
  #2 (permalink)  
Antiguo 30/07/2007, 05:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 81
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: problemas con tienda online

Si envias la variable $new por GET, en el adcarrito.php la tienes que recibir por :

$new=$_GET['new'];

sino, no puedes utilizar una variable en un if ($new) ya que esa variable no la tienes declarada en ningun lado.

la variable cart, la tienes que "declarar" antes de utilizarla en el if de esa forma me parece.

antes de hacer un session_register no tienes que hacer un session_start() ???
  #3 (permalink)  
Antiguo 30/07/2007, 09:00
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: problemas con tienda online

mmmm....a ver....yo lo que quiero es que, cuando el visitante pinche en "ver mi carrito" y no haya comprado nada, pues aparezca el texto "no has comprado nada aún" y cuando el visitante haya comprado algo, aparezca lo que ha comprado, con sus costes y todo. Por otro lado, quiero que cuando el visitante en un producto pinche en añadir al carrito, se añada....¡¡¡¡PERO NO HAY FORMA!!!!! me lio y no sé como conseguirlo....alguna ayuda?
  #4 (permalink)  
Antiguo 30/07/2007, 10:33
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Re: problemas con tienda online

si, eso es lo que quieres, pero necesitas declarar tus variables que pasen por metodo GET, osea, por la barra de exploracion:

Código PHP:
<?php  
  
include ('modulos/bases.php'); 
  
// El carrito de compra necesita sesiones, así que iniciar una. 
   
$new=$_GET['new'];
   if(
$new
  {
  #5 (permalink)  
Antiguo 30/07/2007, 18:07
Avatar de codigoflecha  
Fecha de Ingreso: noviembre-2004
Mensajes: 325
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: problemas con tienda online

Como bien te ha comentado klareNs debes poner primero un sesion start, de manera que te quede asi:
Código PHP:
<?php  
  
include ('modulos/bases.php'); 
  
// El carrito de compra necesita sesiones, así que iniciar una. 
     
session_start();
   if(
$new
  {
si te fijas pones un comentario que el carrito necesita sesiones pero no inicias una, si lo pones asi te deberia de funcionar todo o casi todo, prueba y nos cuentas.
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:42.