Ver Mensaje Individual
  #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: 12 años
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