Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/03/2014, 06:46
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL resul

Hay algunos errores de lógica, y algunos errores indetectables en la consulta.
Mira, como muchos de los que se inicia, estás suponiendo que las cosas siempre funcionan bien, y que las consultas a la base siempre devuelven datos.
Eso es un error.
Lo primero que siempre debes considerar cuando programas es que las cosas pueden fallar, incluso aunque los datos estén bien, hasta por razones ajenas a la aplicación. Siempre puede suceder.
En consecuencia, tienes que programar para evitar que errores no contemplados genernen un mal funcionamiento del programa... y eso no lo estás haciendo.

En tu script:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include('conexion.php');
  4.  
  5. extract($_GET);
  6. $con=Conecta();
  7. if(isset($id))
  8. {
  9. $consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con);
  10. $lado=mysql_fetch_assoc($consulta);
  11.  
  12. $votos = $lado['like'] + 1;
  13. $consulta = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
  14. $res=mysql_query($consulta);
  15. }
  16.  
  17. ?>
tu estás dando por sentado que la query devuelve siempre datos, pero en realidad no lo sabes. Podría fallar por otras razones, y devolverte FALSE... lo que es exactamente lo que está sucediendo. Por eso te dice "mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource ", es decir, el argumento (el resource) no es un resultado valido de MySQL, lo que implica que no está devolviendo datos. El por qué puede suceder lo veremos después, pero la solución es sencillamente prevenir el vallo validando lo que MySQL devuelve.
Esto tiene muchas formas de hacerse, pero la primera de todas es simplemente usar or die()

Código PHP:
Ver original
  1. <?php
  2.  
  3. include('conexion.php');
  4.  
  5. extract($_GET);
  6. $con=Conecta();
  7. if(isset($id)&& $id!="")
  8. {
  9. $consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con) or die ("Error MySQL: ".mysql_error());
  10.  
  11. // Luego validas qué hacer si no hay erro pero tampoco datos
  12.  
  13. if($consulta)
  14.     {if(mysql_num_rows($consulta)>0)
  15.         {$lado=mysql_fetch_assoc($consulta);
  16.         $votos = $lado['like'] + 1;
  17.  
  18.         // No sobreescribas la variable. Eso está MAL
  19.  
  20.         $qry = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
  21.         $res=mysql_query($qry)or die ("Error MySQL: ".mysql_error();
  22.         if($res) echo "Update exitoso";
  23.         }
  24.     }
  25. }
  26.  
  27. ?>

Por otro lado, a la consulta, y a tu tabla le veo un problema severo: Estás usando una palabra reservada (LIKE) como nombre de columna, lo que podría disparar un error de sintaxis en la base que no descubrirías fácilmente. AL meno no sin ver que es precisamente ese el problema.
Consejo: No uses palabras simples en inglés en los nombres de tablas, columnas o bases. Tienden a generar ese tipo de problemas, y los principiantes no los ven.
Si no puedes cambiar ese nombre de columna, pon los nombres entre acentos agudos (no confundir con apóstrofos):

Código SQL:
Ver original
  1. SELECT `like` FROM productos WHERE id_producto='".$id."'
Código SQL:
Ver original
  1. UPDATE productos SET `like` = '".$votos."' WHERE id_producto='".$id."'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)