Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/03/2011, 21:53
RodrigoG
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 11 meses
Puntos: 11
Respuesta: Se puede hacer esto --> RewriteRule

Nop, no se puede :p

Apache no tiene cómo saber que 11445255 se debe particionar en 1-14-45-2-55, qué hacer para que no se particione en 11-4-4-52-55, 1-1-44-52-5-5, o cualquier otra combinación?

Podrías hacer algo como ésto, aunque demandará saber modelar bases de datos, por ejemplo, que si el usuario ingresa a:

http://dominio.tld/anuncio/dell-xps-1530-en-buen-estado

Apache llame al archivo mostrar.php?b=dell-xps-1530-en-buen-estado, esto se puede hacer con:

Código Apache:
Ver original
  1. RewriteEngine on
  2. RewriteRule ^anuncio/(.+)$ mostrar.php?b=$1

luego en mostrar.php:

Código PHP:
Ver original
  1. // Recoger el titulo del anuncio.
  2. $titulo = $_SERVER['QUERY_STRING'];
  3.  
  4. // Conectar con la BD (uso PDO por seguridad, podría ser también mysqli):
  5. try {
  6.     $bd = new PDO('mysql:dbname=nombreBD', 'root', 'macoy123');
  7. } catch (PDOException $e) {
  8.     echo 'Error de conexión: ' . $e->getMessage();
  9. }
  10.  
  11. // Buscar con consulta preparada para evitar un ataque de inyección SQL
  12. $respuesta = $bd->prepare(
  13. 'SELECT id, ciudad, comuna, categoria, subcategoria
  14. FROM anuncios
  15. WHERE titulo = ?
  16. LIMIT 1'
  17. );
  18.  
  19. // Ejecutar la consulta con el título recogido desde la uri.
  20. $respuesta->execute(array($titulo));
  21.  
  22. // Transformar la respuesta a una matriz para trabajar con ella
  23. $datosAnuncio = $respuesta->fetch(PDO::FETCH_ASSOC);
  24.  
  25. // Imprimir algun resultado al usuario con los datos obtenidos desde la base de datos,
  26. // no desde la url.
  27. ?>
  28.  
  29. <!DOCTYPE html>
  30. <html>
  31. <head>
  32. <title>Anuncio</title>
  33. </head>
  34. <body>
  35. <h1>Anuncio <?php echo htmlentities($datosAnuncio['id']) ?></h1>
  36. <ul>
  37. <?php
  38. foreach($datosAnuncio as $dato) {
  39. echo '<li>', htmlentities($dato), '</li>';
  40. }
  41. ?>
  42. </ul>
  43. </body>

Es decir, quizá te ayude replantear tu aplicación, en vez de que la información de la ciudad, categoría, comuna, etc venga desde la uri, podría venir incluida dentro del título.

Luego necesitarías tener una tabla con llave UNIQUE para el título y una columna para la ciudad etc.

Es lo único que se me ocurre para que sea más amigable, y de hecho es la forma en como trabajan varios script.

Si por otro lado para tu aplicación es muy importante pasar esos datos por la uri, tendrías que separarlos por algún delimitador, por ejemplo, tal como lo estabas haciendo.

Saludos :)
__________________
Estreno blog ~ DesarrolladorWeb.cl :)