Foros del Web » Programando para Internet » PHP »

Un voto por usuario.

Estas en el tema de Un voto por usuario. en el foro de PHP en Foros del Web. Buenas, nuevamente preguntando sobre este inconveniente. Resumiendo: tengo un script de votos relacionado con el sistema de noticias y lo q quiero conseguir es q ...
  #1 (permalink)  
Antiguo 12/04/2010, 20:12
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Un voto por usuario.

Buenas, nuevamente preguntando sobre este inconveniente.
Resumiendo: tengo un script de votos relacionado con el sistema de noticias y lo q quiero conseguir es q el usuario solo pueda votar una vez.

Despues de seguir los consejos y leer un poco, llegue a hacer lo siguiente:

Primero pongo el script original:

Código PHP:
<?
#####CONEXIÓN A MYSQL
@mysql_connect('localhost','usuario','pass')or die ('Ha fallado la conexión: '.mysql_error());
@
mysql_select_db('base_de_datos')or die ('Error al seleccionar la BD: '.mysql_error());
////end conexión
$SSQL_=mysql_query("SELECT * FROM valoraciones WHERE id_noticia='".$_GET[id]."'")or die(mysql_error());
$array_d=mysql_fetch_array($SSQL_);
$valoracioN_total=@round($array_d[ptos]/$array_d[num_votos],2);

if(isset(
$_POST[valor])){
   if(
mysql_num_rows($SSQL_)==0){
   @
mysql_query("INSERT INTO valoraciones VALUES('".$_GET[id]."','1','".$_POST[valor]."')")or die ('ERROR AL INSERTAR REGISTRO: '.mysql_error());
   }else{
   @
mysql_query("UPDATE valoraciones SET num_votos=num_votos+1,ptos=ptos+".$_POST[valor]." WHERE id_noticia='".$_GET[id]."'")or die ('ERROR AL MODIFICAR REGISTRO: '.mysql_error());
   }
   
header('Location:'.$REQUEST_URI);
   exit;
}

echo 
'<strong>Valoración Media : '.$valoracioN_total.'</strong> <div style="background-color:#EFEFEF; width:50px"><img width="'.($valoracioN_total*5).'" height="6" style="background-color: #000099"></div> <br>Total de votos: '.$array_d[num_votos];

?><hr>
<form action="<? echo $REQUEST_URI;?>" method="post">
Nueva valoración:
<select name="valor" id="valor">
<? for ($i=1$i<=10 $i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select>
<input type="submit" value="Votar por este artículo">
</form>


...y asi es como lo deje hasta el momento:

Código PHP:
<?  
#####CONEXIÓN A MYSQL
@mysql_connect('****','****','****')or die ('Ha fallado la conexión: '.mysql_error());
@
mysql_select_db('****')or die ('Error al seleccionar la BD: '.mysql_error());
////end conexión

if(isset($_POST[valor])){

$SSQL_=mysql_query('SELECT ip FROM sn_noticias WHERE ip="'.$REMOTE_ADDR.'"')or die(mysql_error());

if(
mysql_num_rows($SSQL_)>=1){
echo 
'<font color="#FF0000" face="tahoma" size="2"><strong>Usted ya voto!</strong></font>';
}
else {

$SSQL_=mysql_query("SELECT * FROM sn_noticias WHERE not_ID='".$_GET[not_ID]."'")or die(mysql_error());
$array_d=mysql_fetch_array($SSQL_);
$valoracioN_total=@round($array_d[not_Punto]/$array_d[notVoto],2);


if(isset(
$_POST[valor])){
   if(
mysql_num_rows($SSQL_)==0){
   @
mysql_query("INSERT INTO sn_noticias VALUES('".$_GET[not_ID]."','1','".$_POST[valor]."')")or die ('ERROR AL INSERTAR REGISTRO: '.mysql_error());
   }else{
   @
mysql_query("UPDATE sn_noticias SET notVoto=notVoto+1,notPunto=notPunto+".$_POST[valor]." WHERE not_ID='".$_GET[not_ID]."'")or die ('ERROR AL MODIFICAR REGISTRO: '.mysql_error());
   }
   
header('Location:'.$REQUEST_URI);
   exit;

}
}

'<strong>Valoración Media : '.$valoracioN_total.'</strong> <div style="background-color:#EFEFEF; width:50px"><img width="'.($valoracioN_total*5).'" height="6" style="background-color: #000099"></div> <br>Total de votos: '.$array_d[notVoto];


?>
<form action="<? echo $REQUEST_URI;?>" method="post">
Te gustó éste aporte <? echo $check["uname"?>?, puntualo y votá:
<select name="valor" id="valor">
<? for ($i=1$i<=$i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select>
<br><br>
<input type="submit" value="Votar" style="width: 80px">
</form>
...entonces q fue lo q hice?: primero modifiqué la tabla del sistema de noticias agregandole los campos notVoto, notPunto e ip. Luego aprendi a almacenar la ip y luego intenté armar una condición y así lograr lo de un un voto por usuario.
Al probar el script modificado me encuentro con q la limitacion funciona, es decir, sale el aviso "Usted ya voto!" luego de presionar el boton "Votar" pero no efectua la votacion, seria q me almacena la ip antes de efectuar el primer voto, entonces no se como modificar la condicion para resolver eso.

Luego movi la llave (}) del primer else (el de la condicion para limitar) para q abarque todo el script, pensandolo de la siguiente manera: en todo momento muestra el formulario de voto, pero si la ip esta almacenada sale el aviso y si no q me deje efectuar el voto. Al hacer esto me deja votar, se contabiliza el voto pero no me restringe a votar una sola vez. Sale el aviso de "Usted ya voto!" pero sigue contabilizando los votos.

Entrando aquí pueden ver los q les digo: http://rretro.site50.net/desc/visor.php?not_ID=1

Hay 5 noticias de prueba asi q ya saben como hacer para cambiarlas.

Cualquier cosa q no se entienda me la hacen saber asi la explico mejor.

Gracias.

Etiquetas: 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 05:34.