Foros del Web » Programando para Internet » PHP »

encuesta un solo voto por usuario

Estas en el tema de encuesta un solo voto por usuario en el foro de PHP en Foros del Web. Hola amigos: He hecho una web en php y mysql con unas tablas donde gusrdo informacion de usuarios, fotos, datos varios etc. me han pedido ...
  #1 (permalink)  
Antiguo 26/07/2010, 03:16
 
Fecha de Ingreso: julio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
encuesta un solo voto por usuario

Hola amigos:
He hecho una web en php y mysql con unas tablas donde gusrdo informacion de usuarios, fotos, datos varios etc.
me han pedido que inserte en la web un sistema de encuestas (que tambien he hecho y funciona bien, ofrece los resultados en una pagina a parte, pero me piden que solo se pueda votar una vez por dia y usuario.
Mi problema es que cuando intento hacer coincidir la tabla de usuarios (email y contraseña) para identificarse como requisito para poder votar, al hacer la identificacion de usuarios, no me reconoce el sistema de encuestas y viceversa, es decir solo me funciona por separado.
he intentado con varios sistemas que he encontrado pero no doy con la solucion, la verdad estoy hecho un lio .
No puedo usar dos action en un mismo formulario y tampoco se de que manera al pulsar sobre el boton ENVIAR DATOS, el sistema de autentificacion reconozca al uauario y si ya voto no le deje votar de nuevo.

no se si me habre expresado bien.
El sistema de deteccion de ip no me es funcional porque da datos erroneos pues con las ips dinamicas no funciona correctamente.
y el sistema de cookies, tampoco pues sabemos que es muy facil borrarlas y volver a votar.

¿podeis ayudarme.?.
Gracias de antemano.

balo00o0
  #2 (permalink)  
Antiguo 26/07/2010, 03:25
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: encuesta un solo voto por usuario

Para saber si un usuario ha votado ese dia puedes crear una columna nueva en la tabla de usuario o crear una tabla donde esté esté el nombre del usuario y otra columna que sea por ejemplo 'votado', que sea booleano y pongas true o false.

Sobre lo de juntar lo de logear y la encuesta, no te puedo ayudar mucho así.
Dices que haciendo un formulario que pregunte nombre y pass y que despues redireccione no te funciona?
Pon algo de codigo, si no andamos a tientas.
  #3 (permalink)  
Antiguo 26/07/2010, 07:28
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: encuesta un solo voto por usuario

Hola btaca...

Pues además del usuario, email (que deben ser campos unicos no repetibles en la base de datos), podrías añadir en la BD de la encuesta la fecha. Antes de agregar el registro a la encuesta, le dices que verifique (p.ejem) la ID del usuario, el nombre de usuario y la fecha... Si todos coinciden imprime "no se puede votar" y si la fecha (en este caso el campo clave) no coincide, el voto será aceptado.

Código PHP:
// Ejemplo al vuelo...
$sql SELECT FROM table WHERE usuario $var_usuario AND email $var_email AND fecha $var_fecha;
$resultado mysql_query($sql) or die (mysql_error());

if(
$resultado) {
    echo 
'Tendras que esperar hasta mañana para votar nuevamente!';
} else {
    
$sql_insertar INSERT INTO table (usuarioemail fechaVALUES ('$var_usuario','$var_email','$var_fecha');
// + el resto del codigo

Saludos
__________________
Andrew :P
  #4 (permalink)  
Antiguo 27/07/2010, 05:33
 
Fecha de Ingreso: julio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Busqueda Respuesta: encuesta un solo voto por usuario

Hola:
Ante todo gracias por interesaros por mi problema.
Como me pedis y para que sea un poco mas entendible lo que deseo hacer, os remito el codigo de las dos paginas que estan afectadas por los errores a ver si podeis conseguir darme un poco de luz en el porque del funcionamiento solo a medias de este sistema de encuestas.
Gracias por ayudarme.


codigo de la pagina encuestas.php


<?php require_once('Connections/la_mia.php'); ?>
<?php
mysql_select_db($database_enk, $enk);
$query_voto = "SELECT usuaris.email, usuaris.contrassenya, usuaris.vot, tblenc.encid, tblenc.encprg, tblenc.encrpt1, tblenc.encrpt2, tblenc.encrpt3, tblenc.encrpt4, tblenc.encval1, tblenc.encval2, tblenc.encval3, tblenc.encval4, tblenc.enctot, tblenc.votar FROM usuaris,tblenc ";
$voto = mysql_query($query_voto, $castellar) or die(mysql_error());
$row_voto = mysql_fetch_assoc($voto);
$totalRows_voto = mysql_num_rows($voto);

$SQLquery = "SELECT * FROM tblenc order by encid desc";
$SQLresult = mysql_query($SQLquery);
$SQLrow = mysql_fetch_array($SQLresult);
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['email'])) {
$loginUsername=$_POST['email'];
$password=$_POST['contrassenya'];
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "resultado.php";
$MM_redirectLoginFailed = "form_usuaris.php";
$MM_redirecttoReferrer = false;
mysql_select_db($enk, $enk);

$LoginRS__query=sprintf("SELECT email, contrassenya FROM usuaris WHERE email='%s' AND contrassenya='%s'",
get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password));

$LoginRS = mysql_query($LoginRS__query, $castellar) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";

//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
<form name="voto" method="POST" action="<?php echo $loginFormAction; ?>">
<table width="220" border="0" align="right" cellpadding="0" cellspacing="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><center>
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="29%">email : </td>
<td width="71%"><label>
<input name="email" type="text" id="email" size="20" maxlength="50">
</label></td>
</tr>
</table></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="53%">contrassenya : </td>
<td width="47%"><label>
<input name="contrassenya" type="password" id="contrassenya" size="12" maxlength="12">
</label></td>
</tr>
</table></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong><? echo $SQLrow[1]?></strong></font></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> <div align="left"><font size="2">
<input type="radio" name="voto" value="1">
<? echo $SQLrow[2]?></font>
</div></td>
</tr>
<tr>
<td> <div align="left"><font size="2">
<input type="radio" name="voto" value="2">
<? echo $SQLrow[3]?></font>
</div></td>
</tr>
<tr>
<td> <div align="left"><font size="2">
<input type="radio" name="voto" value="3">
<? echo $SQLrow[4]?></font>
</div></td>
</tr>
<tr>
<td> <div align="left"><font size="2">
<input type="radio" name="voto" value="4">
<? echo $SQLrow[5]?></font>
</div></td>
</tr>
</table></td>
</tr>
<tr>
<td><div align="right">
<input name="votar" type="submit" id="votar" value="Procedir a Votar">
</div></td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<p align="right">

<p align="right"><font size="2">
<label></label>
</font>

<div align="right"></div>
<p align="right">
<input type=hidden name="encid" value="<?echo $SQLrow[0]?>">
</form>




<td>&nbsp;</td>
<div align="right">
</tr>
</table>
</div>
</body>
</html><?php
mysql_free_result($voto);
?>




codigo de la pagina resultado.php



<?php require_once('Connections/la_mia.php'); ?>
<?
echo $loginFormAction;
//recibo el voto
$voto = $_POST["voto"];
//recibo el id de la encuesta
$encid = $_POST["encid"];


mysql_select_db($enk, $enk);
$SQLquery = "UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid";
$SQLresult = mysql_query($SQLquery);
$SQLquery = "SELECT * FROM tblenc where encid=$encid";
$SQLresult = mysql_query($SQLquery);
$SQLrow = mysql_fetch_array($SQLresult);
?>
<P ALIGN="center"><font size="4"><strong><em>RESULTADOS PARCIALES DE LA
ENCUESTA</em></strong></font></P>
<P ALIGN="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<?
echo $SQLrow["encprg"]
?>
</font></strong></P>
<TABLE ALIGN="center" WIDTH="75%" BORDER="0" CELLSPACING="1" CELLPADDING="1">
<!--DWLayoutTable-->
<TR>
<TD ALIGN="left" WIDTH="23%"><? echo $SQLrow["encrpt1"]?>
<div align="left"></div></TD>
<TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval1"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra1.gif"></TD>
<TD ALIGN="center" WIDTH="14%"><? echo $SQLrow["encval1"]?> votos</TD>
</TR>
<TR>
<TD ALIGN="left"><? echo $SQLrow["encrpt2"]?>
<div align="left"></div></TD>
<TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval2"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra2.gif"></TD>
<TD ALIGN="center"><? echo $SQLrow["encval2"]?> votos</TD>
</TR>
<TR>
<TD ALIGN="left"><? echo $SQLrow["encrpt3"]?>
<div align="left"></div></TD>
<TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval3"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra3.gif"></TD>
<TD ALIGN="center"><? echo $SQLrow["encval3"]?> votos</TD>
</TR>
<TR>
<TD ALIGN="left"><? echo $SQLrow["encrpt4"]?>
<div align="left"></div></TD>
<TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval4"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra4.gif"></TD>
<TD ALIGN="center"><? echo $SQLrow["encval4"]?> votos</TD>
</TR>
</TABLE>
<P ALIGN="center">Total de votos emitidos: <? echo $SQLrow["enctot"]?></P>

<?php
mysql_free_result($voto);
?>



Si escribo en los text box un nombre de usuario que no existe o con algun error de identificacion, funciona bien y redirige a la pàgina de alta de usuarios, en cambio si le doy un nombre de usuario y contraseña correcta, me pasa a la pagina de resultado.php pero no se refleja el voto ni las barras de estadistica y aparecen los siguientes errores :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\encuesta\resultado.php on line 15


Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\encuesta\resultado.php on line 54


He comprobado una y otra vez y no soy capaz de dar con el o los errores.

Gracias de nuevo por vuestro tiempo y colaboracion.

balo0o0o0

Última edición por btaca; 27/07/2010 a las 05:43
  #5 (permalink)  
Antiguo 27/07/2010, 06:46
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 13 años, 9 meses
Puntos: 27
Respuesta: encuesta un solo voto por usuario

Primero, te agradecería que cuando pegues el código resaltes la sintaxis porque es más fácil de leer es solo una recomendación.

Segundo, en resultados.php ten cuidado con $encid, porque no lo depuras y cualquier usuario podría enviar algo que provocase una SQL injection(búscalo en google si no sabes lo que es, encontrás un montón de cosas útiles)

Tercero, me parece que el problema lo tienes con eso mismo. ¿Has comprobado que $encid funciones correctamente y estés recibiendo correctamente el id de la encuesta? El problema de todo esto es que $SQLQuery de la línea 13 o 14 era no funciona. No le tienes puesto un "or die(mysql_error());" y ni siquiera te has enterado de que ha fallado la petición. Pero si tampoco ves con por ejemplo phpMyAdmin o el panel de control que tengas no ves en la base de datos que los votos aumenten seguramente el error lo tengas en $encid, y tampoco el UPDATE para actualizar los votos encuentra la encuesta correctamente.

Pon chivatos en la página solo como prueba, algo así:
Código PHP:
Ver original
  1. echo $encid;
  2. die();

A ver si te sale lo que de verdad quieres que te salga.
  #6 (permalink)  
Antiguo 28/07/2010, 05:34
 
Fecha de Ingreso: julio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: encuesta un solo voto por usuario

Hola otra vez:
Gracias por tus sugerencias y recomendaciones, intentare haerlo asi.
Por lo que me decis de la seguridad etc. debo decir que la aplicacion no esta terminada ni mucho menos porque entre otras cosas esta el problema del funcionamiento antes de poner los condicionales "if" de seguridad.
El problema me viene dado porque el formulario en si, esta basado en dos.
me explico, por una parte el email y la contraseña perteneciente a la tabla usuarios y por el otro una aplicacion que me encontre ya hecha con los campos de la tabla que se deben de crear en una tabla nueva distinta a la tabla usuarios y que individualmente funciona perfectamente cada cosa, pero al hacer un solo formulario con ambas, si que funciona el sistema de usuarios pero no asi el de control de la encuesta.
He mirado y efectivamente tienes razon, no me recolecta los votos el formulario, creo que es debido a que en el action del mismo se efectua la conexion de usuario y si todo es corecto, redirige a la pagina resultado y si no va bien a la de alta de usuarios y no se como arreglar este problema, ¿tal vez dirigir a una pagina php con la funcion de derivar a cada tabla lo que se le consulta? no lo se, estoy hecho un verdadero lio, espeso, muy espeso.
ayuda por favor.
Gracias.
balo0o0o0

Etiquetas: encuesta, votos, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:02.