Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/02/2016, 06:14
heinther
 
Fecha de Ingreso: junio-2015
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Pregunta Sistema de votaciones con php

Hola amigos,
llevo ya unos días con un problema en mi sistema de votaciones que no soy capaz de resolver, trataré de explicarlo lo mejor posible a ver si pueden ayudarme.

Para realizar las votaciones utilizo php, jquery y ajax.

El caso es que el sistema funciona de maravillas salvo por un pequeño de detalle.
Para votar debes estar registrado obligatoriamente. Y cada voto que se realiza se guarda en una base de datos.
Cada vez que vayas a votar se consultará esa base de datos y si detecta que ya has votado no te dejará volver a votar.

El problema es que cuando vas a votar, mientras no refresques la página puedes seguir votando todas las veces que quieras.
Y por más que he buscado no sé como hacer para que sólo se pueda votar una vez antes de refrescar la página.

Si pueden decirme cómo hacer para que al pulsar en una de las estrellas diga: "gracias por tu voto" y no deje seguir votando se lo agradecería mucho.

Mi código es propio en toda la página salvo en el sistema de votaciones ya que apenas tengo conocimientos de jquery y ajax aunque sí lo he adaptado bastante a mi página.

Este es el código donde se ven las estrellas:
Código PHP:
        echo "<div id='$idmazmorra_' class='divValoracion'>";
            echo 
'<div class="estrella_1 estrellaSinVoto"></div>';
            echo 
'<div class="estrella_2 estrellaSinVoto"></div>';
            echo 
'<div class="estrella_3 estrellaSinVoto"></div>';
            echo 
'<div class="estrella_4 estrellaSinVoto"></div>';
            echo 
'<div class="estrella_5 estrellaSinVoto"></div>';
            echo 
'<div class="votosTotales">Necesita más votos</div>';
        echo 
'</div>'
Código PHP:
 public function votar() {
            
session_start();
            
$link1 mysqli_connect(SERVERUSERPASS);
            
mysqli_select_db($link1BD);
            
$query1 "INSERT INTO votaciones VALUES(NULL,'".$_SESSION['idusuario']."','".$_POST['mazmorra_id']."')";
            
$result1 mysqli_query($link1$query1);
            
// necesitamos saber qué estrella es la que se votó
            // para eso, usamos preg_match, que realiza una comparación 
            // tomando la expresión regular, la cadena de entrada (la estrella en la que hizo click) y dejando el resultado en $resultado
            
preg_match('/estrella_([1-5]{1})/'$_POST['clickEstrella'], $resultado);

            
// guardamos el valor de la estrella
            
$votar $resultado[1];
            
            
$ID $this->mazmorra_id;
            
// si existe la mazmorra en el arreglo (cargado en el constructor)
            
if($this->data[$ID]) {

                
// aumentamos el número de votos en 1
                
$this->data[$ID]['numeroDeVotos'] += 1;

                
// sumamos el voto a los votos totales
                
$this->data[$ID]['votosTotales'] += $votar;
            }
            else { 
// si no existe la mazmorra

                // indicamos que es el primer voto
                
$this->data[$ID]['numeroDeVotos'] = 1;

                
// indicamos el número del primer voto
                
$this->data[$ID]['votosTotales'] = $votar;
            }
            
            
// calculamos el promedioExacto
            
$this->data[$ID]['promedioExacto'] = 
                
round$this->data[$ID]['votosTotales'] / $this->data[$ID]['numeroDeVotos'], );

            
// redondeamos el promedio, para no tener que volver a hacerlo en la página
            
$this->data[$ID]['promedioRedondeado'] = round$this->data[$ID]['promedioExacto'] );
                
            
// guardamos el arreglo en formato plano de nuevo en el archivo de texto
            
file_put_contents($this->data_fileserialize($this->data));

            
// obtenemos el nuevo rating para enviárselo a la página
            
$this->obtenerRating();
        } 
El código no lo pongo completo, porque creo que el problema no lo requiere.
Pero si necesitan algún dato más díganmelo.

Muchas gracias de antemano a todo el que ayude.