Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error en el sistema de Likes/Dislikes

Estas en el tema de Error en el sistema de Likes/Dislikes en el foro de PHP en Foros del Web. Muy buenas, Pues aquí tengo un problemita, lo que pasa es que se muestran 3 registros en una tabla, y en cada registro se tiene ...
  #1 (permalink)  
Antiguo 07/08/2013, 17:52
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Busqueda Error en el sistema de Likes/Dislikes

Muy buenas,
Pues aquí tengo un problemita, lo que pasa es que se muestran 3 registros en una tabla, y en cada registro se tiene la opción de darle like o dislike. El meollo del asunto es que si le doy like al primer registro, los 3 registros me pone 1 like para cada uno, si le doy like al 2do registro, el 2do y el 3er registro se van a añadir 1 like. Pero lo que yo quiero es que sólo se agregue el like al registro que estoy seleccionando. Suena muy complicado pero ojalá me entiendan, es que llevo días tratando de resolver este error.


Ejemplo, si le doy like al primer registro, los otros dos también me les pone el like (imagen de abajo), pero se supone que sólo se debe reflejar el resultado en el primero y no en el segundo ni en el tercero:


Sólo para aclarar que la subida a la base de datos está bien, el problema es al mostrar los datos, o sea en la función de Mysql de SELECT * FROM, aquí el código PHP (Ahí señalo el error):
Código PHP:
<table width="100%" bgcolor="#006699" bordercolor="#0066FF" border="3px" background="images/top3.png">
                                 <?
                 
                
if($_POST['votarl'])
                {
                    
$ip$_SERVER['REMOTE_ADDR'];
                    
mysql_query("INSERT INTO votos(alumno,votante,valor,ip) VALUES('$_POST[alumnol]','$_COOKIE[nick]','1','$ip');");
                }
                if(
$_POST['votard'])
                {
                    
$ip$_SERVER['REMOTE_ADDR'];
                    
mysql_query("INSERT INTO votos(alumno,votante,valor,ip) VALUES('$_POST[alumnod]','$_COOKIE[nick]','0','$ip');");
                }
                
                
?>
               <? 
               $row
=mysql_query("SELECT * FROM resultados ORDER BY total DESC LIMIT 3");
               while(
$row2 mysql_fetch_array($row)){ ?>
                <tr>
                <th rowspan="4" width="70px" height="70px">
                <? echo '<img src='.$row2['avatar'].' width="70px" height="70px" ice:repeating="true">'?>
                </td>
                </tr>
                <tr>
                <td colspan="3">
                <a style="color:#FFF">Alumno: <? echo ''.$row2['alumno'].''?></a>
                </td>
                </tr>
                <tr>
                <td colspan="3">
               <a style="color:#FFF">
               <? $resmysql_query("SELECT * FROM adminexamen");
                  
$numexamen=mysql_num_rows($res);
                  
$calificacionfinal=$row2['total']/$numexamen;
                
?>
               Calificación: <? echo ''.$calificacionfinal.'' ?></a>
                </td>
                </tr>
                <tr>
              
<td width="80px" height="36px">
<form name="form1" action="" method="post">
               <input type="text" hidden="" name="alumnol" value="<? echo $row2['alumno']; ?>">
 <input type="submit" name="votarl" value="    " style="background-image:url(images/like.png); background-color:#06C" width="32px" height="32px">
  </form>
                </td>
                <td width="80px" height="36px">
  <form name="form2" action="" method="post">
<input type="text"  name="alumnod" hidden="" value="<? echo $row2['alumno']; ?>">
 <input type="submit" name="votard" value="    " style="background-image:url(images/dislike.png);background-color:#06C" width="32px" height="32px">
  </form>
                </td>
                <td>
<table width="115px" border="0" cellpadding="0" cellspacing="0" bgcolor="#FF3300" style="border: #000000 1px solid;"  height:"7px">
            <tr>
              <td>
                 <? 
//Aquí la parte donde sucede el error ---->>>>>>>>>>>
                 
$bla="WHERE alumno='$row2[alumno]'";
                
$resmysql_query("SELECT * FROM votos $bla");
                while(
$res2=mysql_fetch_array($res)){
                
$numvotosmysql_num_rows($res);
                 
$totalv+=$res2['valor'];
                
$porcentaje$totalv*100/$numvotos;
                }
                
                
?>
              <table width="<? echo $porcentaje?>%" border="0" cellpadding="0" style="background:#0C3; max-width:100%" height="7px">
                  <tr>
                    <td></td>
                  </tr>
              </table></td>
            </tr>
        </table>
                </td>
                </tr>
                <?
                
echo "$totalv";
               }
                
