Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2007
juanperez juanperez is offline
Registrado
 
Registrado: mar 2007
Posts: 4
Poder: 0
juanperez Va por buen camino
SESIONES, VARIABLES y otras yerbas

Lo de siempre: nuevo en PHP (15 días)
Estoy haciendo un sitio donde el cliente marca productos en varias paginas y al final aparece una con la lista de pedidos para ser enviada por mail.

Estoy trabajando con sesiones, y subo la información con POST.

codigo:

Código PHP:
<?php 
session_start
(); 
session_register('carrinho'); 
$item=$_POST['item']; 
$name=$_POST['name']; 
$cantidad=$_POST['cantidad']; 
$carrinho=$_SESSION['carrinho']; 

if (
$item){ 
   if (!isset(
$carrinho)){ 
      
$carrinho[$item]=$cantidad
   }else{ 
      foreach(
$carrinho as $k => $v){ 
         if (
$item==$k){ 
         
$carrinho[$k]+=$cantidad
         
$encontrado=1
         } 
      } 
      if (!
$encontrado$carrinho[$item]=$cantidad
   } 

$_SESSION['carrinho']=$carrinho
?>
Pero....

al llegar a la pagina final como hago para que me imprima la lista?

He probado con

Código PHP:
     if (isset($carrinho)){ 
      foreach(
$carrinho as $k => $v){ 
         echo 
"#  $k Prod.:  Quant.: $v n"
      } 
   } 
pero solo logro que aparezcan dos valores, el codigo del producto y la cantidad elegida, pero no el nombre.

Agradesco me expliquen, aunque supongo sea algo sencillo, lo ignoro y ya estoy cansado de 'probar' sin resultados.
Gracias

Última edición por roman fecha: 03-03-2007 a las 04:53:47. Razón: Agregar etiqueta [php] para mejor legibilidad
Responder Con Cita
  #2  
Antiguo 03-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola, y bienvenido a los foros.

Me parece que no tienes claro cuál es la estructura de tu arreglo. Cuando llenas el carro haces algo como:

Código PHP:
$carrinho[$k] += $cantidad
Entonces no estás dando cabida al nombre del producto, sólo estás manejando una asociación

código => cantidad

Si quieres indizar el carrito con el código del producto, entonces cada elemento del arreglo debe ser a su vez un arreglo, por ejemplo:

Código PHP:
$carrito[84] = array('pera'5); 
Así, el carrito tendría (estamos ejemplificando) un elemento correspondiente al producto de código 84 que corresponde a una pera y te están pidiendo 5.

Puedes acceder a los elementos del carrito así:

Código PHP:
<?
foreach ($carrito as $codigo => $item)
{
  
/*
    $codigo es código del producto
    $item[0] es el nombre del producto 
    $item[1] es la cantidad
  */
}
?>
O bien puedes usar índices más significativos:

Código PHP:
$carrito[84] = array('nombre' => 'pera''cantidad' => 5); 
y en el ciclo usarías $item['nombre'] e $item['cantidad'] en lugar de $item[0] e $item[1].

Otra cosa: olvídate de session_register, éso ya está en desuso. Simplemente usa session_start para iniciar la sesión y $_SESSION para leer y escribir tus variables de sesión.

// Saludos
Responder Con Cita
  #3  
Antiguo 04-03-2007
juanperez juanperez is offline
Registrado
 
Registrado: mar 2007
Posts: 4
Poder: 0
juanperez Va por buen camino
Gracias Roman por contestar

Pero sigo sin lograrlo.

Quite el codigo


if ($item){
if (!isset($carrinho)){
$carrinho[$item]=$cantidad;
}else{
foreach($carrinho as $k => $v){
if ($item==$k){
$carrinho[$k]+=$cantidad;
$encontrado=1;
}
}
if (!$encontrado) $carrinho[$item]=$cantidad;
}
}

que segun entiendo es el que suma más del mismo producto (por si agregan del mismo 2 o mas veces)

así que la paginas de productos (productos que se cargan de uina tabla en la bd según seleccione por rubro o por un buscador de palabras) tiene un include a este codigo

<?php
session_start();
$item=$_POST['item'];
$name=$_POST['name'];
$cantidad=$_POST['cantidad'];
$carrinho=$_SESSION['carrinho'];

$_SESSION['carrinho']=$carrinho;
?>

Alli suben por post el item (codigo), name y la cantidad que especifique la persona en el cuadro de texto

Luego la persona va a la pagina final donde se impreme todo lo que eligió.
Allí puse:

<?php
session_start();
$carrinho = $_SESSION['carrinho'];
?>

al comienzo, y donde debe aparecer el texto

<?php
if (isset($carrinho)){
foreach($carrinho as $codigo => $item){
echo "# $codigo Prod.: $item[0] Quant.: $item[1] \n";
}
}
?>


Pero al probarla, despues de elegir algunos productos aparece:

# 7730177002400 Prod.: 5 Quant.:
# 7730177002417 Prod.: Quant.:
# 7730177002424 Prod.: 1 Quant.: 0


¿Que estoy haciendo mal?
Responder Con Cita
  #4  
Antiguo 05-03-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 21
kayetano Va por buen camino
Hola juanperez

copio y pego del correo que te he mandado hace un rato

Cita:
Empezado por juanperez
Lo de siempre: nuevo en PHP (15 días)
Estoy haciendo un sitio donde el cliente marca productos en varias paginas y al final aparece una con la lista de pedidos para ser enviada por mail.

Estoy trabajando con sesiones, y subo la información con POST.
Lo normal para un carrito de tienda on-line.

Cita:
Empezado por juanperez
codigo:

<?php
session_start();
session_register('carrinho');
$item=$_POST['item'];
$name=$_POST['name'];
$cantidad=$_POST['cantidad'];
$carrinho=$_SESSION['carrinho'];

if ($item){
if (!isset($carrinho)){
$carrinho[$item]=$cantidad;
}else{
foreach($carrinho as $k => $v){
if ($item==$k){
$carrinho[$k]+=$cantidad;
$encontrado=1;
}
}
if (!$encontrado) $carrinho[$item]=$cantidad;
}
}
$_SESSION['carrinho']=$carrinho;
?>
Algunos consejos:
- No es necesario que utilices "session_register" cuando utilizas el array $_SESSION
- Puedes trabajar directamente con el array $_SESSION no es necesario que utilices una variable secundaria.
- Deberías filtrar todas los valores de los formularios para evitar inyección de código malicioso.
- Todo el código que has puesto se puede reducir a unas poca lineas (claro está si no haces nada más por medio)
Código PHP:
<?php
session_start
();
$item=$_POST['item'];
if( !isset(
$_SESSION['carrinho']) )
    
$_SESSION['carrinho'] = array();

if ( isset( 
$_POST['item'] ) && $item ){
    
$_SESSION['carrinho'][$item]['cantidad'] += $_POST['cantidad'];
    
$_SESSION['carrinho'][$item]['nombre'] += $_POST['name'];

}
?>

Cita:
Empezado por juanperez
Pero....

al llegar a la pagina final como hago para que me imprima la lista?

He probado con

if (isset($carrinho)){
foreach($carrinho as $k => $v){
echo "# $k Prod.: Quant.: $v n";
}
}

pero solo logro que aparezcan dos valores, el codigo del producto y la cantidad elegida, pero no el nombre.
Código PHP:
if (isset($_SESSION['carrinho'])){
    foreach(
$_SESSION['carrinho'] as $k => $v){
        echo 
"# $k Prod.: "$v['nombre'] ." Quant.: "$v['cantidad'] ."\n";
    }


A través del correo pocas veces contesto, y cundo no lo hago en el foro es porque no tengo tiempo.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente

Última edición por kayetano fecha: 05-03-2007 a las 20:15:11.
Responder Con Cita
  #5  
Antiguo 06-03-2007
juanperez juanperez is offline
Registrado
 
Registrado: mar 2007
Posts: 4
Poder: 0
juanperez Va por buen camino
Bien, bien

Gracias Kayetano por tu respuesta.

Colgué la interrogante en 4 foros y Roman y tú me han comentado, lo que habla muy bien de lo serio de este foro, como me pareció desde el principio.

Las correcciones en el codigo muy buenas.

La verdad como decia, estoy entrando en esto obligado por el pedido de un cliente. Hasta ahora las webs que he realizado son todas en html, pero con esto de PHP, aunque por ahora voy entendiendo con dificultad, veo que se abre un abanico de posibilidades muy grande. Voy comenzando a entender las estructuras.

En concreto, utilicé los codigos que me enviaste Kayetano (estaba intentando las buenas sugerencias de Roman pero sin exito) y el carrito funciona casi bien.

Solo aparece un error y no doy con él: en el resultado no me aparecen los nombres de los productos y en su lugar aparece un 0.

Ejemplo:

# 7730177002400 Prod.: 0 Quant.: 150
# 7730177002417 Prod.: 0 Quant.: 240
# 7730177002448 Prod.: 0 Quant.: 15
# 7730154000153 Prod.: 0 Quant.: 50
# 7730177002110 Prod.: 0 Quant.: 20

El codigo del formulario que sube los productos es:

<form action="<?=$PHP_SELF."?".$SID?>" method="post">
<input type="hidden" name="name" value="<?php echo "$row[name]"; ?>" />
<input type="hidden" name="item" value="<?php echo "$row[codigo]"; ?>" />
Unidades:
<input type="text" name="cantidad" value="000" size="5">
<input type="image" value="enviar" src="images/carrito.gif" width="26" height="26" border="0" />
</form>


Y al comienzo de la pagina final, (el formulario con la lista elegida para enviar) pongo:

<?
session_start();
$carrinho=$_SESSION['carrinho'];
?>


Por si alguna de estas cosas tiene que ver. A mi vista no encuentro la razón de ese cero

Muchas gracias otra vez.

Un abrazo.
Responder Con Cita
  #6  
Antiguo 06-03-2007
juanperez juanperez is offline
Registrado
 
Registrado: mar 2007
Posts: 4
Poder: 0
juanperez Va por buen camino
Smile Creo que encontré el error

En el codigo:

<?php
session_start
();
$item=$_POST['item'];
if( !isset(
$_SESSION['carrinho']) )
$_SESSION['carrinho'] = array();

if ( isset(
$_POST['item'] ) && $item > 0 ){
$_SESSION['carrinho'][$item]['cantidad'] += $_POST['cantidad'];
$_SESSION['carrinho'][$item]['nombre'] += $_POST['name'];

}
?>

a la linea

$_SESSION['carrinho'][$item]['nombre'] += $_POST['name'];

le saqué el símbolo de + y ahora carga los nombres, supongo que el + iría si fuese un número y no una cadena de texto

Quedó así

$_SESSION['carrinho'][$item]['nombre'] = $_POST['name'];

y funciona, gracias
Responder Con Cita
  #7  
Antiguo 06-03-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 21
kayetano Va por buen camino
Hola

Efectivamente, con las prisas hice copy/paste de la linea que sumaba la cantidad y no me acordé de eliminar el simbolo de sumar. Pero veo que te las has apañado bien.
Suerte con el proyecto.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sesiones David PHP 6 01-03-2007 00:18:48
Software libre, propietario, licencias y otras yerbas haron Debates 3 02-05-2004 19:17:09
Como declarar variables para que las puedan utilizar otras units erocha Varios 1 07-11-2003 22:21:27
Sesiones en PHP... Tanix PHP 2 11-08-2003 15:02:50
Sesiones y variablaes Fr@n PHP 16 28-05-2003 09:59:03


La franja horaria es GMT +2. Ahora son las 14:58:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi