New question

Question:

Date: 10-04-2020 19:00:27 (In Spanish)

Tengo un sistema de encuestas y quiero agregarle una cookie para que sólamente voten una vez al día[Unresolved]

Estoy renegando desde hace un tiempo y lo logro hacer que se pueda votar una sola vez al día, le paso el código a ver si alguien me puede dar una mano, estaría muy agradecido

<?php require_once('../Connections/panel.php'); ?>
<?php
        $idEncuesta = $_GET['idEncuesta'];
        if(!isset($_GET['idEncuesta'])){
                header('location: index.php');
        }
 
        if(isset($_POST['votar'])){

/*        if(isset($_POST['votar'])){
        //almacenar en $ _COOKIE para indicar que el usuario ha votado
        setcookie($_POST['votar'], 1, time()+60*60*24*365);
        
        $statusMsg = 'Tu voto fue computado.';
    }else{
        $statusMsg = 'Disculpa, ya has votado.';
    }*/
                if(isset($_POST['intValor'])){
                        $opciones = $_POST['intValor'];
                        $mod = mysqli_query($panel,"SELECT * FROM opciones WHERE idOpciones = ".$opciones);

                        while($result = mysqli_fetch_object($mod)){
                                $valor = $result->intValor + 1; // obtenemos el valor de 'intValor' y le añadimos 1 unidad
                                mysqli_query($panel,"UPDATE opciones SET intValor =  '".$valor."' WHERE idOpciones = ".$opciones); // luego ejecutamos el query SQL
                        }
                        header('location: resultado.php?idEncuesta='.$idEncuesta); // Por ultimo lo redireccionamos a la encuestas mostrando los resultados.
                }
        }

?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
        <meta charset="UTF-8">
        <title>Sistema de encuestas</title>
        <link rel="stylesheet" href="estilos.css">
</head>
<body>
<div class="wrap">
 
<form action="" method="post">
<?php

$aux = 0;
$sql = "SELECT encuestas.strTitulo, encuestas.fecha, opciones.idOpciones, opciones.strNombre, opciones.intValor FROM encuestas INNER JOIN opciones ON encuestas.idEncuesta = opciones.id_Encuesta WHERE encuestas.idEncuesta = ".$idEncuesta;
$req = mysqli_query($panel,$sql);
 
while($result = mysqli_fetch_object($req)){
 
        if($aux == 0){
                echo '<h1>'.$result->strTitulo.'</h1>';
echo !empty($statusMsg)?'<h1><p class="stmsg">'.$statusMsg.'</p></h1>':'1'; 
                echo '<ul>';
                $aux = 1;
        }
 
        echo '<li><input name="intValor" type="radio" value="'.$result->idOpciones.'"> <span>'.$result->strNombre.'</span></li>';
 
}
        echo '</ul>';  
 
        if(!isset($_POST['intValor'])){
                echo "<div class='error'>Selecciona una opcion.</div>";
        }
 
        echo '<input name="votar" type="submit" value="Votar">';
		
        echo '<a href="resultado.php?idEncuesta='.$idEncuesta.'" class="resultado">Ver Resultados</a>';
        echo '<a href="index.php" class="volver">&larr; Volver</a>';

?>
 
</form>
</div>
 
