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<?php
include('conexion.php');
$con=Conecta();
{
$consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con);
$votos = $lado['like'] + 1;
$consulta = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
}
?>
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<?php
include('conexion.php');
$con=Conecta();
{
$consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con) or
die ("Error MySQL: ".mysql_error());
// Luego validas qué hacer si no hay erro pero tampoco datos
if($consulta)
$votos = $lado['like'] + 1;
// No sobreescribas la variable. Eso está MAL
$qry = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
if($res) echo "Update exitoso";
}
}
}
?>
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 originalSELECT `like` FROM productos WHERE id_producto='".$id."'
Código SQL:
Ver originalUPDATE productos SET `like` = '".$votos."' WHERE id_producto='".$id."'