Cita:
Iniciado por joomscl
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";