</body>
</html>
Tags: $_COOKIE - COOKIES - PHP - PHP MySQLi Votes: 0 - Answers: 7 - Views: 7 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 13-04-2020 07:04:05 Hola Oshi,
    Tienes comentada la lógica para establecer la cookie pero lo que te hace falta es la lógica donde revisas si existe esa cookie.

    La lógica iría antes de la recepción del $_POST['votar'].

    Saludos!
      Votes: 1 - Link answer
     
  • Date: 13-04-2020 10:49:11 Gracias Ernesto por responder, cuando levanté el script me olvidé de descomentarla, pero igualmente no me funciona, si me das una mano estaría re agradecido, me graba la cookie pero no me aparece el mensaje: Disculpa, ya has votado   Votes: 0 - Link answer
     
  • Date: 14-04-2020 06:34:38 Hola Oshi, segun veo te falta verificar primero si existe, o no, la cookie como tal, esto lo harías chequeando si esta seteada $_COOKIE['name'];


    $cookie_name = $_POST['votar'];
    
    //Verificar si no existe la cookie
    if(!isset($_COOKIE[$cookie_name])){
    	//almacenar en $ _COOKIE para indicar que el usuario ha votado
        setcookie($cookie_name, 1 , time()+60*60*24*365);
        $statusMsg = 'Tu voto fue computado.';
    }else{
    	$statusMsg = 'Disculpa, ya has votado.';
    }
    
      Votes: 1 - Link answer
     
  • Date: 14-04-2020 13:08:39 Gracias Carlos por responder, he probado tu código, pero sigue sin funcionar, la verdad que estoy reperdido, y no tengo idea de como solucionarlo   Votes: 0 - Link answer
     
  • Date: 15-04-2020 12:12:21 Oshi, comparte el código aquí con los últimos cambios para que te podamos ayudar   Votes: 0 - Link answer
     
  • Date: 15-04-2020 18:11:48 Esto es lo que tengo

    <?php require_once('../Connections/panel.php'); ?>
    <?php
            $idEncuesta = $_GET['idEncuesta'];
            if(!isset($_GET['idEncuesta'])){
                    header('location: index.php');
            }
    
            if(isset($_POST['votar'])){
    $cookie_name = $_POST['votar'];
    //Verificar si no existe la cookie
    if(!isset($_COOKIE[$cookie_name])){
        //almacenar en $ _COOKIE para indicar que el usuario ha votado
        setcookie($cookie_name, 1 , time()+60*60*24*365);
        $statusMsg = 'Tu voto fue computado.';
    }else{
        $statusMsg = 'Disculpa, ya has votado.';
    }
    
                    if(isset($_POST['intValor'])){
                            $opciones = $_POST['intValor'];
                            $mod = mysqli_query($panel,"SELECT * FROM opciones WHERE idOpciones = ".$opciones);
    
                            while($result = mysqli_fetch_object($mod)){
                                    $valor = $result->intValor + 1; // obtenemos el valor de 'intValor' y le añadimos 1 unidad
                                    mysqli_query($panel,"UPDATE opciones SET intValor =  '".$valor."' WHERE idOpciones = ".$opciones); // luego ejecutamos el query SQL
                            }
                            header('location: resultado.php?idEncuesta='.$idEncuesta); // Por ultimo lo redireccionamos a la encuestas mostrando los resultados.
                    }
            }
    
    ?>
    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
            <meta charset="UTF-8">
            <title>Sistema de encuestas</title>
            <link rel="stylesheet" href="estilos.css">
    </head>
    <body>
    <div class="wrap">
    
    <form action="" method="post" name="form1"  id="form1">
    <?php
    
    $aux = 0;
    $sql = "SELECT encuestas.strTitulo, encuestas.fecha, opciones.idOpciones, opciones.strNombre, opciones.intValor FROM encuestas INNER JOIN opciones ON encuestas.idEncuesta = opciones.id_Encuesta WHERE encuestas.idEncuesta = ".$idEncuesta;
    $req = mysqli_query($panel,$sql);
     
    while($result = mysqli_fetch_object($req)){
     
            if($aux == 0){
                    echo '<h1>'.$result->strTitulo.'</h1>';
     echo !empty($statusMsg)?'<p class="stmsg">'.$statusMsg.'</p>':''; 
    
    
    
                    echo '<ul>';
                    $aux = 1;
            }
     
            echo '<li><input name="intValor" type="radio" value="'.$result->idOpciones.'" onclick="votar.disabled = !this.checked"> <span>'.$result->strNombre.'</span></li>';
     
    }
            echo '</ul>';  
     
            if(!isset($_POST['intValor'])){
                    echo "<div class='error'>Selecciona una opcion.</div>";
            }
      
            echo '<input id="votar" name="votar" type="submit" value="Votar"  disabled>';
    		
            echo '<a href="resultado.php?idEncuesta='.$idEncuesta.'" class="resultado">Ver Resultados</a>';
            echo '<a href="index.php" class="volver">&larr; Volver</a>';
    
    ?>
     
    </form>
    </div>
     <script>
    
    </script>
    </body>
    </html>
    
      Votes: 0 - Link answer
     
  • Date: 20-04-2020 18:20:25 No estoy seguro de entender lo que necesitás, pero para que "sólamente voten una vez al día" deberías setear una cookie que dure sólo por hoy, o lo que reste de hoy (o sea, que a las 00:00 caduque) para ello deberías setearla así:

    setcookie(nombre_cookie,valor_a_guardar,strtotime(tomorrow),'/');

    donde lo importante es "strtotime(tomorrow)" algo no muy usado.
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In