Un solo voto por usuario
Resulta que estoy creando una web con sistema de noticias. El problema se me presento cuando integro un pequeño script de votos y puntaje para valorar las noticias, no se si seria problema, lo que quiero lograr es que solo se pueda votar una vez por usuario.
Entonces tengo el archivo que muestra la noticia completa (visor.php) y tengo el script de los votos (votar.php) que lo incluyo a visor.php por medio de include. Todo eso se ve perfecto, se puede votar y salen los resultados pero quiero lograr que el usuario vote una sola vez.
Se que puedo hacerlo por medio cookies o por ip, creando una tabla pero no encuentro ejemplos más específicos y no se como hacerlo por eso te lo pregunto a vos.
Te dejo los archivos antes mencionados:
visor.php
<?php
include('db-cnx.php');
$not_ID = $_GET['not_ID'];
$sqlQueryNot = mysql_query("SELECT not_ID, notUser, notTitulo, notTexto, notVoto, notPunto FROM sn_noticias WHERE not_ID = '$not_ID'", $db_link)
or die(mysql_error);
include('comments_ram.php');
while($rowNot = mysql_fetch_array($sqlQueryNot)){
echo $rowNot['notTitulo'];
echo $rowNot['notTexto'];
echo $rowNot['notUser'];
view_comments ($rowNot['not_ID']);
include ('votar.php');
echo $rowNot['notVoto'];
}
?>
votar.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
$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[notPunto]/$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];
?>
<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" style="width: 194px">
</form>
...y esos archivos utilizan esta tabla
CREATE TABLE `sn_noticias` (
`not_ID` int(11) NOT NULL auto_increment,
`notUser` varchar(25) NOT NULL,
`notTitulo` varchar(255) NOT NULL,
`notTexto` text NOT NULL,
`notVoto` int(20) NOT NULL default '0',
`notPunto` int(20) NOT NULL default '0',
`notCategoriaID` int(11) NOT NULL,
PRIMARY KEY (`not_ID`)
) ENGINE=MyISAM;
... Bueno, ojala puedas guiarme a ver que puedo hacer.
Entonces tengo el archivo que muestra la noticia completa (visor.php) y tengo el script de los votos (votar.php) que lo incluyo a visor.php por medio de include. Todo eso se ve perfecto, se puede votar y salen los resultados pero quiero lograr que el usuario vote una sola vez.
Se que puedo hacerlo por medio cookies o por ip, creando una tabla pero no encuentro ejemplos más específicos y no se como hacerlo por eso te lo pregunto a vos.
Te dejo los archivos antes mencionados:
visor.php
<?php
include('db-cnx.php');
$not_ID = $_GET['not_ID'];
$sqlQueryNot = mysql_query("SELECT not_ID, notUser, notTitulo, notTexto, notVoto, notPunto FROM sn_noticias WHERE not_ID = '$not_ID'", $db_link)
or die(mysql_error);
include('comments_ram.php');
while($rowNot = mysql_fetch_array($sqlQueryNot)){
echo $rowNot['notTitulo'];
echo $rowNot['notTexto'];
echo $rowNot['notUser'];
view_comments ($rowNot['not_ID']);
include ('votar.php');
echo $rowNot['notVoto'];
}
?>
votar.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
$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[notPunto]/$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];
?>
<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" style="width: 194px">
</form>
...y esos archivos utilizan esta tabla
CREATE TABLE `sn_noticias` (
`not_ID` int(11) NOT NULL auto_increment,
`notUser` varchar(25) NOT NULL,
`notTitulo` varchar(255) NOT NULL,
`notTexto` text NOT NULL,
`notVoto` int(20) NOT NULL default '0',
`notPunto` int(20) NOT NULL default '0',
`notCategoriaID` int(11) NOT NULL,
PRIMARY KEY (`not_ID`)
) ENGINE=MyISAM;
... Bueno, ojala puedas guiarme a ver que puedo hacer.
1 respuesta
Respuesta de Jorge Vila
1