Mostrar resultados con filtros pasados por un formulario y convertidos en variables en php
La parte de los filtros no me funciona y llevo toda la mañana con eso,
no soy capaz de arreglarlo, esta todo explicado en el codigo con
comentarios aver si le podeis echar un vistazo y veis algo que se me
haya escapado, lo que se supone que debe hacer es mostrar los datos con
paginacion, si se le ha pasado un filtro con el filtro pero si no se le
ha pasado lo hace sin where ninguno, El probema de este codigo es que si le paso el filtro solo me hace el de valoracion el $f1 y cuando paso a otra pagina me borra las variables de post y por lo tanto me muestra todos los resultados, por si no ha quedado claro solo hace el filtrado por valoracion jeje gracias
<?php
//para iniciar sesion y comprobar que se ha iniciado
session_start();
if ($_SESSION['usuario']!="") {
// para conectarse a la base de datos
function conectar()
{
$base_de_datos = "proyecto";
$db_usuario = "root";
$db_password = "";
if (!($link = mysql_connect("localhost", $db_usuario, $db_password)))
{
echo "Error conectando a la base de datos.";
}
if (!mysql_select_db($base_de_datos, $link))
{
echo "Error seleccionando la base de datos.";
}
return $link;
}
//en db almaceno los datos de conexion
$db = conectar();
//establezco el numero de registros por pagina
$registros = 3;
//recojo las variables tanto de la pagina como del formulario
$pagina=$_GET['pagina'];
$f1=$_POST['f1'];
$f2=$_POST['f2'];
$f3=$_POST['f3'];
$f4=$_POST['f4'];
//establezco la pagina donde estoy
if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
//si e cambiado de pagina entra aqui y establezco un nuevo inicio
else {
$inicio = ($pagina - 1) * $registros;
}
//si no e enviado datos es que no e realizado filtros asi que me los guarda sin el wehere
if (!$_POST) {
$resultados = mysql_query("SELECT * FROM albumes");
//establezco el numero total de registros
$total_registros = mysql_num_rows($resultados);
$resultados
= mysql_query("SELECT nombre,foto,descripcion,categoria,valoracion FROM
albumes ORDER BY valoracion DESC LIMIT $inicio, $registros");
// con esta operacion cojo el numero total de paginas
$total_paginas = ceil($total_registros / $registros);
//La siguiente variable creo que es inecesario pero por si acaso la e dejado, hace lo mismo con ella y sin ella
$total_registros=mysql_num_rows($resultados);
}
//aqui
entra si se han enviado las variables el problema es que si le das a
siguiente el lo de paginas te borra las variables y esto no funciona a
no ser que lo haga solo comprovando con una condicion
else {
$resultados = mysql_query("SELECT * FROM albumes where nuser='$f3' || nombre='$f4' || categoria='$f2' || valoracion>='$f1'");
$total_registros = mysql_num_rows($resultados);
$resultados
= mysql_query("SELECT nombre,foto,descripcion,categoria,valoracion FROM
albumes where valoracion>='$f1' || nuser='$f3' || nombre='$f4' ||
categoria='$f2' ORDER BY valoracion DESC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);
$total_registros = mysql_num_rows($resultados);
}
//si es 0 es que no se ha realizado la consulta y si no lo es pasa al else siguiente que es donde te muestra los resultados
if ($total_registros==0)
{
echo "No existe registros sobre tu busqueda";
}
else {
while($array=mysql_fetch_array($resultados)) {
echo "<table width='70%'>";
echo "<tr bgcolor='white'>";
echo "<td align=\"right\">";
echo "$array[nombre]";
echo "</td>";
echo "</tr>";
echo "<tr bgcolor='white'>";
echo "<td height=360 width=300>";
echo "<img src=\"imguser/$array[foto]\" height=360 width=300>";
echo "</td>";
echo "<td align=\"left\" valign=\"top\">";
echo "$array[descripcion]";
echo "</td>";
echo "</tr>";
echo "<tr bgcolor='white'>";
echo "<td>";
echo "Categoria: $array[categoria] Valoración: $array[valoracion]";
echo "</td>";
echo "</tr>";
echo "<tr bgcolor='white'>"; echo "<td height=30>"; echo "</td>"; echo "</tr>";
echo "</table>";
}
}
//con el siguiente codigo es con el que pagino la web esto lo hace perfectamente
if(($pagina - 1) > 0) {
echo "<a href='tal.php?pagina=".($pagina-1)."'>< Anterior</a> ";
}
for ($i=1; $i<=$total_paginas; $i++){
if ($pagina == $i) {
echo "<b>".$pagina."</b> ";
} else {
echo "<a href='tal.php?pagina=$i'>$i</a> ";
} }
if(($pagina + 1)<=$total_paginas) {
echo " <a href='tal.php?pagina=".($pagina+1)."'>Siguiente ></a>";
}
}
//aqui entra si no has iniciado sesion
else {
echo "No has iniciado sesión";
}
?>
</div>
<div id="apDiv4"><ul class="menu">
<?php
//este es el menu
if ($_SESSION['usuario']!="") {
printf ("
<li><a href=\"usmv.php\" class=\"active\"><span>Top Usuarios</span></a></li>
<li><a href=\"tal.php\"><span>Top Álbumes</span></a></li>
<li><a href=\"descan.php\"><span>Top Canciones</span></a></li>
<li><a href=\"conc.php\"><span>Conciertos</span></a></li>
");
}
if ($_SESSION['tip']=="musico") {
echo "<li><a href=\"panelm.php\"><span>Panel de administración</span></a></li>";
}
if ($_SESSION['tip']=="normal") {
echo "<li><a href=\"paneln.php\"><span>Panel de administración</span></a></li>";
}
//y aqui estan los formularios de los filtros
echo "Filtros";
echo "<br>";
printf ("
<form name=\"frtal\" action=\"tal.php\" method=\"post\">
Filtrar álbumes por valoración mayor a: <select name=\"f1\" size=\"1\">
<option selected=\"selected\" value=\"\"></option>
<option value=\"1\">1</option>
<option value=\"2\">2</option>
<option...