Ver Mensaje Individual
  #8 (permalink)  
Antiguo 19/05/2016, 06:23
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: 17 años, 3 meses
Puntos: 2658
Respuesta: mostrar productos por su categorias

Empecemos por el punto de que SQL es tema de Bases de Datos (es otro foro) y NO de PHP.
PHP no entiende SQL y la base de datos no entiende ni interpreta PHP. Son entornos de existencia diferentes.

Habiendo aclarado eso, tu problema es de manual básico, pero tienes que al menos estudiar un poco de SQL. Encontrarás la respuesta en cualquier tutorial elemental para principiantes.

El fallo se produce porque en lugar de recibir del formulario el ID de la categoria, lo estás tomando de su descripcion, pero luego intentas compararlo contra un campo que e numérico. Además ni siquiera has tomado la precaución de poner el contenido recibido entre apostrofos dentro del SQL, como para que MySQL lo interprete como cadena de texto (no devolvería datos, pero tampoco dispararía un error).
Entonces lo que la base de datos está recibiendo como consulta es esto:

Código SQL:
Ver original
  1. SELECT * FROM productos WHERE idcategorias=Sillas

Enb esa query, "Sillas" NO ES una cadena de texto. Si lo fuese debería estár encerrada entre apostrofos:

Código SQL:
Ver original
  1. SELECT * FROM productos WHERE idcategorias='Sillas'

Como no le pusiste los apostrofos, MySQL lo intenta interpretar como nombre de una columna de la tabla, y como tal no existe.

Ahora bien, hay dos formas de resolver la consulta: CON y SIN JOIN, pero te recomiendo verla CON, dado que el JOIN es la clausula más usada de las consultas. Siempre necesitarás aprenderla

Código SQL:
Ver original
  1. SELECT P.*
  2. FROM productos P INNER JOIN categoria C ON P.idcategorias = C.idcategorias
  3. WHERE c.descripcioncateg = 'Sillas'
en PHP:
Código PHP:
Ver original
  1. $categoria = $_GET['idcategorias'];
  2. $sql = "SELECT P.*
  3. FROM productos P INNER JOIN categoria C ON P.idcategorias = C.idcategorias
  4. WHERE c.descripcioncateg = '$categoria'";
  5. $re=mysql_query($sql)or die(mysql_error());

o con una escritura mas prolija y legible:

Código PHP:
Ver original
  1. $categoria = $_GET['idcategorias'];
  2.  
  3. // Hacer esto siempre ayuda a que el código sea mas LEGIBLE...
  4.  
  5. $sql = "SELECT P.* ";
  6. $sql .= " FROM productos P INNER JOIN categoria C ON P.idcategorias = C.idcategorias";
  7. $sql .= " WHERE c.descripcioncateg = '$categoria'";
  8.  
  9. // Es un MAL habito poner la query directamente en la llamada a la base.
  10. // Evita que puedas hacer buenos debuggeos para resolver problemas
  11. $re=mysql_query($sql)or die(mysql_error());
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 19/05/2016 a las 06:35