Foros del Web » Programando para Internet » PHP »

Carrito y diccionario

Estas en el tema de Carrito y diccionario en el foro de PHP en Foros del Web. Hola tengo una duda q les paso a comentar. Yo soy programador ASP, y en este lenguaje existe algo llamado diccionario. Esto lo q hace ...
  #1 (permalink)  
Antiguo 24/07/2004, 10:56
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 21 años, 2 meses
Puntos: 0
Exclamación Carrito y diccionario

Hola tengo una duda q les paso a comentar.
Yo soy programador ASP, y en este lenguaje existe algo llamado diccionario. Esto lo q hace es guardar informacion de forma temporal en arrays, lo cual es muy util para armar un carrito de compras sin necesidad de tocar la base, y finalmente establecer el pedido, si el usuario asi lo establece, con los datos almacenados.
Bueno, en resumen, quiero saber si existe algo similar en este lenguaje, o en caso negativo, cual es la alternativa comunmente utilizada.
Muchas gracias

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
  #2 (permalink)  
Antiguo 24/07/2004, 11:10
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 23 años, 3 meses
Puntos: 9
Si existe, y se pueden hacer mesiante arrays de sesión o de cookies, te recomiendo sesión se es algo temporal, cookies si se trata obviamente como algo permanente.

http://www.webestilo.com/php/php12a.phtml
  #3 (permalink)  
Antiguo 24/07/2004, 13:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Las sesiones en PHP o bien cookies se comportan igual que el "diccionario" que comentas de ASP.

En una sesión puedes guardar todo tipo de variables (incluso objetos pero se pierden los métodos ..). Así que si quieres implementar un carrito .. puedes usar un array común y propagarla en una sesión.

Te recomiendo que si quieres leas el link que dejó lado2mx para ver el concepto de "sesión" .. pero en la práctica leas la documentación oficial de PHP sobre sesiones que está más actualizada .. Los métodos que hay describen para gestionar sesiones NO SON SEGUROS! .. debes usar los arrays superglobales $_SESSION en lugar de los "session_register()" y dicha técnica que ahí describe.

www.php.net/session

Un saludo,
  #4 (permalink)  
Antiguo 24/07/2004, 14:39
 
Fecha de Ingreso: abril-2002
Mensajes: 60
Antigüedad: 22 años, 7 meses
Puntos: 0
Si se puedeeeee

Mira, busca en los foros el tema de carrito de compras, hay un link para descargar un programa que genera tiendas virtuales... es buenisimo... caundo me vaya un poco mejor les voy a mandar algún dinerito a los muchachos...luego subes el pedido a tu base de datos si lo deseas o lo haces por mail.... el hecho es que ese programa es re-bueno, y al codigo que te genera lo puedes manipular a tu antojo si eres bueno en eso.
__________________
http://www.autosyautos.com
  #5 (permalink)  
Antiguo 25/07/2004, 01:41
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 21 años, 2 meses
Puntos: 0
Primero q nada, gracias lado2mx, Cluster y kilobyte por su tiempo. Segundo quiero decirle a Cluster q ciertos conceptos explicados en el manual de PHP no me quedan claros. Te transmito mis dudas:

1) Cuando comienza una sesion??? Vi q usan session_start() al setear una variable, no me queda claro si es necesario llamar la funcion para comenzar la sesion.
2) Lei q no recomiendan utilizar variables de sesion, q no son seguras (tu mismo lo dijiste), por lo q desde versiones pasadas en adelante register_globals tiene el valor predeterminado off. Cual es el peligro??? Q diferencia hay entre decir session_register('variable') y $_SESSION["variable"]???
3)Cual es la diferencia entre una matriz asociativa global como $HTTP_SESSION_VARS[] y una matriz superglobal como $_SESSION???

Si me surgen mas dudas te las hare llegar.
Finalmente, kilobyte, no encontre el link al q te refieres, si lo encuentras podrias postearlo aca???
Bueno, con este material ya es suficiente para q empieze a teclear mi carrito, nuevamente, gracias a los 3.
Creo q es todo por ahora, nos vemos pronto con nuevas dudas.
Salud amigos

AlvAro

-

The New Amsterdams
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
  #6 (permalink)  
Antiguo 25/07/2004, 11:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
1) Cuando comienza una sesion??? Vi q usan session_start() al setear una variable, no me queda claro si es necesario llamar la funcion para comenzar la sesion.
El inicio de sesiones se indica con esa función: session_start() .. es insprescindible que la uses siempre que pretengas acceder a una variable de sesión (sea para "registrarla" o para leerla/modificar su valor).

Cita:
2) Lei q no recomiendan utilizar variables de sesion, q no son seguras (tu mismo lo dijiste), por lo q desde versiones pasadas en adelante register_globals tiene el valor predeterminado off. Cual es el peligro??? Q diferencia hay entre decir session_register('variable') y $_SESSION["variable"]???
No, .. no dije (y si lo dije fué un "lapsus") que variables de sesiones no son seguras (más bien las cookies por qué son alterables los valores que contienen al estar en el "cliente" .. no como una sesión que permaneces sus datos en el servidor).

