Foros del Web » Programando para Internet » PHP »

Como restringir valoración por imagen y dia

Estas en el tema de Como restringir valoración por imagen y dia en el foro de PHP en Foros del Web. Necesito restringir las valoraciones de las imagenes de mi pagina a una vez por imagen y dia. tengo esta tabla: Código PHP: CREATE TABLE  IF  NOT EXISTS  ...
  #1 (permalink)  
Antiguo 19/04/2011, 07:15
 
Fecha de Ingreso: abril-2011
Mensajes: 6
Antigüedad: 8 años, 1 mes
Puntos: 0
Pregunta Como restringir valoración por imagen y dia

Necesito restringir las valoraciones de las imagenes de mi pagina a una vez por imagen y dia.

tengo esta tabla:

Código PHP:
CREATE TABLE IF NOT EXISTS `ip_votos` (
  `
idint(3NOT NULL auto_increment,
  `
ipvarchar(16NOT NULL,
  `
id_imagenint(4NOT NULL,
  `
datevarchar(11NOT NULL,
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=
y este es parte del codigo:


Código PHP:
<?php require("config.php");
  
  
//conecta con la base de datos
  
@mysql_connect($db_server,$db_user,$db_password) or die("No pudo conectarse con la base de datos del servidor. Compruebe las variables \$db_server, \$db_user y \$db_password en config.php");
  @
mysql_select_db($db_name) or die("La selección de la base de datos ha fallado. Compruebe la variable \$db_name en config.php");
 
  
//actualiza votos
  
$id $_POST["id"];
  
$vote $_POST["vote"];
  
//IP
  
$ip $_SERVER['REMOTE_ADDR'];
  
$fecha=date('d-m-Y');

  
//a partir de aqui es lo que he puesto para la Restriccion de IP
  
  
$sqls = @mysql_query("SELECT COUNT(*) FROM $db_ip_votos WHERE ip=$ip AND id_imagen={$_POST["id"]} AND date=$fecha");
  
$resultado=mysql_query($sqls) or die (mysql_error());
  
  if (
mysql_result($resultado,0) == 0){

  
//actualiza los votos en la base de datos
  
if(isset($id) && isset($vote)){
      @
mysql_query("UPDATE $db_table_pictures SET points=points+$vote,votes=votes+1 WHERE id=$id;");

  
//registra cada vez que votas una imagen la ip, el id de la imagen y la fecha
      
$sql = @mysql_query("INSERT INTO $db_ip_votos (ip,id_imagen,date) VALUES('$ip',{$_POST["id"]},'$fecha');");
  }
  
//restriccion de ip
  
} else {
   echo 
"Su ip: $ip ya havotado esta imagen, su voto no será válido";
  }

//Hasta aqui la actualizacion de los votos


 //store comment
  
$comment_name $_POST["comment_name"];
  
$comment_text $_POST["comment_text"];
  
  if(isset(
$comment_name) && isset($comment_text) && strlen($comment_name)>&& strlen($comment_text)>2){
    
$comment_name str_replace("<","&lt;",$comment_name);
    
$comment_name str_replace(">","&gt;",$comment_name);
    
$comment_name stripslashes($comment_name);

    
$comment_text str_replace("<","&lt;",$comment_text);
    
$comment_text str_replace(">","&gt;",$comment_text);
    
$comment_text stripslashes($comment_text);

    @
mysql_query("INSERT INTO $db_table_comments (id_pic,name,text,date) VALUES({$_POST["show"]},'$comment_name','$comment_text',".time().");");
  }
  
  
//image to be displayed
  
if(!isset($_GET["show"]) && !isset($_POST["show"])){
    
//random image
    
$ids = array();
    
$result = @mysql_query("SELECT id FROM $db_table_pictures;");
    list(
$min) = @mysql_fetch_row(@mysql_query("SELECT id FROM $db_table_pictures WHERE id>1 ORDER BY id ASC;"));
    list(
$max) = @mysql_fetch_row(@mysql_query("SELECT id FROM $db_table_pictures WHERE id>1 ORDER BY id DESC;"));
    
    while(list(
$ids[]) = @mysql_fetch_row($result));
    
    while(
true){
      
srand((double)microtime()*1000000);
      
      
$show rand($min,$max);
      
      if(
array_search($show,$ids)){
        break;
      }
    }
  }else{
    
//specific image
    
$show = isset($_GET["show"]) ? $_GET["show"] : $_POST["show"];
  }


  
$row = @mysql_fetch_array(@mysql_query("SELECT * FROM $db_table_pictures WHERE id=$show;"));
  list(
$next) = @mysql_fetch_row(@mysql_query("SELECT id FROM $db_table_pictures WHERE id>$show ORDER BY id ASC LIMIT 0,1;"));

  
//calculate points
  
if($row["points"] != 0){
    
$row["points"] = number_format($row["points"]/$row["votes"],2,".","");
  }
  
  
//next image
  
if(!$next){
    list(
$next) = @mysql_fetch_row(@mysql_query("SELECT id FROM $db_table_pictures WHERE id>1 ORDER BY id ASC LIMIT 0,1;"));
  }
 
  
//print header
  
echo $header;
  
 
  
//print html
          
?><form action="vota.php" method="post">
            <table align="center" border="0" cellpadding="2" cellspacing="0">
              <tr>
                <td rowspan="2"><img src="imagenes/bad.png" width="50" height="50" /></td>
                <td rowspan="2" width="10">&nbsp;</td><?php

  
//voting form
  
for($i=1;$i<=$max_points;$i++){
                
?><td align="center"><?php echo $i?></td><?php
  
}

                
?><td rowspan="2" width="10">&nbsp;</td>
                <td rowspan="2"><img src="imagenes/good.png" width="50" height="50" /></td>
              </tr>
              <tr><?php

  
for($i=1;$i<=$max_points;$i++){
                
?><td align="center">
                
                <input type="radio" name="vote" value="<?php echo $i?>" onclick="submit();"></td><?php
  
}

              
?></tr>
            </table>
            <input name="show" type="hidden" value="<?php echo $next?>">
            <input name="id" type="hidden" value=" <?php echo $row["id"]; ?>">
          </form>
        </td>
      </tr>
      <tr>
        <td colspan="2" height="8">&nbsp;</td>
      </tr>
      <tr>
        <td align="center" colspan="2" height="<?php echo $img_height?>"><img alt="" border="0" src="<?php echo $img.$show.$img_format_info?>"></td>
      </tr>
      <tr>
        <td colspan="2" height="10">&nbsp;</td>
      </tr>
      <tr>
        <td colspan="2" height="10">&nbsp;</td>
      </tr>
      <tr>
        <td colspan="2" height="10">&nbsp;</td>
      </tr>
      <tr>
        <td valign="top" width="50%">Imagen de <span class="resaltar"><?php echo $row["creator"]; ?>&nbsp;<?php echo $row["apellidos"]; ?></span><br><br>
        <span class="resaltar">Descripci&oacute;n de la Im&aacute;gen:</span><br /><br /><?php echo $row["comment"]; ?><br><br></td>
        <td align="right" valign="top" width="50%">Puntos: <span class="resaltar"><?php echo $row["points"]; ?></span> (<?php echo $row["votes"]; ?> votos)<br><br></td>
      </tr>
      <td colspan="2">
        <hr><?php

  $result 
= @mysql_query("SELECT * FROM $db_table_comments WHERE id_pic={$row["id"]} ORDER BY date DESC;");

  if(@
mysql_num_rows($result) == 0){
    
?>Sin comentarios<?php
  
}else{
    while(
$row = @mysql_fetch_array($result)){
        
?><span class="resaltar"><?php echo $row["name"]; ?></span> Escribe el <?php echo date("m/d/Y",$row["date"]); ?> a las <?php echo date("h:i a",$row["date"]); ?>:<br>
        <?php echo $row["text"]; ?>
        <br><br><?php
    
}
  }

        
?><hr>
        <b class="resaltar">Escribe un comentario:</b>
        <form action="vota.php" method="post">
          <table align="center" border="0" cellpadding="5" cellspacing="0">
            <tr>
              <td>Su nombre:</td>
              <td><input maxlength="50" name="comment_name" size="30" type="text"></td>
            </tr>
            <tr>
              <td valign="top">Comentario:</td>
              <td><textarea cols="70" name="comment_text" onkeyup="this.value=this.value.slice(0,<?php echo $comment_size?>);" rows="6"></textarea></td>
            </tr>
            <tr>
              <td>&nbsp;</td>
              <td><input type="submit" value="Enviar"></td>
            </tr>
          </table>
          <input name="show" type="hidden" value="<?php echo $show?>">
        </form><?php
  
  
//print footer
  
echo $footer;

  
//close database connection
  
@mysql_close();
?>
No se si estoy haciendo lo correcto ya que soy novato en php, si alguien me puede ayudar y decirme cual es el fallo o que codigo deberia poner se lo agradezco.

Muchas gracias
  #2 (permalink)  
Antiguo 19/04/2011, 08:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: Como restringir valoración por imagen y dia

podrias solo con la ip y la fecha y el id, mi criterio es el siguiente:

una tabla aparte de votacion donde guardarias las votaciones por fecha, ip,id para ir comparando solo es un aporte.
  #3 (permalink)  
Antiguo 19/04/2011, 09:38
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.650
Antigüedad: 11 años, 2 meses
Puntos: 336
Respuesta: Como restringir valoración por imagen y dia

intenta cambiando esto:

Código PHP:
Ver original
  1. //IP
  2.   $ip = $_SERVER['REMOTE_ADDR'];
  3.   //$fecha=date('d-m-Y');
  4.  
  5.   //a partir de aqui es lo que he puesto para la Restriccion de IP
  6.  
  7.   $sqls = @mysql_query("SELECT COUNT(*) FROM $db_ip_votos WHERE ip=$ip AND id_imagen={$_POST["id"]} AND date=NOW()");
  8.   $resultado=mysql_query($sqls) or die (mysql_error());
  9.  
  10.   if (mysql_result($resultado,0) == 0){
  11.  
  12.   //actualiza los votos en la base de datos
  13.   if(isset($id) && isset($vote)){
  14.       @mysql_query("UPDATE $db_table_pictures SET points=points+$vote,votes=votes+1 WHERE id=$id;");
  15.  
  16.   //registra cada vez que votas una imagen la ip, el id de la imagen y la fecha
  17.       $sql = @mysql_query("INSERT INTO $db_ip_votos (ip,id_imagen,date) VALUES('$ip',{$_POST["id"]},NOW());");
  18.   }

loque hice fue cambiar la fecha que estas usando en php ($fecha) por la fecha actual de mysql (NOW()), esto es por que a veces la fecha no coincide con el formato que estas usando ('d-m-Y'), mysql usa el formato alreves ('Y-m-d'), usando NOW() te evitas cualquer problema.
  #4 (permalink)  
Antiguo 19/04/2011, 10:12
 
Fecha de Ingreso: abril-2011
Mensajes: 6
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Como restringir valoración por imagen y dia

He cambiado lo de la fecha como me has dicho pero cuando subo la pagina al servidor para probar me da este mensaje "Query was empty".

Voy a explicar un poco que es lo que tengo y lo que quiero hacer. El codigo lo que hace es mostrar una imagen desede una tabla, el usuario valora de 1 a 10 cada imagen y pasa a la siguiente, pero el problema es que se pueden valorar de nuevo todas las imagenes las veces que quieras, entonces lo que queria hacer o intentar hacer es limitar a que solo se pueda valorar una vez cada imagen al dia, por eso he creado otra tabla en la que cada vez que valoran una imagen almacena la ip del que valora, la id de la imagen que ha valorado y la fecha en la que lo hizo. Para asi poder recoger los datos y poder compararlos para que no puedan valorar la misma imagen de nuevo.

Como soy novato en php, no se si lo estoy haciendo bien porque no me funciona.

Gracias de antemano por vuestra ayuda y tiempo
  #5 (permalink)  
Antiguo 19/04/2011, 10:24
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.650
Antigüedad: 11 años, 2 meses
Puntos: 336
Respuesta: Como restringir valoración por imagen y dia

ok creo que es por la variable de imagen, intenta así:

Código PHP:
Ver original
  1. //IP
  2.   $ip = $_SERVER['REMOTE_ADDR'];
  3.   //$fecha=date('d-m-Y');
  4.  
  5.   //a partir de aqui es lo que he puesto para la Restriccion de IP
  6.  
  7. $img=$_POST["id"];
  8.   $sqls = @mysql_query("SELECT COUNT(*) FROM $db_ip_votos WHERE ip=$ip AND id_imagen='$img' AND date=NOW()");
  9.   $resultado=mysql_query($sqls) or die (mysql_error());
  10.  
  11.   if (mysql_result($resultado,0) == 0){
  12.  
  13.   //actualiza los votos en la base de datos
  14.   if(isset($id) && isset($vote)){
  15.       @mysql_query("UPDATE $db_table_pictures SET points=points+$vote,votes=votes+1 WHERE id=$id;");
  16.  
  17.   //registra cada vez que votas una imagen la ip, el id de la imagen y la fecha
  18. $img=$_POST["id"];
  19.       $sql = @mysql_query("INSERT INTO $db_ip_votos (ip,id_imagen,date) VALUES('$ip','$img',NOW());");
  20.   }
  #6 (permalink)  
Antiguo 19/04/2011, 10:25
 
Fecha de Ingreso: abril-2011
Mensajes: 6
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Como restringir valoración por imagen y dia

Cita:
Iniciado por dehost Ver Mensaje
podrias solo con la ip y la fecha y el id, mi criterio es el siguiente:

una tabla aparte de votacion donde guardarias las votaciones por fecha, ip,id para ir comparando solo es un aporte.
Tengo una tabla donde se almacenan las imagenes y los votos, y otra donde almaceno la ip del que vota, la imagen que ha votado y la fecha.

La otra tabla que no he puesto es esta:

Código PHP:
CREATE TABLE IF NOT EXISTS `image_voting_pictures` (
  `
idint(10unsigned NOT NULL,
  `
creatorvarchar(50NOT NULL,
  `
emailvarchar(100NOT NULL,
  `
commentvarchar(255NOT NULL,
  `
pointsint(10unsigned NOT NULL,
  `
votesint(10unsigned NOT NULL,
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM DEFAULT CHARSET=utf8
  #7 (permalink)  
Antiguo 19/04/2011, 10:29
 
Fecha de Ingreso: abril-2011
Mensajes: 6
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Como restringir valoración por imagen y dia

Sigue dando el mismo el mismo mensaje

Etiquetas: dia, imagenes, ip, restringir
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:59.