Hola qué tal,
bueno he estado mirando esto y no cuadro por ningún lado. Seguramente me expliqué mal, y dí pocos detalles sobre el tema. Agradezco a
DeeR y a
gerson por sus comentarios.
Gerson pues claro que me gustaría mostrar las filas que haga falta; mejor dicho las que contenga la base de datos. Y a
Deer me parece correcta su función aunque imagínate que alguna de mis categorías tuviese 126 registros que mostrar; me volvería loco con los
$array.
Voy a mostrar los detalles de todo esto más o menos -
alguna cosa me habré dejado en copiar y pegar o escribir- o quizá alguna $variable haya cambiado de nombre debido a las modificaciones que he hecho.
Empezamos
Todo esto cuenta con tres secuencias de comandos de catálogo: la página principal, la página de categorías y la página de detalles de películas.
Al acceder a la página principal se enumeran todas las categorías de la base de datos.
Código PHP:
<?
include ('funciones.php');
do_html_header("Bienvenido a mis Películas");
echo "<p>Elije una categoría:</p>";
// recuperar categorías de la base de datos
$cat_array = get_categories();
// mostrar como enlaces a las páginas de las categorías
display_categories($cat_array);
do_html_footer();
?>
La función
get_categories() devuelve una matriz de las categorías del sistema que, tras ello, se pasa a
display_categories().
Código PHP:
function get_categories()
{
// Petición a la base de datos de una lista de categorías
$conn = db_connect();
$query = "select catid, catname
from categories";
$result = @mysql_query($query);
if (!$result)
return false;
$num_cats = @mysql_num_rows($result);
if ($num_cats ==0)
return false;
$result = db_result_to_array($result);
return $result;
}
Como se puede comprobar, esta función se conecta a la base de datos y recupera una lista de todos los
Id. y nombres de categoría. Hemos escrito y utilizado una función denominada
db_result_to_array()La función adopta un identificador de resultados MySQL y devuelve una matriz de errores indexada numéricamente en la que cada fila es una matriz asociativa.
Código PHP:
function db_result_to_array($result)
{
$res_array = array();
for ($count=0; $row = @mysql_fetch_array($result); $count++)
$res_array[$count] = $row;
return $res_array;
}
En nuestro caso, devolvemos esta matriz de nuevo a
index.php donde la pasaremos a la función
display_categories()
Esta función muestra cada categoría en forma de enlace a una página que contiene las peliculas de dicha categoría.
Código PHP:
function display_categories($cat_array)
{
if (!is_array($cat_array))
{
echo "No hay categorías actualmente disponibles<br>";
return;
}
echo "<ul>";
foreach ($cat_array as $row)
{
$url = "veure_categoria.php?catid=".($row["catid"]);
$title = $row["catname"];
echo "<li>";
do_html_url($url, $title);
}
echo "</ul>";
echo "<hr>";
}
Esta función convierte cada una de las categorías de la base de datos en enlaces. Todos los enlaces llevan a la siguiente secuencia de comandos, veure_categoria.php pero cada uno tiene un parámetro distinto, el
Id de la categoría o
catid (se trata de un número exclusivo generado por MySQL y que utilizamos para identificar la categoría).
Este parámetro a la siguiente secuencia de comandos determinará en qué categoría nos encontramos.
El proceso para enumerar películas de una categoría es muy similar. La secuencia de comandos encargada de ello es veure_categoria.php.
Código PHP:
<?php
include ('funciones.php');
$catid = $_GET['catid'];
$name = get_category_name($catid);
do_html_header($name);
// obtener información de la película de la base de datos
$book_array = get_books($catid);
display_books($book_array);
do_html_footer();
?>
Esta secuencia tiene una estructura similar a la de la página de índice, a excepción de que recupera películas en lugar de categorías. Convertimos el
Id. de categoría que hemos obtenido en un nombre de categoría por medio de la función get_category_name().
Código PHP:
function get_category_name($catid)
{
// consulta la bd para obtener el nombre de un Id. de categoría
$conn = db_connect();
$query = "select catname
from categories
where catid = $catid";
$result = @$conn->query($query);
if (!$result)
return false;
$num_cats = @$result->num_rows;
if ($num_cats ==0)
return false;
$row = $result->fetch_object();
return $row->catname;
}
Una vez recuperado el nombre de la categoría, podemos representar un encabezado HTML y proceder a recuperar y enumerar las películas de la base de datos que se corresponden con la categoría seleccionada.
Código PHP:
$pelicules_array = get_pelicules($catid);
veure_pelicules($pelicules_array);
Las funciones get_pelicules() y veure_pelicules() son muy similares a las funciones get_categories() y veure_categories() la única diferencia es que estamos recuperando información de la tabla de películas en lugar de la de categorías. La función veure_pelicules() proporciona un enlace a todas las películas de una categoría por medio de la secuencia de comandos veure_pelicules.php. De nuevo, a cada enlace se le añade un parámetro como sufijo. En esta ocasión es la ref (referencia) de la película en cuestión.
Código PHP:
<?php
include ('funciones.php');
$ref = $_GET['ref'];
// obtén esta película de la base de datos
$pelicules = get_pelicules_detalls($ref);
do_html_header($pelicules['titulo']);
veure_pelicules_detalls($pelicules);
// define un URL para el “botón de continuación”
$target = 'index.php';
if($pelicules['catid'])
{
$target = 'veure_categories.php?catid='.$pelicules['catid'];
}
do_html_footer();
?>
Esto realiza el mismo tipo de acciones de antes. Utilizamos
Código PHP:
$pelicules = get_pelicules_detalls($ref);
Para obtener de la base de datos la información de la película
Y
Código PHP:
veure_pelicules_detalls($pelicules);
para representar los datos en HTML. Mencionar que
veure_pelicules_detalls() busca un archivo de imagen para la pelicula como
imatges/$ref.jpg. Si no existe, no muestra ninguna imagen. El resto de la secuencia configura la navegación.
Código PHP:
function veure_pelicules_detalls($pelicules)
{
// todos los detalles de la pelicula
if (is_array($pelicules))
{
echo '<table><tr>';
//Imagen
if (@file_exists('imatges/'.($pelicules['ref']).'.jpg'))
{
$size = GetImageSize('imatges/'.$pelicules['ref'].'.jpg');
if($size[0]>0 && $size[1]>0)
echo '<td><img src=\'imatges/'.$pelicules['ref'].'.jpg\' border=0 '.$size[3].'></td>';
}
echo '<td><ul>';
echo '<li><b> Director:</b> ';
echo $pelicula['director'];
echo '</li><li><b> REF:</b> ';
echo $pelicula['ref'];
echo '</li><li><b>Descripcion:</b> ';
echo $pelicula['descripcion'];
echo '</li></ul></td></tr></table>';
}
else
echo 'No hay detalles de la película en estos momentos.';
echo '<hr />';
}
AQUÍ FORMULARIOS Y DEMÁS Código PHP:
function veure_categoria_formulari($cat_array = "")
// Esto muestra el formulario de categoría.(Ejem: Terror, Erótico, Humor)
// Este formulario puede ser usado para insertar o editar categorías.
// Para insertar, no pasar ningún parámetro. Esto configurará $editar
// como falso, y el formulario irá a insertar_categoria.php.
// Para actualizar, pasa un array conteniendo una categoría. El
// formulario contendrá los viejos datos y apuntará a actualitzar_categoria.php.
// También añadirá un botón "Borrar categoría" .
{
// si se pasa una categoría existente, proceder en "modo edición"
$editar = is_array($cat_array);
// la mayoría del formulario esta en HTML plano con algún
// trozo opcional de PHP por todo.
?>
<form method=post
action="<?=$editar?"editar_categoria.php":"insertar_categoria.php";?>">
<table border=0>
<tr>
<td>Nom Categoría:</td>
<td><input type=text name=catname size=40 maxlength=40
value="<?=$editar?$categoria["catname"]:""; ?>"></td>
</tr>
<tr>
<td <? if (!$editar) echo "colspan=2"; ?> align=center>
<? if ($editar)
echo "<input type=hidden name=catid
value=\"".$categoria["catid"]."\">";
?>
<input type=submit
value="<?=$editar?"Actualizar":"Añadir"; ?> Categoría"></form>
</td>
<? if ($editar)
// permitir borrar categorías existentes
{
echo "<td>";
echo "<form method=post action=\"borrar_categoria.php\">";
echo "<input type=hidden name=catid value=\"".$categoria[catid]."\">";
echo "<input type=submit value=\"Borrar Categoría\">";
echo "</form></td>";
}
?>
</tr>
</table>
<?
}
CONTINÚA