Foros del Web » Programando para Internet » PHP »

Array en Session

Estas en el tema de Array en Session en el foro de PHP en Foros del Web. Muchachos, que tal, como están, tengo una consulta, almaceno en $SESSION un array llamado $carrito; a este le quiero agregar elementos, pero parece que no ...
  #1 (permalink)  
Antiguo 17/05/2004, 06:58
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
Pregunta Array en Session

Muchachos, que tal, como están, tengo una consulta, almaceno en $SESSION un array llamado $carrito; a este le quiero agregar elementos, pero parece que no sucede nada. Como puedo hacerlo

Código PHP:

    
function incluir_en_carrito($elemento)
    {
        
$ultimo count($carrito);
        echo 
$ultimo;
        
$carrito[$ultimo] = $elemento;
    } 
Si es por el register_globals = on como puedo acceder a tal indice porque tendria que llamara ala variable carrito como $SESSION[..........., pero no se como.

Un saludo
Rubén
  #2 (permalink)  
Antiguo 17/05/2004, 07:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pon el código completo que uses ...

No sé si será un "error tipográfico" .. pero las sesiones por su array "superglobal" se definen/acceden por:

Código PHP:
$_SESSION['indice'
Y .. luego no vemos si usas session_start() ni como ni donde .. (pon los scripts que uses para guardar tu array en la sesión y los que usas para leerlo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 17/05/2004, 09:37
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
Código PHP:

<?
    session_start
();
    if (!
session_is_registered("carrito"))
        die (
"Operación no válida");
    require 
"conexion.inc";
    
$item_id =  $_POST["id"];

    function 
incluir_en_carrito($elemento)
    {
        
$ultimo count($carrito);
        
$carrito[$ultimo] = $elemento;
    }
    

?>
    Estos son los productos que has añadido a tu carrito de compras. Si deseas hacer alguna MODIFICACIÓN, puedes utilizar la opción ACTUALIZAR.
    Condiciones de compra:
    
    <table border='0' align='center' width='80%'>
        <tr>
            <td>Producto</td>
            <td>Precio</td>
            <td>Eliminar</td>
            <td>Actualizar</td>
        </tr>
        <?
            incluir_en_carrito
($item_id);
            for (
$i=$i <= count($carrito) ; $i++)
            {
                
$aux $carrito[$i];
                
$sSQL "select * from items where item_id = $aux";
                echo 
$sSQL;
                
$resultado mysql_query($sSQL) or die("Operación no válida");
                
$fila mysql_fetch_object($resultado);
                echo 
"<tr>";
                echo 
"<td valign='middle'><img width='65' height='65' src='$fila->ruta_imagen'>$fila->nombre</td>";
                echo 
"<td>$fila->precio_estimado</td>";
                echo 
"<td><input type='checkbox' value='Eliminar'></td>";
                echo 
"<td><input type='button' value='Aceptar'></td>";
                echo 
"</tr>";
            }
        
?>
    </table>

Aca esta. Aca falla
$sSQL = "select * from items where item_id = $aux", ya q el aux esta en null

Saludos
Rubén
  #4 (permalink)  
Antiguo 17/05/2004, 09:40
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
Mi register_globals esta en on
  #5 (permalink)  
Antiguo 17/05/2004, 10:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En ese código usas una "validación" tipo session_is_register() .. pero no usas un session_register() en ningún punto del código que es la función que deberías usar para registrar tu variable (tu array) en la sesión ..

Pero .. de todas formas ..

Consejo: Usa los arrays supeglobales para todo .. ya usas los $_POST .. usa para sesioens los $_SESSION. Son más seguros para tu aplicación y además no dependen del estado de "register_globals" (esté a ON o a OFF funcionará tu aplicación y si además está a OFF más segura será).

www.php.net/session

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 17/05/2004, 11:30
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
Cluster, gracias, pero justo ya lo habia conseguido, pero tengo un problema, registra mi SESSION, pero vuelvo a otra pagina y de ahi selecciono un producto nuevo y entro de nuevo a esta pagina, deberian haber 2 productos ahora, pero no me registra , solo me registra el ultimo, es decir el array no se acumula. Que puede haber pasado??


Código PHP:

<?
    session_start
();
    if (!
session_is_registered("carrito"))
        die (
"Operación no válida");
    
    
//echo each($_SESSION["carrito"]);
    
require "conexion.inc";
    
$item_id =  $_POST["id"];

    function 
incluir_en_carrito($elemento)
    {
        
$ultimo count($_SESSION["carrito"]);
        echo 
"CONTADOR " $ultimo;
        
$_SESSION["carrito"][$ultimo] = $elemento;
    }
    

?>

<script language="Javascript">

function Back()
{
    frmCarrito.submit();
}

</script>

<form name="frmCarrito" action="refuerza_web.php" method=POST>
    
</form>

    <table>
        <tr>
            <td>
                Estos son los productos que has añadido a tu carrito de compras. Si deseas hacer alguna MODIFICACIÓN, puedes utilizar la opción ACTUALIZAR.
                Condiciones de compra:
            </td>
        </tr>
        <tr>
            <td>
                <table border='0' align='center' width='80%'>
                    <tr>
                        <td>Producto</td>
                        <td>Precio</td>
                        <td>Eliminar</td>
                        <td>Actualizar</td>
                    </tr>
        <?
            incluir_en_carrito
($item_id);
            for (
$i=$i count($_SESSION["carrito"]) ; $i++)
            {
                
$aux $_SESSION['carrito'][$i];
                
$sSQL "select * from items where item_id = $aux";
                
$resultado mysql_query($sSQL) or die("Operación no válida");
                
$fila mysql_fetch_object($resultado);
                echo 
"<tr>";
                echo 
"<td valign='middle'><img width='65' height='65' src='$fila->ruta_imagen'>$fila->nombre</td>";
                echo 
"<td>$fila->precio_estimado</td>";
                echo 
"<td><input type='checkbox' value='Eliminar'></td>";
                echo 
"<td><input type='button' value='Aceptar'></td>";
                echo 
"</tr>";
            }
        
?>
                    <tr>
                        <td colspan=4><hr></td>
                    </tr>
                    <tr>
                        <td colspan=4>Total</td>
                    </tr>
                    <tr>
                        <td colspan=4><hr></td>
                    </tr>
                    <tr>
                        <td colspan=3>Para continuar con la compra y hacer el pago correspondiente, haz click aquí: &nbsp;</td>
                        <td><input type='button' name='' value='Efectuar Compra'></td>
                    </tr>
                    <tr>
                        <td colspan=3></td><td><input type='button' name='btnSeguir' value='Seguir Comprando' onClick='Back()'><a  href='refuerza_web.php'>Seguir Comprando</a></td>
                    </tr>

                </table>
            </td>
        </tr>
        <tr>
            <td>
                - Para que efectues una compra debes estar registrado previamente. 
                - Para la entrega por delivery, la persona que realiza la compra deberá estar presente al momento de la entrega portando sus documentos de Identidad. 
                - Te recomendamos verificar la cantidad de productos seleccionados antes de elegir el método de pago.  
                - Para cualquier consulta sobre el estado de tu pedido puedes comunicarte con nosotros escribiéndonos a: [email][email protected][/email]  
            </td>
        </tr>
    </table>
Saludos
Rubén

p.D.: El session_register esta en la pagina q llama a este
  #7 (permalink)  
Antiguo 17/05/2004, 12:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Insisto: NO uses

Cita:
p.D.: El session_register esta en la pagina q llama a este
ni session_is_register() .. USA sólo los arrays superglobales $_SESSION .. NO mezcles.


Código PHP:
    function incluir_en_carrito($elemento)
    {
        
$ultimo count($_SESSION["carrito"]);
        
// Cuenta el total de elementos y sumale 1 para obtener la siguiente posición del array .. sino siempre "pisaras" el último .. y si inicias así el array .. sólo estaras "jugando" sobre el último y único elemento de ese array.
        
$ultimo $ultimo+1;
        echo 
"CONTADOR " $ultimo;
        
$_SESSION["carrito"][$ultimo] = $elemento;
    } 
Tienes que suma 1 al total de elementos que te devuelva tu array que lees de tu sesión .. Pero OJO . .que $_SESSION no queda disponible hasta que recargas la página o realizaas una nueva petición de ese script al servidor (link, etc) .. Así que si añades algo al array $_SESSION .. revisa bien que en 1+N iteracciones se acomule más elementos a dicho array.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 17/05/2004, 12:58
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
refuerza_web.php
Código PHP:
<?

    session_start
();
    
$carrito = array();
    
$_SESSION["carrito"] = $carrito
    
?>
<html>
<head>

<script language="Javascript">

function Agregar_Carrito(id)
{
    frmCarrito.id.value = id;
    frmCarrito.submit();
}


</script>

</head>

<body>
<?

    
require "conexion.inc";
    
    
/* ------------------ */

    
$sSQL "select * from items where tipo = 'R'";
    
$resultado mysql_query($sSQL) or die("Operación no válida");
    echo 
"<form name='frmCarrito' action='carrito.php' method='POST'>";
    echo 
"<input type='hidden' name='id' value=''>";
    echo 
"</form>";
    echo 
"<table border=1>";
    while (
$fila mysql_fetch_object($resultado))
    {
        echo 
"<tr>";
        echo 
"<td><img src='$fila->ruta_imagen'></td><td>";
        echo 
"<table>";

        echo 
"<tr>";
        echo 
"<td>$fila->nombre</td>";
        echo 
"</tr>";

        echo 
"<tr>";
        echo 
"<td>$fila->descripcion</td>";
        echo 
"</tr>";

        echo 
"<tr>";
        echo 
"<td>Precio Estimado : $ $fila->precio_estimado</td>";
        echo 
"</tr>";
        
        echo 
"<tr>";
        echo 
"<td><input type='image' name='id' src='btn-agregcar.gif' onClick='Agregar_Carrito($fila->item_id)'></td>";
        echo 
"</tr>";

        echo 
"</table>";
        echo 
"</td>";
        echo 
"</tr>";
    }
    echo 
"</table>";


?>

</body>

</html>

carrito.php

Código PHP:

<?
    session_start
();
    if (!
$_SESSION["carrito"])
        die (
"Operación no válida");
    
    require 
"conexion.inc";
    
$item_id =  $_POST["id"];

    function 
incluir_en_carrito($elemento)
    {
        
$ultimo count($_SESSION["carrito"]);
        
$ultimo $ultimo 1;
        
$_SESSION["carrito"][$ultimo] = $elemento;
    }
    

?>

<script language="Javascript">

function Back()
{
    frmCarrito.submit();
}

</script>

<form name="frmCarrito" action="refuerza_web.php" method=POST>
    
</form>

    <table>
        <tr>
            <td>
                Estos son los productos que has añadido a tu carrito de compras. Si deseas hacer alguna MODIFICACIÓN, puedes utilizar la opción ACTUALIZAR.
                Condiciones de compra:
            </td>
        </tr>
        <tr>
            <td>
                <table border='0' align='center' width='80%'>
                    <tr>
                        <td>Producto</td>
                        <td>Precio</td>
                        <td>Eliminar</td>
                        <td>Actualizar</td>
                    </tr>
        <?
            incluir_en_carrito
($item_id);
            for (
$i=$i count($_SESSION["carrito"]) ; $i++)
            {
                
$aux $_SESSION['carrito'][$i];
                
$sSQL "select * from items where item_id = $aux";
                
$resultado mysql_query($sSQL) or die("Operación no válida");
                
$fila mysql_fetch_object($resultado);
                echo 
"<tr>";
                echo 
"<td valign='middle'><img width='65' height='65' src='$fila->ruta_imagen'>$fila->nombre</td>";
                echo 
"<td>$fila->precio_estimado</td>";
                echo 
"<td><input type='checkbox' value='Eliminar'></td>";
                echo 
"<td><input type='button' value='Aceptar'></td>";
                echo 
"</tr>";
            }
        
?>
                    <tr>
                        <td colspan=4><hr></td>
                    </tr>
                    <tr>
                        <td colspan=4>Total</td>
                    </tr>
                    <tr>
                        <td colspan=4><hr></td>
                    </tr>
                    <tr>
                        <td colspan=3>Para continuar con la compra y hacer el pago correspondiente, haz click aquí: &nbsp;</td>
                        <td><input type='button' name='' value='Efectuar Compra'></td>
                    </tr>
                    <tr>
                        <td colspan=3></td><td><input type='button' name='btnSeguir' value='Seguir Comprando' onClick='Back()'><a  href='refuerza_web.php'>Seguir Comprando</a></td>
                    </tr>

                </table>
            </td>
        </tr>
        <tr>
            <td>
                - Para que efectues una compra debes estar registrado previamente. 
                - Para la entrega por delivery, la persona que realiza la compra deberá estar presente al momento de la entrega portando sus documentos de Identidad. 
                - Te recomendamos verificar la cantidad de productos seleccionados antes de elegir el método de pago.  
                - Para cualquier consulta sobre el estado de tu pedido puedes comunicarte con nosotros escribiéndonos a: [email][email protected][/email]  
            </td>
        </tr>
    </table>
Hice los cambios q me dijistes, pero en refuerza_web.php no me trae nada si le asigno un numero si me lo trae normal es decir $_SESSION["carrito"] = 1, sale bien pero si lo igualo a un array no sale :(

Saludos
Rubén
  #9 (permalink)  
Antiguo 17/05/2004, 14:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Es que en refuerza_web.php siempre asignas un array vacio a la sessión "carrito" .. Y eso lo debes hace siempre y cuando tu sesión no esté creada (lo mismo en carrito.php)

Código PHP:
    session_start();
    
$carrito = array();
    
$_SESSION["carrito"] = $carrito
tendría que ser algo tipo:

Código PHP:
    session_start();
if (isset(
$_SESSION['carrito'])){
    
$carrito=$_SESSION['carrito'];
} else {
    
$carrito = array();
}


// Y luego trabajas con tu $carrito como cualquier array: 
De esa forma .. si está definida la sesión (carrito) .. la uso y sino . inico el array vació.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 18:46.