Autor Tema: Error en cookies PHP carrito de compra isset setcookie encabezados servidor  (Leído 1909 veces)

puntoycoma

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Buenas, acabo de hacer un programa en PHP de un carrito de compra, pero tengo un error que no logro ver, justo en la última parte que está gestionada por cookies. Resulta que cuando gestiono un pedido no me muestra la fecha correcta y no se actualiza ni nada, ¿alguna idea de en qué estoy fallando en mi código? Gracias  :)


Código: [Seleccionar]
<?php
session_start
();
session_unset();
date_default_timezone_set(&#39;Europe/Madrid&#39;);

$suma 0;

if (empty(
$_SESSION[&#39;tienda&#39;])) 
{
    if (!isset(
$_COOKIE[&#39;fecha&#39;])) 
    
{
        
setcookie(&#39;fecha&#39;, date("d/m/y G:i:s"));
    
}
}

if (isset(
$_POST[&#39;gestionar&#39;])) 
{
    if (!isset(
$_COOKIE[&#39;pedidos&#39;])) 
    
{
        
$suma 1;
        
setcookie(&#39;pedidos&#39;, $suma);
    

    else 
    {
        
$suma++;
        
$suma $_COOKIE[&#39;pedidos&#39;] + $suma;
        
setcookie(&#39;pedidos&#39;, $suma);
    
}
}
if (isset(
$_POST[&#39;DeshacerPedido&#39;])) 
{
    
$suma $_COOKIE[&#39;pedidos&#39;] - 1;
    
setcookie(&#39;pedidos&#39;, $suma);
    
if($_COOKIE[&#39;pedidos&#39;] ==0)
    
{
        
$suma 0;
        
setcookie(&#39;pedidos&#39;, $suma);
    
}
}

if (isset(
$_POST[&#39;BorrarHistorial&#39;])) 
{
    
$suma 0;
    
setcookie(&#39;pedidos&#39;, $suma);
}
?>


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
    <title>Pedidos</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
    <link rel="stylesheet" href="assets/site.css">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Architects+Daughter&display=swap" rel="stylesheet">
</head>

<body class="bg-secondary">
        <a><b class="text-info text-warning" style="font-size:30px;">
                <?php
                
if (!isset($_SESSION[&#39;tienda&#39;])) 
                
{
                    
                }
                else
                {
                    echo 
"<img src=&#39;assets/img/error.png&#39; class=&#39;imagen_Carrito&#39;/>";
                    echo 
"<br/>";
                    echo 
"<p class=&#39;alertaError bg-warning Width 25% text-center&#39;>ERROR: HAS ACCEDIDO A PEDIDOS DIRECTAMENTE</p>"
                    
header(&#39;Refresh: 2; URL=inicio.php&#39;);
                
}
                
?>
</b></a>

            <?php
            
if (isset($_COOKIE[&#39;pedidos&#39;])) 
            
{

                echo 
"Numero de pedidos: " $suma "<br/>";
                echo 
"Fecha del último pedido: " $_COOKIE[&#39;fecha&#39;] . "<br/>";
            

            else if (!isset(
$_COOKIE[&#39;pedidos&#39;])) 
            
{
                echo 
"Numero de pedidos: 0<br/>";
                echo 
"Fecha del último pedido: " $_COOKIE[&#39;fecha&#39;] . "<br/>";
            
}
            
?>

                    <form action="pedidos.php" method="POST">
                        <input type="submit" value="Deshacer pédido" name="DeshacerPedido" />
                        <input type="submit" value="Borrar historial" name="BorrarHistorial" />
                        <input type="button" onclick="window.location.href='inicio.php';" value="Ir a comprar" />
                    </form>

</body>
</html>
« Última modificación: 12 de Marzo 2022, 18:04 por Ogramar »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re: Error en cookies
« Respuesta #1 en: 01 de Diciembre 2021, 19:43 »
Hola punto y coma no me queda muy claro dónde tienes el problema, o si viene de una página anterior o no. He hecho una pequeña prueba.

Después del if (isset($_POST['gestionar'])) { ... } he introducido esta línea

Citar
echo 'Se ha establecido la cookie fecha cuyo valor es'.$_COOKIE['fecha'].' y además la cookie pedidos vele'.$_COOKIE['pedidos'];

Al invocar el código con una url sobre un servidor me ha devuelto esto:

Se ha establecido la cookie fecha cuyo valor es y además la cookie pedidos vele Numero de pedidos: 0
Fecha del último pedido:

Es decir, primera vez = vacío. Y al invocarlo por segunda vez me ha devuelto algo así:

Se ha establecido la cookie fecha cuyo valor es 01/12/51 19:26:46 y además la cookie pedidos vele Numero de pedidos: 0
Fecha del último pedido: 01/12/51 19:26:46

Es decir, segunda vez = tiene contenido.

Esto parece dar una pista sobre la explicación que puede ser que el problema proviene del hecho de que setcookie () no establece las cookies de inmediato, envía los encabezados para que el navegador establezca las cookies. Esto significa que, para la primera carga de la página actual, setcookie () no genera $ _COOKIE.

Cuando el navegador más tarde solicita una página para la que previamente se ha establecido una cookie, envía las cookies en los encabezados para que PHP pueda recuperarlas en forma de $ _COOKIE.

Pero como en todo, existen "workarounds" para solucionar esto, pero lo primero es entender lo que ocurre para darle solución y no veo muy claro qué es lo que estás intentando hacer :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".