Lo que dije que no es recomendable es usar session_register() para registrar una variable de sesión .. por qué así puedes acceder a su valor por: $nombre_variable (definiendola como session_register("nombre_variable") ; $nombre_variable='valor';

Si no discriminas el método o médio que llega una variable a un script PHP (externa) podrías suplantar el valor de una variable de sesión. Ejemplo .. en el manual sobre sesiones que hay en desarrolloweb.com (link que dejó lado2mx) definen una variable de sesión tipo: $autentificado="SI" y la registran en la sesión con session_register('autentificado') .. Si yo llego y hago tu_script.php?autentificado=SI con register_globals a ON .. voy a pasar toda tu validación (if ($autentificado=="SI") .. directo .. por qué tu script NUNCA supo si la variable que debía ver su valor era del "método" GET ,... o POST .. o era una cookie .. o una sesión o cualquier otra cosa.

Cita:
3)Cual es la diferencia entre una matriz asociativa global como $HTTP_SESSION_VARS[] y una matriz superglobal como $_SESSION???
$_SESSION son arrays superglobales .. eso significa que bajo una función podrías acceder al valor de esta sin tener que declararla como globales (GLOBAL) .. El uso de $HTTP_XXX_VARS no recuerdo como se comporta con register_globals a OFF (pero creo que no son accesibles y por lo menos en PHP 5 por ejemplo hay que especificar que quieres usarlos .. por qué por defecto no son registradas para su uso: sólo los arrays superglobales).

---------

Hay un tema que te estás "olvidando" .. el "SID" (Identificador único de sesión) y que es parte fundamental de las sesiones. Ese "SID" es el nexo entre los datos que se almacenan en el servidor y el cliente que las creó y puede accederlas. Ese "SID" se ha de propagar .. ya sea por el URL o por COOKIEs (siendo más seguro por cookies con los "contra" que ello conlleva: requieres de un navegador que acepte cookies).

A su vez, PHP te "ayuda" a propagar el SID por configuración (php.ini y ajustable por ini_set() también) donde le dices que propage el SID por el URL (reescribiendo ciertos tag's HTML como el de link, formularios .. etc) o en cookies .. o si lo deseas lo dejas completamente manual (bajo tu programación). o fuerzas cierta configuración. Pero insisto que el SID es parte fundamental de las sesiones .. si no se propaga en tus scripts que estén bajo la sesión no podras acceder a sus valores.

(usa el buscador del foro y busca por sesiones .. se suele hablar de esos temas muy amenudo).

Un saludo,
  #7 (permalink)  
Antiguo 25/07/2004, 21:15
 
Fecha de Ingreso: abril-2002
Mensajes: 60
Antigüedad: 22 años, 7 meses
Puntos: 0
Carrito De Compras

http://www.webtutorial.com.ar/cibertienda/index.php
De verdad te digo que es bueno. muy bueno, ya que no necesitas consumir recursos del servidor, sino hasta que sea necesario... espero te sirva.
__________________
http://www.autosyautos.com
  #8 (permalink)  
Antiguo 26/07/2004, 02:13
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 21 años, 2 meses
Puntos: 0
kilobyte, probe el software y la verdad q es increible, te facilita horas de trabajo. Aunque no hay nada como crear uno sus propias aplicaciones, a veces no esta mal aceptar un poco de ayuda.

Y como muestra de ésto, orgullosamente les comento q acabo de terminar la idea basica del carrito (si, lo hice yo solo... bueno, con los aportes de lado2mx, Cluster y kilobyte Gracias, por cierto).

Les cuento q es un carrito hiper basico, consta de un array bidimensional, el cual contiene una matriz "Producto" y otra matriz "Cantidad". Las posiciones se corresponden, es decir si un producto esta en la posicion 87 del array "Producto", entonces en la posicion 87 del array "Cantidad" se encuentra la cantidad de unidades a comprar; asi se maneja.

Bueno, la idea es q lean el codigo, lo usen, lo modfiquen y apreciaria mas q nada q lo mejoren y lo vuelvan a postear, o cualkier idea q contribuya a esto. Mi manejo de arrays es bastante torpe, asi q quizas puedan aportar mas en esa area.

Aqui se los dejo, plenamente comentado. Vale aclarar q a esa pagina se le hace referencia como
Código HTML:
http://www.misitio.com/cart.php?id_prod=Identificador&cant=Cantidad
Código PHP:
<?php
// recupero o comienzo la sesion
session_start();
// tomo el identificador de producto y la cantidad pasados por la url
$id $_GET["id_prod"];
$cant $_GET["cant"];
// chekeo la existencia de la variable de sesion "cart"
if (!isset($_SESSION["cart"])) {
// si no existe la creo con los datos obtenidos
    
$carrito = array("Producto" => array($id), "Cantidad" => array($cant));
    
$_SESSION["cart"] = &$carrito;
} else {
// de lo contrario la retomo
    
$carrito = &$_SESSION["cart"];
// ahora chekeo la existencia de dicho producto en el carrito
    
if (!in_array($id$carrito["Producto"])) {
// si no existe, simplemente lo agrego al final del array adjuntando el numero de unidades
        
array_push($carrito["Producto"], $id);
        
array_push($carrito["Cantidad"], $cant);
// si existe, procedo a aumentar $cant unidades
    
} else {
// guardo en $find la posicion del producto seleccionado
        
$find array_search($id$carrito["Producto"]);
// seteo $x en 0 para comenzar a contar las posiciones. Recuerden q lo inicializo en 0 pq los elementos de una matriz se comienzan a contar desde cero
        
$x 0;
        foreach (
$carrito["Cantidad"] as $value) {
// por cada elemento del carrito sumo 1 a $x y chekeo si este numero es igual a $find, el cual indica la posicion del producto
            
if ($x == $find) {
// cuando se cumple la condicion, guardo el valor del array en esa posicion
                
$element $value;
            }
            
$x $x 1;
        }
// con array_splice le digo al script q en el array Cantidad, contenido en $carrito, en la posicion $find, unicamente a ese elemento, lo reemplaze por $element+$cant
        
array_splice($carrito["Cantidad"], $find1$element+$cant);
    }
}
?>
Gracias a todos

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
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 22:01.