Foros del Web » Programando para Internet » PHP »

PHP OO Mostrar resultados con filtros pasados por un formulario y convertidos en variables e

Estas en el tema de Mostrar resultados con filtros pasados por un formulario y convertidos en variables e en el foro de PHP en Foros del Web. a 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 ...
  #1 (permalink)  
Antiguo 06/06/2012, 06:21
 
Fecha de Ingreso: junio-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Exclamación Mostrar resultados con filtros pasados por un formulario y convertidos en variables e

a 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 value=\"3\">3</option>
<option value=\"4\">4</option>
<option value=\"5\">5</option>
<option value=\"6\">6</option>
<option value=\"7\">7</option>
<option value=\"8\">8</option>
<option value=\"9\">9</option>
<option value=\"10\">10</option>
</select>
<br> Filtrar Álbumes por Categoria: <select name=\"f2\" size=\"1\">
<option selected=\"selected\" value=\"\"></option>
<option value=\"rock\">Rock</option>
<option value=\"metal\">Metal</option>
<option value=\"rap\">Rap</option>
<option value=\"flamenco\">Flamenco</option>
<option value=\"regae\">Regae</option>
<option value=\"electronica\">Electrónica</option>
<option value=\"punk\">Punk</option>
<option value=\"pop\">Pop</option>
<option value=\"otras\">Otras</option>
</select>
<br> Filtrar Álbumes por usuario: <input name=\"f3\" type=\"text\" id=\"f3\" size=\"15\" maxlength=\"15\" />
<br>
Filtrar Álbumes por nombre del album: <input name=\"f4\"
type=\"text\" id=\"f4\" size=\"40\" maxlength=\"30\" />
<br><input type=\"submit\" name=\"b1\" id=\"b1\" value=\"Filtrar\"/>
</form>
");
  #2 (permalink)  
Antiguo 06/06/2012, 07:38
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Mostrar resultados con filtros pasados por un formulario y convertidos en

Bienvenido al foro, agradezco que consulte las políticas del mismo y que acostumbre el uso de las herramientas del foro como el Highlight para mostrar código.

volviendo al tema:

¿para qué reinventar la rueda?: existen muchas clases paginadoras que puede utilizar y con ello optimizar el código

veo muchas inconsistencias en la implementación del código, por un lado embebe bloques HTML y por el otro hace un montón de echo's, por lo cual el código por más comentado que esté se vuelve feo y difícil de mantener; por lo cual también se hace difícil o toma mucho tiempo para que un tercero encuentre un error, razón por la cual este tipo de post suelen quedar en el foro sin respuesta.

Trate de depurar el código con calma, sé que aveces el tiempo apremia, pero tambien tenga en cuenta que muchos de los que colaboramos en el foro no disponemos del tiempo para ver línea por línea y tratar de "averiguar" el error, si proporcionara los mensajes de error (si los tiene) y la línea donde sucede, sería mucho más sencillo.

Suerte.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 06/06/2012, 11:52
 
Fecha de Ingreso: junio-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Mostrar resultados con filtros pasados por un formulario y convertidos en

Bueno gracias por mirarlo un poco voy a buscar eso de las clases paginadoras, aunque lo de paginas, si no le paso ningun filtro funciona correctamente, el problema es que no da ningun mensaje de error solo de variable sin definir por el get y los post, pero eso es por la version actual de php, apeche o algo, en la anterior eso no pasa te los oculta. He encontrado esto http://foros.cristalab.com/paginar-resultados-de-buscador-en-php-y-mysql-t67717/

Quizas consiga algo por si alguien tiene el mismo problema que yo
  #4 (permalink)  
Antiguo 06/06/2012, 12:01
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Mostrar resultados con filtros pasados por un formulario y convertidos en

eso no tiene nada que ver con la versión de PHP, si dice que no hay variables GET o POST debe de verificar que le llega a php, use var_dump($_GET); y $_POST según el caso
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 06/06/2012, 12:06
 
Fecha de Ingreso: junio-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Mostrar resultados con filtros pasados por un formulario y convertidos en

Los errores que no son errores son noticias son:
Notice: Undefined index: pagina in C:\xampp\htdocs\Proyecto\tal.php on line 61

Notice: Undefined index: fi1 in C:\xampp\htdocs\Proyecto\tal.php on line 62

Notice: Undefined index: fi2 in C:\xampp\htdocs\Proyecto\tal.php on line 63

Notice: Undefined index: fi3 in C:\xampp\htdocs\Proyecto\tal.php on line 64

Notice: Undefined index: fuse in C:\xampp\htdocs\Proyecto\tal.php on line 65

Notice: Undefined index: fal in C:\xampp\htdocs\Proyecto\tal.php on line 66

Y tengo dos pc uno con la version nueva y otro con una vieja y en la vieja no da el error de variable sin definir
  #6 (permalink)  
Antiguo 06/06/2012, 12:09
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Mostrar resultados con filtros pasados por un formulario y convertidos en

eso no se debe a las versiones de PHP, sino a la configuración de mensajes de error, verifique la documentación de PHP
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 06/06/2012, 12:16
 
Fecha de Ingreso: junio-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Mostrar resultados con filtros pasados por un formulario y convertidos en

si ya, el caso es que en la nueva da esos mensajes y en la vieja no ejje con el var_dump me sale esto:
Notice: Undefined index: pagina in C:\xampp\htdocs\Proyecto\tal.php on line 63
string(1) "9" string(0) "" string(0) "" string(0) ""
Notice: Undefined variable: f3 in C:\xampp\htdocs\Proyecto\tal.php on line 92

Notice: Undefined variable: f4 in C:\xampp\htdocs\Proyecto\tal.php on line 92

Notice: Undefined variable: f2 in C:\xampp\htdocs\Proyecto\tal.php on line 92

Notice: Undefined variable: f3 in C:\xampp\htdocs\Proyecto\tal.php on line 96

Notice: Undefined variable: f4 in C:\xampp\htdocs\Proyecto\tal.php on line 97

Notice: Undefined variable: f2 in C:\xampp\htdocs\Proyecto\tal.php on line 97


tendre que hacerlo sin filtros

Etiquetas: paginacion, variables, formulario, filtros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:39.