?>
                </table>
  #2 (permalink)  
Antiguo 07/08/2013, 19:00
 
Fecha de Ingreso: enero-2012
Ubicación: <?php echo"Los teques"; ?>/////estado miranda
Mensajes: 196
Antigüedad: 12 años, 9 meses
Puntos: 9
Respuesta: Error en el sistema de Likes/Dislikes

No soy un "Experto" en php, pero si se algo que te podria ayudar (Lo uso en mi pagina)

Crea un campo en la tabla de "Resultados" llamada puntuacion
Selecciona la puntuacion, ejemplo = 9.5
en cada form pon un input "Hidden" Llamada puntuacion con Value="$row2['puntuacion']; " y name="ptc"
Al procesar el "like" o "dislike" pon esto respectivamente

Código PHP:
Ver original
  1. <?
  2.                  
  3.                 if($_POST['votarl'])
  4.                 {
  5.                     $ip= $_SERVER['REMOTE_ADDR'];
  6.                     $valor = $_POST['ptc'] + 0.5;   /////   Donde 0.5 es el Valor que se le sumara al votar like
  7.                     mysql_query("Update resultados SET puntuacion = '$valor'");
  8.                 }
  9.                 if($_POST['votard'])
  10.                 {
  11.                     $ip= $_SERVER['REMOTE_ADDR'];
  12.                     $valor = $_POST['ptc'] - 0.5;   /////   Donde 0.5 es el Valor que se le Restara al votar dislike
  13.                     mysql_query("Update resultados SET puntuacion = '$valor'");
  14.                 }
  15.                
  16.                 ?>

Y listo C:

Edite por que me faltaron comillas
  #3 (permalink)  
Antiguo 07/08/2013, 19:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Error en el sistema de Likes/Dislikes

Cita:
Iniciado por omarinfinito Ver Mensaje
No soy un "Experto" en php, pero si se algo que te podria ayudar (Lo uso en mi pagina)

Crea un campo en la tabla de "Resultados" llamada puntuacion
Selecciona la puntuacion, ejemplo = 9.5
en cada form pon un input "Hidden" Llamada puntuacion con Value="$row2['puntuacion']; " y name="ptc"
Al procesar el "like" o "dislike" pon esto respectivamente


Y listo C:

Edite por que me faltaron comillas
En la imagen, lo del apartado "Calificación" ese es otro rollo, el problema está en la barrita coloreada de verde.

Eso si funciona,pero para lo que necesito lamentablemente no, es que quiero que se inserten los campos (lo hago de esa manera para que el usuario no de like/dislike más de una vez)

El problema está en la función SELECT.
Te voy a poner un ejemplo, así es como se vé en mi tabla de la base de datos:

id l alumno l votante l valor l ip
1 l Alumno1l usuario l 1 l x.x.x.x

En donde dice valor, es 1 porque le dio Like al registro del Alumno 1

El problema está al mostrar la tabla, resulta que todos los registros (los tres) tienen 1 like cada uno, y en la tabla de la base de datos sólo se muestra el like del registro 1.

En éste código me está fallando algo pero no sé en qué, la consulta mysql está correcta ya que no me marca error, pero me muestra los datos errónenos
Código PHP:
                 <? 
//Aquí la parte donde sucede el error ---->>>>>>>>>>>
                 
$bla="WHERE alumno='$row2[alumno]'";
                
$resmysql_query("SELECT * FROM votos $bla");
                while(
$res2=mysql_fetch_array($res)){
                
$numvotosmysql_num_rows($res);
                 
$totalv+=$res2['valor'];
                
$porcentaje$totalv*100/$numvotos;
                }
                
                
?>
  #4 (permalink)  
