Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] mostrar productos por su categorias

Estas en el tema de mostrar productos por su categorias en el foro de PHP en Foros del Web. saludos de ante mano tengo un problema que para alguno se les hara fácil, pero para otros difícil, resulta que tengo mi bd con dos ...
  #1 (permalink)  
Antiguo 18/05/2016, 21:51
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años, 1 mes
Puntos: 1
mostrar productos por su categorias

saludos de ante mano tengo un problema que para alguno se les hara fácil, pero para otros difícil, resulta que tengo mi bd con dos tablas categorias y productos las cuales están relacionada y funciona perfectamente

en mi archivo productos.php se muestra todas las categorias correspondientes registradas en la tabla productos.

Código PHP:
Ver original
  1. <?php
  2. include 'conexion.php';
  3. $re=mysql_query("select * from productos group by idcategorias")or die(mysql_error());
  4. while ($f=mysql_fetch_array($re)) {
  5. ?>
  6. <div class="producto">
  7. <center>
  8. <img src="./imagenes/<?php echo $f['imagen'];?>"><br>
  9. <span><?php echo $f['idcategorias'];?></span><br>
  10. <a href="detalles_productos.php?id=<?php  echo $f['id'];?>">ver</a>
  11. </center>
  12. </div>
  13. <?php
  14. }
  15. ?>

ok todo bien hasta ahora el problema es este que quiere ir al detalle de esa categorías y debería mostrarme todos los productos registrados en esa categorías pero solo me muestra 1 producto de esa categoría que no debería ser porque si hay 5 productos registrados en esa categorías debería mostrarme los 5 productos registrados en esa categoría

mi archivo detalles_productos.php

Código PHP:
Ver original
  1. <?php
  2. include 'conexion.php';
  3. $re=mysql_query("select * from productos where id=".$_GET['id'])or die(mysql_error());
  4. while ($f=mysql_fetch_array($re)) {
  5.     print ''.$f['idcategorias'].''
  6. ?>
  7. <div class="producto">
  8.             <center>
  9.                 <img src="./imagenes/<?php echo $f['imagen'];?>"><br>
  10.                 <span><?php echo $f['descripcion'];?></span><br>
  11.                 <a href="detalles.php?id=<?php  echo $f['id'];?>">ver</a>
  12.                 <br><br>
  13.                 <a href="productos.php" class="aceptar">Regresar</a>
  14.             </center>
  15.         </div>
  16.     <?php
  17.         }
  18.     ?>

espero me ayuden con ese problema gracias
__________________
yoclens avilan
  #2 (permalink)  
Antiguo 18/05/2016, 22:29
Avatar de 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: mostrar productos por su categorias

Estas consultando por el número de producto y no por su categoría.
Es lógico que sólo muestre UN producto...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/05/2016, 22:48
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: mostrar productos por su categorias

ok ya me fije en ese detalle




productos.php

Código PHP:
Ver original
  1. <?php
  2. include 'conexion.php';
  3. $re=mysql_query("select * from productos group by idcategorias")or die(mysql_error());
  4. while ($f=mysql_fetch_array($re)) {
  5. ?>
  6. <div class="producto">
  7. <center>
  8. <img src="./imagenes/<?php echo $f['imagen'];?>"><br>
  9. <span><?php echo $f['idcategorias'];?></span><br>
  10. <a href="detalles_productos.php?idcategorias=<?php  echo $f['idcategorias'];?>">ver</a>
  11. </center>
  12. </div>
  13. <?php
  14. }
  15. ?>



detalles_productos.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. include 'conexion.php';
  4. $re=mysql_query("select * from productos where idcategorias='idcategorias'")or die(mysql_error());
  5. while ($f=mysql_fetch_array($re)) {
  6.     print ''.$f['idcategorias'].''
  7. ?>
  8. <div class="producto">
  9.             <center>
  10.                 <img src="./imagenes/<?php echo $f['imagen'];?>"><br>
  11.                 <span><?php echo $f['descripcion'];?></span><br>
  12.                 <a href="detalles.php?id=<?php  echo $f['id'];?>">ver</a>
  13.                 <br><br>
  14.                 <a href="productos.php" class="aceptar">Regresar</a>
  15.             </center>
  16.         </div>
  17.     <?php
  18.         }
  19.     ?>


y en la barra del navegador me muestra lo siguiente: detalles_productos.php?idcategorias=Sillas

pero la consulta se me muestra en blanco osea no muestra nada
__________________
yoclens avilan
  #4 (permalink)  
Antiguo 18/05/2016, 22:53
Avatar de 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: mostrar productos por su categorias

Ahora no estas consultando por una categoría, sino por una cadena de texto que dice "idcategorias"...

Trata de ser más detallista con la forma de codificar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/05/2016, 22:56
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: mostrar productos por su categorias

ahora puse esto
Código PHP:
Ver original
  1. $re=mysql_query("select * from productos where idcategorias=".$_GET['idcategorias'])or die(mysql_error());

me dice: Unknown column 'Sillas' in 'where clause'


ya no se que hacer, stoy que me rindo me podrás ayudar si esta a tu alcance
__________________
yoclens avilan
  #6 (permalink)  
Antiguo 18/05/2016, 23:01
Avatar de 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: mostrar productos por su categorias

Ahí tienes un problema evidente...
Si idcategorias es un valor numérico, ¿Por qué estas recibiendo del formulario un texto descriptivo?
Para usar el nombre o descripción de una categoría tienes que hacer la consulta con JOIN entre las dos tablas.

Tienes problemas a nivel SQL. Necesitas entender mejor las consultas antes de usarlas.
Sin ofender.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/05/2016, 23:47
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: mostrar productos por su categorias

ok te entiendo, pero me podrás ayudar
__________________
yoclens avilan
  #8 (permalink)  
Antiguo 19/05/2016, 06:23
Avatar de 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: 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

Etiquetas: categorias, productos, select, 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 15:49.