PHP - Evitar volver atràs en páginas PHP

 
Vista:
Imágen de perfil de Reinaldo

Evitar volver atràs en páginas PHP

Publicado por Reinaldo (16 intervenciones) el 30/01/2018 01:11:17
Cordial saludo.

Tengo un sistema de votaciones hecho en PHP y utilizando la librerìa mysql (sí, se que ya no se usa pero por problemas con el CMS y por tiempo debo implementarlo así). En la página validar.php decide si un asociado de una empresa ya votó (controlado con una columna val_voto que es tinyint) y si no lo ha hecho, le permite seleccionar de una lista o select de html. Una vez ha votado, se carga otra pàgina que confirma el voto y hace los UPDATES correspondientes (votar.php)

EL problema es que en esta pàgina (votar.php) si el asociado ya votò y vuelve hacia atrás en el navegador, puede votar nuevamente, lo cual es un error dado que sólo puede votar una vez y no ha valido ni funciones de javascript ni borrar la cachè de la página. Anexo los códigos en espera de que alguien me pueda ayudar dado que tengo que entregar este sistema y soy muy novato en php.

valida.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<style type="text/css">
  label { color: black; font-family: Verdana; text-align: center;}
 
  .centrado{
	margin:10px auto;
	display:block;
	text-align: center;
    }
    H2 { color: black; font-family: Verdana; text-align: center;}
 
    input{
        color: black;
        font-family: Verdana;
      text-align: center;
    }
</style>
<script languaje="javascript">
    function funcion_javascript(){
        alert ("Estimado(a) asociado(a), su voto ya ha sido registrado o ha ingresado mal los datos, favor verif赤quelos e ingrese nuevamente.");
        location.href ="http://www.mipaginaweb.com";
    }
    function nodatos(){
        alert ("Los datos que han ingresado no son correctos, favor ingrese nuevamente");
        location.href ="http://www.mipaginaweb.com/inicio.php";
    }
    function voto(){
        alert ("Estimado(a) asociado(a), su voto ha sido registrado. Gracias por participar");
        location.href ="http://www.mipaginaweb.com";
    }
</script>
<div>
    <img class="centrado" src="logo.png" alt="">
    <h2>LISTADO DE CANDIDATOS A DELEGADOS DE SU ENTIDAD</h2>
</div>
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
//conecta a la base de datos
require 'bd.php';
//se obtienen los datos de un formulario anterior
	    $idasoc = $_POST['id'];
	    $anio = $_POST['anio'];
	    $mes = $_POST['mes'];
	    $dia = $_POST['dia'];
	    $fn = $anio."-".$mes."-".$dia;
//consulta que valida si el votante ya votó (val_voto es un tinyint)
        $ver_voto= mysql_query("select val_voto from aa_asoc_votan_ent where id_asoc='".$idasoc."'",$serv);
		$row = mysql_fetch_assoc($ver_voto);
		$var= $row['val_voto'];
//Valida si la variable var es 'true' y si es asì alerta al asociado y se devuelve a la pàgina inicio.php
			if ($var == '')
			{
				?> <script languaje="javascript"> funcion_javascript(); </script> <?php
            }
//si la variable var es 'false', carga el select
            else
	        {
//Obtiene un código de empresa para listar los candidatos disponibles
				$consulta2 = mysql_query("SELECT cod_empresa FROM aa_asoc_votan_ent WHERE id_asoc='".$idasoc."'",$serv);
				    while ($row = mysql_fetch_array($consulta2))
				    {
		      	        $cod_ent = $row['cod_empresa'];
				    }
//Consulta que obtiene el listado de los candidatos según la empresa y los carga en un select de html
				$consulta3 = mysql_query("SELECT iddeleg, nombre FROM aa_delegados WHERE cod_empresa='".$cod_ent."'",$serv);
?>
                        <div class="centrado">
                            <form method='post' action='votar.php' id="form1">
                                <div>
		                            <select name="delegados" autocomplete="off">
			                            <option>Seleccione un delegado...</option>
                                        <?
                                            while($row = mysql_fetch_array($consulta3))
                                            {
                                                echo "<option value=".$row['iddeleg'].">".$row['nombre']."</option>";
                                            }
                                        ?>
                                    </select>
                                </div>
		                        <div>
		                            <input type='submit' name='submit' value='Votar'onsubmit='voto()'>
<!--envía un input oculto con un valor de identificaciòn de asociado para comprobar en votar.php-->
		                            <input type='hidden' name='id' value='<?php echo htmlspecialchars($idasoc); ?>' >
		                        </div>
	                        </form>
	                    </div>
	<?php
                    }
//si no hay datos de candidatos que pueda votar el asociado o son incorrectos.                    
                    else
                    {
                        if($filas ==0)
                        {
                            ?> <script languaje="javascript"> nodatos(); </script>
                        <?php
                        }
                    }
            }

votar.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<script type="text/javascript">
window.onload=function(){
	Objeto=document.getElementsByTagName("a");
	for(a=0;a<Objeto.length;a++){
		Objeto[a].onclick=function(){
			location.replace(this.href);
			return false;
		}
	}
}
javascript:window.history.forward(1);
 
function deshabilitaRetroceso(){
    window.location.hash="no-back-button";
    window.location.hash="Again-No-back-button" //chrome
    window.onhashchange=function(){window.location.hash="no-back-button";}
}
 
function voto(){
   alert ("Estimado(a) asociado(a), su voto ha sido registrado. Gracias por participar");
   location.href ="http://www.feser.com.co";
}
</script>
 
<html>
 
<?
require 'bd.php';
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
//trae datos de valida.php
    $idd = $_POST['id'];
    $votado = $_POST['delegados'];
 
 
//Suma un voto al candidato	
	$consulta4 = mysql_query("UPDATE aa_delegados SET votos=votos+1 where cedula ='".$votado."'",$serv);
//Establece valor de true a la columna val_voto, es decir que el asociado ya votó-
	$consulta5 = mysql_query("UPDATE aa_asoc_votan_ent SET valida_voto='true' where cedula ='".$cced."'",$serv);
 
//si ya votó
$variable = 'true';
if ($variable){
?>
<script languaje="javascript">
voto();
deshabilitaRetroceso();
</script>
<?
}
 
?>
 
</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 604
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar volver atràs en páginas PHP

Publicado por Miguel (218 intervenciones) el 30/01/2018 03:13:15
La verdad no creo que esa sea una solución. Por qué no mejor creas una tabla con campos fecha, id_asociado, etc. para evitar estos inconvenientes?...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de santi
Val: 588
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar volver atràs en páginas PHP

Publicado por santi (204 intervenciones) el 02/02/2018 02:51:16
Hola,

evítalo con javascript:

1
2
3
4
window.onpopstate = function() {
  alert("no regreses...");
  return false;
}

O jQuery:

1
2
3
4
$(window).on('popstate', function(event) {
 alert("no regreses...");
  return false;
});

Lo he encontrado en stackoverflow ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar