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<=5 ; $i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select>
<br><br>
<input type="submit" value="Votar" style="width: 80px">
</form>
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.