Antiguo 07/08/2013, 20:11
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Error en el sistema de Likes/Dislikes

Este usuario tiene el mismo problema, es que tanto él como yo estamos usando un while dentro de otro while, chequen a ver si le entienden más a ese para ver si me pueden ayudar con una solución
http://www.forosdelweb.com/f18/while-dentro-otro-necesito-que-cambien-las-variables-944828/

Última edición por luisochonews; 07/08/2013 a las 20:27
  #5 (permalink)  
Antiguo 07/08/2013, 21:27
 
Fecha de Ingreso: enero-2012
Ubicación: <?php echo"Los teques"; ?>/////estado miranda
Mensajes: 196
Antigüedad: 12 años, 9 meses
Puntos: 9
Respuesta: Error en el sistema de Likes/Dislikes

Si lo que quieres es que no repitan, solo cambia

Código PHP:
Ver original
  1. <?
  2.                  
  3.                 if($_POST['votarl'])
  4.                 {
  5.                     $ip= $_SERVER['REMOTE_ADDR'];
  6.                     $valor = $_POST['ptc'] + 0.5;   /////   Donde 0.5 es el Valor que se le sumara al votar like
  7.                     mysql_query("Update resultados SET puntuacion = '$valor'");
  8.                 }
  9.                 if($_POST['votard'])
  10.                 {
  11.                     $ip= $_SERVER['REMOTE_ADDR'];
  12.                     $valor = $_POST['ptc'] - 0.5;   /////   Donde 0.5 es el Valor que se le Restara al votar dislike
  13.                     mysql_query("Update resultados SET puntuacion = '$valor'");
  14.                 }
  15.                
  16.                 ?>

por






Código PHP:
Ver original
  1. <?
  2.                  
  3.                 if($_POST['votarl'])
  4.                 {
  5.                     $ip= $_SERVER['REMOTE_ADDR'];
  6.                     $valor = $_POST['ptc'] + 0.5;   /////   Donde 0.5 es el Valor que se le sumara al votar like
  7.                     mysql_query("Update resultados SET puntuacion = '$valor'");
  8.                     mysql_query("Update resultados SET puntuacion = '$valor'");                                        mysql_query("INSERT INTO votos(votante,ip) VALUES('$_POST[alumnol]','$ip');");
  9.                 }
  10.                 if($_POST['votard'])
  11.                 {
  12.                     $ip= $_SERVER['REMOTE_ADDR'];
  13.                     $valor = $_POST['ptc'] - 0.5;   /////   Donde 0.5 es el Valor que se le Restara al votar dislike
  14.                     mysql_query("Update resultados SET puntuacion = '$valor'");                                        mysql_query("INSERT INTO votos(votante,ip) VALUES('$_POST[alumnol]','$ip');");
  15.                 }
  16.                
  17.                 ?>

De esta manera insertas en "votos" el votante y la ip, y con php verificas si voto o no C:
  #6 (permalink)  
Antiguo 07/08/2013, 21:52
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Error en el sistema de Likes/Dislikes

Muchas gracias por sus aportes :D, ahora sólo falta una última cosa ¿Cómo puedo sumar una columna de una tabla de la base de datos?
Es que quiero sumar todos los registros de una columna, ya eso sería la último para resolver el problema
  #7 (permalink)  
Antiguo 07/08/2013, 22:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Error en el sistema de Likes/Dislikes

Ya listo quedó perfecto, gracias a todos de nuevo se los agradezco, aquí el código php, sustituí esta parte:
Código PHP:
Ver original
  1. <?
  2.                 $resl= mysql_query("SELECT * FROM votos WHERE alumno='$row2[alumno]'");
  3.                 while($resl2=mysql_fetch_array($resl)){
  4.                 $numvotos= mysql_num_rows($resl);
  5.                 $resl3=mysql_query("select sum(valor) FROM votos WHERE alumno='$row2[alumno]'");
  6.                 $resl4=mysql_fetch_array($resl3);
  7.                 $totall=$resl4[0];
  8.                 $porcentaje= $totall*100/$numvotos;
  9.                 }
  10.                 ?>

Etiquetas: mysql, registro, select, sistema, sql, tabla
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 21:59.