1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Evitar volver atrás página PHP en sistema de votación si usuario ya ha votado
« en: 30 de Enero 2018, 01:15 »
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
votar.php
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
Código: [Seleccionar]
<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
Código: [Seleccionar]
<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>