Ver Mensaje Individual
  #6 (permalink)  
Antiguo 10/06/2013, 23:11
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar productos por categoría (MySql+php)

Cita:
Iniciado por joomscl Ver Mensaje
Muchas gracias por sus respuestas.

Teniendo en cuenta que no soy muy bueno en php y MySql, ¿cómo y dónde mostraría los productos por categoría y cuál sería la url para tal efecto?

Italico76, me podrías dar un ejemplo de cómo sería?
Ya que me preguntas......... deberias mostrar o visualizar los datos en un archivo y tener tu logica en otro. Las consultas idealmente estarian en otro archivo. A esto se llama MVC o Modelo-Vista-Controlador

Código PHP:
<?php
  
/**
   * Controlador (index.php)
   * 
   */
  
  // incluyo el Modelo
  
require_once 'model.php';

  
// conecto a la DB
  
conectar('test');
  
  
// traigo algo del modelo
  
$categorias getAll();  

  
// lo represento en la vista
  
include "vista.php";
Código PHP:
<?php
/**
 * Modelo: modelo.php
 *  
 */

define ('db_user','root');
define ('db_pass','');
define ('db_name','mi_db');

// no deberias usar idealmente variable global, sino hacer todo esto como una clase 
$db null;

   function 
conectar($dbname=db_name,$user=db_pass,$pass=db_pass)
   {    
       global 
$db;
       try 
       {
            
$db = new PDO("mysql:host=localhost;dbname=$dbname;charset=utf8",$user$pass);    
       }
       catch(
PDOException $ex)
       {
        echo 
"Algo salio mal con la conexion : ".$ex->getMessage();       
       }
    
    return 
$db;    
  }

function 
getAll() {
    global 
$db;
    
$sql "SELECT * FROM products WHERE 1";
    return 
$db->query($sql);
}

function 
getCategory($cat) {
    global 
$db;
    
$sql "SELECT * FROM products WHERE category='$cat'";
    return 
$db->query($sql);
}
?>
Código PHP:
<html><!-- Vista -->
    <head>
       <title>$titulo</title>
    </head>
    <body>
        <ul>
            <?php foreach ($categorias as $cat): ?>
                <li><?php echo $cat['title']; ?></li>
            <?php endforeach; ?>     
        </ul>     
    </body>
</html>

ACLARACIONES:

En el modelo colocas toda la logica que te trae y lleva cosas a la DB (te defini dos funciones de traida de datos solamente y te falta investigar como hacer inserciones, editar, borrar)

En la vista va todo lo que es HTML

Tu tabla tiene un problema y es que el ID debe ser AUTOINCREMENTAL y tu CLAVE PRIMARIA o PRIMARY KEY

Logicamente el INDEX.php deberia ser mas parecido a un 'Front controller' el cual recibe los parametros de $_GET por ejemplo y en base a eso decide que controlador cargar. En este caso se hizo con un solo controlador.


Si quieres limitar el problema de variable global $db, puedes hacerlo tambien usando namespace:

Código PHP:
<?php
/**
 * Modelo: modelo.php
 *  
 */
namespace MVCmodel;

define ('db_user','root');
define ('db_pass','');
define ('db_name','mi_db');

// no deberias usar idealmente variable global, sino hacer todo esto como una clase 
$db null;

   function 
conectar($dbname=db_name,$user=db_pass,$pass=db_pass)
   {    
       global 
$db;
       try 
       {
            
$db = new PDO("mysql:host=localhost;dbname=$dbname;charset=utf8",$user$pass);    
       }
       catch(
PDOException $ex)
       {
        echo 
"Algo salio mal con la conexion : ".$ex->getMessage();       
       }
    
    return 
$db;    
  }

function 
getAll() {
    global 
$db;
    
$sql "SELECT * FROM products WHERE 1";
    return 
$db->query($sql);
}

function 
getCategory($cat) {
    global 
$db;
    
$sql "SELECT * FROM products WHERE category='$cat'";
    return 
$db->query($sql);
}
?>
Código PHP:
<?php
  
/**
   * Controlador (index.php)
   * 
   */

  
namespace MVCcontroller;
  
  
// incluyo el Modelo
  
require_once 'model.php';

  
// conecto a la DB  
  
MVCmodelconectar('test');
  
  
// traigo algo del modelo
  
$categorias MVCmodel    getAll();  

  
// lo represento en la vista
  
include "vista.php";
__________________
Salu2!

Última edición por Italico76; 11/06/2013 a las 00:48