Foros del Web » Programando para Internet » PHP »

PHP OO relacion de categoria

Estas en el tema de relacion de categoria en el foro de PHP en Foros del Web. Lo que pasa es que cuando le doy clic a categoría (ESTACIÓN) me muestra todos los productos creados. Lo que busco es que solo me ...
  #1 (permalink)  
Antiguo 05/04/2014, 11:23
 
Fecha de Ingreso: marzo-2014
Mensajes: 19
Antigüedad: 10 años, 1 mes
Puntos: 1
relacion de categoria

Lo que pasa es que cuando le doy clic a categoría (ESTACIÓN) me muestra todos los productos creados.
Lo que busco es que solo me muestre los productos relacionados a la
categoría (ESTACIÓN)

Tabla "categorias"
id
categoria

Tabla "productos"
id
modelo
precio
imagen
categoria

Este es el codigo que muestra la categoria:

<div>
<table border="1" id="categoria">
<tr>
<td>Categorias</td>
</tr>
<?php

include_once("config.php");

$result = mysql_query("SELECT * FROM categorias ORDER BY id DESC") or die(mysql_error());
if(!mysql_num_rows($result)){
echo "Todavía no ha sido publicada ninguna categoria";
} else {

while($qry = mysql_fetch_array($result)){
echo "
<tr>
<td><a href='categorias.php?id=".$qry['id']."'>".$qry['categoria']."</a></td>
</tr>
";
}
}
?>
</table>
</div>


y este es el que muestra los productos:

<div id="cuadrogrande">
<?php
include_once("config.php");
$col = 0;
$result = mysql_query("SELECT * FROM $tabla ORDER BY id DESC LIMIT 8") or die(mysql_error());
if(!mysql_num_rows($result)){
echo "Todavía no ha sido publicada ninguna Producto";
} else {
echo "<table><tr>";
while($qry = mysql_fetch_array($result)){
$col++;
echo "<td>
<table id=\"cuadro\">
<tr>
<td rowspan=\"4\" class=\"marco\">
<a href='articulo.php?id=".$qry['id']."'>
<img src=\"".$qry['imagen']."\" class=\"foto\" />
</a>
</td>
<td>Modelo</td>
</tr>
<tr>
<td>".$qry['modelo']."</td>
</tr>
<tr>
<td>Precio</td>
</tr>
<tr>
<td>".$qry['precio']."</td>
</tr>
</table>
<br/>
<td>";
if ($col==2)
{
$col=0;
echo "</tr><tr>";
}
}
echo "
</tr>
</table>";

echo "
</td>
</tr>
</table><br /><br />";
}?>
</div>


Saludos y buen fin de semana
Gracias
  #2 (permalink)  
Antiguo 05/04/2014, 11:31
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: relacion de categoria

1) Usa los highlight de codigo, se hace mucho mas facil de leer.
2)
Código PHP:
Ver original
  1. $result = mysql_query("SELECT * FROM $tabla ORDER BY id DESC LIMIT 8") or die(mysql_error());
2.a) $tabla no esta definida, pero supongo que apunta a la tabla de productos.
2.b) para traer los de una categoria te falta el where:
Código PHP:
Ver original
  1. $result = mysql_query("SELECT * FROM $tabla WHERE categoria = ".$_GET['id']." ORDER BY id DESC LIMIT 8") or die(mysql_error());
3) Deberias sanear o filtrar de alguna manera los datos que metes en la consulta.
3.a) Como el id es un entero, una solucion rapida es intval()
Código PHP:
Ver original
  1. $result = mysql_query("SELECT * FROM $tabla WHERE categoria = ".intval($_GET['id'])." ORDER BY id DESC LIMIT 8") or die(mysql_error());
4) la clase mysql_* esta obsoleta y sera eliminada de php en un futuro cercano, lo mejor es que cuanto antes te pases a mysqli_* que es muy similar (de hecho es una extencion de mysql_*) pero que ofrece nuevas funciones y metodos (mas seguros y mas lentos) para trabajar con la bd.

Código PHP:
Ver original
  1. <?php
  2. // Esto iria en el config.php
  3. $enlace = mysqli_connect("127.0.0.1", "usuario", "contraseña", "world");
  4.  
  5. if (!$enlace)
  6. {
  7.     $error = mysqli_connect_error();
  8.     $errno = mysqli_connect_errno();
  9.     print "$errno: $error\n";
  10.     exit();
  11. }
  12. // Esto en tu archivo:
  13.  
  14. $consulta = "SELECT * FROM $tabla WHERE categoria = ? ORDER BY id DESC LIMIT 8";
  15.  
  16. $sentencia = mysqli_stmt_init($enlace);
  17.  
  18. if(!mysqli_stmt_prepare($sentencia, $consulta))
  19.     die("Falló la preparación de la sentencia\n");
  20.    
  21. mysqli_stmt_bind_param($stmt, "i", $_GET["id"]);
  22. mysqli_stmt_execute($sentencia);
  23. $resultado = mysqli_stmt_get_result($sentencia);
  24.  
  25. while ($qry = mysqli_fetch_array($resultado, MYSQLI_ASSOC))
  26. {
  27.     // Lo musmo que haces ahora
  28. }
  29.  
  30. // Esto al final, es para matar las conexiones.
  31. mysqli_stmt_close($sentencia);
  32. mysqli_close($enlace);
  33. ?>

a simple vista puede parecerte mucho mas complejo (de hecho, un poco si lo es) pero una vez te acostumbras se hace igual de facil, ademas el hecho de bindear parametros (mysqli_stmt_bind_param($stmt, "i", $_GET["id"]);) te soluciona la mayor parte de los problemas de inyeccion sql, ya no debes preocuparte por que valor viene en $_GET ya que al bindearlo eliminas el risego de un posible ataque. No nesesitas andar saneando o parseando la variable.

saludos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 05/04/2014 a las 11:41

Etiquetas: mysql, relacion, 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 22:02.