AYUDA CON PHP Y HTML, BUSCAR EN BBDD CON MYSQL!!!

Cesar una dudiya que me ha surgido. El buscador lo tengo terminado, y estoy terminando la paginacion; pero me resulta imposible hacerlo.

Te explico a ver si me das una solucion:

Tengo una pagina: final.php
En esa pagina, si una variable ($tipo=="") entonces me carga la parte html, es decir el buscador paa que seleccionen que animales buscan, etc).

Segun eso, le dan al boton buscar, que les lleva a la misma pagina, pero ahora, $tipo es distinto de vacio y entra en el apartado de analizar los datos enviados y me genera una sentencia sql que me busca los animales con la caracteristicas que me han dixo; hasta ahi no hay problema.

El problema, es que yo habia hecho la paginacion pasando las variables por la URL; es decir; final?pagina1.php

¿Hay alguna manera de que me haga la paginacion?

Para que te aclares, el codigo que tengo seria algo asi:ç

recojo los valores de $POST_['tipo'] y $GET_[
IF ($TIPO == "")
{
AQUI VIENE LA PARTE EN HTML DEL BUSCADOR DONDE EL SUSUARIO SELECCIONA LO QUE QUIERE

}

ELSE
{

AQUI ANALIZAMOS LOS DATOS QUE NOS HAN ENVIADO, Y GENERAMOS UNA CONSULTA

AL FINAL PONEMOS LO DE LA PAGINA

if(($pagina - 1) > 0) {
echo "< Anterior ";
}
for ($i=1; $i<=$total_paginas; $i++){
if ($pagina == $i) {
echo "".$pagina." ";
} else {
echo "$i ";
} }
if(($pagina + 1)<=$total_paginas) {
echo " Siguiente >";
}

}


YO CREO QUE LA SOLUCION ES PASAR LA PAGINA QUE LLEVAMOS TAMBIEN X POST, PERO NO SE TIENE QUE PERDER EL VALOR DE LA CONSULTA QUE HE GENERADO, ETC, SE TE OCURRE ALGUNA FORMA?

Graciasss
Bueno creo que primero , estan mal los metodos, tu pusiste $POST_[] Y ES $_POST[] revisa eso posiblemente sea el error
Es facil programar "Solo interesate en aprender"
Hola cesar.

No tranquilo, el metodo Get y Post, estan bien puestos en el PHP que yo tengo creado, lo que pasa es que he escrito el mensaje del foro rapido y me habre equivocado.

Pues eso lo unico que quiero es que me haga la paginacion de los resultados, ya que cuando introduzca datos, apareceran 10 o 20000 resultados; pero hay que tener en cuenta lo que tengo escrito en el PHP, es decir; hay que tener en cuenta lo que he explicado previamente.

Si se te ocurre alguna solucion lo comentas.

Por cierto, por si quieres ver como va el buscador, esta en
www.(loquetuyasabes).com/final.php


Muchas gracias


Un saludo
Yo en mi buscador ya te habia puesto una paginacion , puedes verlo en el code que te ., veo que el buscador esta quedando bien yo igual habia puesto una funcion javascript parecida para que cuando dieran click en perro o animal se cambiara , pero yo le ponia cargando.... , jejeje . Al parecer ya sabes mas sobre esto asi que se te haria facil ver este code ahi puse la paginacion :)

cesar_ed escribió:

<?php
  //Incluimos el archivo de conexion a mysql
  include ("conectar.php");
  //Declaramos las variables donde se almacenaron los datos de la nueva mascota enviados por el usuario
  $nombre = $_GET['nombre'];
  $tipo =   $_GET['TipodeAnimal'];
  $raza =   $_GET['Raza'];
  $tamano = $_GET['Tamano'];
  $estado = $_GET['Estado'];
  $sexo =   $_GET['Sexo'];
  $proc =   $_GET['Procedencia'];
  $edad =   $_GET['Edad'];
  
    //conectamos a la bd
	conectar();
    //buscamos la mascota que quiere encontrar el usuario
	         if(!$nombre || $nombre == '' && $tipo == '' && $raza == '' && $tamano == '' && 
   $estado == '' && $sexo == '' && $proc == '' && $edad == '' )
   {
     echo '

<center>No se encontraron resultados,
	         [url="buscar.html"]Regresa[/url]</center></p>';
			 }
			  else {
			  
			  //Comprobemos que el nombre del animal sea de una o mas palabras
			 
	  $busqueda = mysql_query("SELECT * FROM mascotas WHERE nombre LIKE '%$nombre%' OR tipo LIKE '%$tipo%' OR raza LIKE '%$raza%' 
	  OR tamano LIKE '%$tamano%' OR estado LIKE '%$estado%' OR sexo LIKE '%$sexo%' OR procedencia LIKE '%$proc%'
	   OR edad LIKE '%$edad%' ORDER BY mascota_id DESC   ")   or die ("

Ocurrio un error</p>");
	   
	   $numeroRegistros = mysql_num_rows($busqueda);
//HAGAMOS UNA PAGINACION, POR SI HAY MAS DE 30 ANIMALES CON LO QUE BUSCA EL USUARIO Y PONERLO EN VARIAS PAGINAS
			  
			      $tamPag=5;
    if(!isset($_GET["pagina"]))
    {
       $pagina=1;
       $inicio=1;
       $final=$tamPag;
    }else{
       $pagina = $_GET["pagina"];
    }
  
    $limitInf=($pagina-1)*$tamPag;

   
    $numPags=ceil($numeroRegistros/$tamPag);
    if(!isset($pagina))
    {
       $pagina=1;
       $inicio=1;
       $final=$tamPag;
    }else{
       $seccionActual=intval(($pagina-1)/$tamPag);
       $inicio=($seccionActual*$tamPag)+1;

       if($pagina<$numPags)
       {
          $final=$inicio+$tamPag-1;
       }else{
          $final=$numPags;
       }

       if ($final>$numPags){
          $final=$numPags;
       }
    }
			  $buscar = mysql_query("SELECT * FROM mascotas WHERE nombre LIKE '%$nombre%' OR tipo LIKE '%$tipo%' OR raza LIKE '%$raza%' 
	  OR tamano LIKE '%$tamano%' OR estado LIKE '%$estado%' OR sexo LIKE '%$sexo%' OR procedencia LIKE '%$proc%'
	   OR edad LIKE '%$edad%' ORDER BY mascota_id DESC  LIMIT ".$limitInf.",". $tamPag ."  ")   or die ("

Ocurrio un error</p>");
	   
			 $numeroDeresultados = mysql_num_rows($buscar);
			  
			 if($numeroDeresultados <= 0)
			 {
			 echo "

No se encontraron resultados</p>";
			 }
			 else {
			 if(mysql_num_rows($buscar))
			 {
			 while ($encontrado = mysql_fetch_array($buscar))
			 {
			 echo '

'.$encontrado["nombre"].'</p>';
			 }
			 }
			}
		}
		if($pagina>1)
    {
       echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?nombre=".$nombre."&TipodeAnimal=".$tipo."&Raza=".$raza."&Tamano=".$tamano."
	   &Estado=".$estado."&Sexo=".$sexo."&Procedencia=".$proc."&Edad=".$edad."&pagina=".($pagina-1)."'>";
       echo "<font face='verdana' size='-2'>anterior</font>";
       echo "</a> ";
	   
	   
    }

    for($i=$inicio;$i<=$final;$i++)
    {
       if($i==$pagina)
       {
          echo "<font face='verdana' size='-2'>[b]".$i."[/b] </font>";
       }else{
          echo "<a class='p' href='".$_SERVER["PHP_SELF"].
		  "?nombre=".$nombre."&TipodeAnimal=".$tipo."&Raza=".$raza."&Tamano=".$tamano."&Estado=".$estado."
		  &Sexo=".$sexo."&Procedencia=".$proc."&Edad=".$edad."&pagina=".$i."'>";
          echo "<font face='verdana' size='-2'>".$i."</font></a> ";
		  
       }
    }
    if($pagina<$numPags)
   {
       echo " <a class='p' href='".$_SERVER["PHP_SELF"]."?nombre=".$nombre."&TipodeAnimal=".$tipo."&Raza=".$raza."&Tamano=".$tamano."
	   &Estado=".$estado."&Sexo=".$sexo."&Procedencia=".$proc."&Edad=".$edad."&pagina=".($pagina+1)."'>";
       echo "<font face='verdana' size='-2'>siguiente</font></a>";
   }

   echo '



<center>


Buscador por <a href="http://www.comocreartuweb.com/phpBB2/profile.php?mode=viewprofile&u=18522" title="Perfil de cesar_ed">
cesar_ed</a> [url="http://www.comocreartuweb.com"]CCTW[/url]</p>
</center>';
			
			 ?>

Y listo al fin quedo , dime si te funciono, y ya de ahi es facil editar como van a aparecer los resultados , saludos y suerte :wink:
Es facil programar "Solo interesate en aprender"
Buenas de nuevo esar.

Lo primero de todo, gracias x tu ayuda y x el codigo; pero yo el buscador ya lo tengo exo, funciona todo perfecto y tal; pero salen muxos resultados y mejor si estan paginados.

Esta es la estructura de como es el codigo ( de 4000 lineas o algo asi).
<?php
Aqui miramos si la variable $tipo es ="nulo" o no
Si es = "Nulo o vacio" entramos en el codigo HTML, en el que salen las opciones para elegir, el script que cambia automaticamente las cosas, etc.
Cuando le das al boton buscar, te reenvia a la misma pagina, y te pasa las variabkles x el metodo POST.

Si $tipo es distinto de nulo (esto es el tipo de animal) entra en el codigo php
Recogo el valor de cuantos registros se quieren mostrar x pagina en $registros
Nos metemos en un monton de IFs, etc hasta sacar:
$SQL = "Select (lo que sea) FROM mascotas (y las condiciones que haya si las hay)
Tambien tengo una variable para saber si tengo k tener en cuenta la edad del animal o no

Despues, hago el resultado teniendo en cuenta donde quiero que empiece y tal para que muestre los (30 primeros) resultados x ejemplo, y despues los siguientes etc. Entramos en el While:

Si tengo k tener en cuenta la edad, compruebo la edad que tiene el animal en ese momento, y si coincide lo muestro y sino pues no

AQUI ESTA EL PROBLEMA

En un principio, yo habia puesto la paginacion x el metodo GET, pero si damos click a la "Pagina siguiente (o los 30 resultados siguientes por ejemplo)" lo he puesto para k me lo envie a la misma pagina, y claro,l el valor de $sql lo pierde, y tambien el de $registros y x tanto me da error y peta la busqueda.

Entonces yo habia pensado en 2 posibles soluciones:

Hacer la paginacion x el metodo GET y pasarle junto con el valor de $pagina, los valores de $sql y $registros para que cuando vaya a la misma pagina, sepa lo que tiene que mostrar.

El problema de este metodo en mi opinion, es que se ven las variables x la URL, y no me gusta; ademas, algun gracioso, podia poner de busqueda "DROP TABLE...." o lo que sdea y ya me ha jodido.


La otra opcion, y la que a mi mas me gusta, es hacer la paginacion x el metodo POST; crear una especie de CASILLAS DE OPCION, LIST BOX o lo k sea k lleven el valor de $sql $registros, y $pagina; pero k ninguno de estos LIST BOX, CASILLAS DE OPCION o lo que sea se muestren; y el boton de "Enviar" otra vez a la misma pagina, fuera el k antes teniamos de "Inicio", "1", "2", etc.

Lo bueno de este metodo, es que no se ve nada x la URL, y nadie puede hacer el tonto con la busqueda; ademas me parece mas elegante y facil; la cosa es que esto no se como hacerlo.

Practicamente, se como lo haria, pero no se como se ponen los LIST BOX, CASILLAS DE OPCION o lo que sea visible =False.

Si se te ocurre alguna otra forma, lo dices y ya esta.


A lo mejor te parece difiicil de entender, pero si lo lees con calma entenderas lo que estoy haciendo, y lo que me falta x hacer.

Muchas gracias.

Un Saludo.
Ahora que lo pienso, podria hacerlo pasando las variables para la paginacion asi:

<input type="hidden" name="edad" value="55"> (Esto es un ejemplo)

Yo creo que lo podrtia hacer asi no?

¿Que te parece?

Muchas gracias otra vez
En el codigo que te puse viene como es la paginacion , pero aqui te lo dejo resumido :

Busca una parte parecida a este codigo:

$buscar = mysql_query("SELECT * FROM mascotas WHERE nombre LIKE '%$nombre%' OR tipo LIKE '%$tipo%' OR raza LIKE '%$raza%'
     OR tamano LIKE '%$tamano%' OR estado LIKE '%$estado%' OR sexo LIKE '%$sexo%' OR procedencia LIKE '%$proc%'
      OR edad LIKE '%$edad%'."  ")   or die ("

Ocurrio un error</p>");



Despues de este trozo de codigo:


$buscar = mysql_query("SELECT * FROM mascotas WHERE nombre LIKE '%$nombre%' OR tipo LIKE '%$tipo%' OR raza LIKE '%$raza%'
     OR tamano LIKE '%$tamano%' OR estado LIKE '%$estado%' OR sexo LIKE '%$sexo%' OR procedencia LIKE '%$proc%'
      OR edad LIKE '%$edad%'."  ")   or die ("

Ocurrio un error</p>");


Pon esto e iniciamos el codigo de paginacion :




$numeroRegistros = mysql_num_rows($busqueda); 
               $tamPag=5; //Aqui ponemos el numero de resultados a mostrar
    if(!isset($_GET["pagina"]))
    {
       $pagina=1;
       $inicio=1;
       $final=$tamPag;
    }else{
       $pagina = $_GET["pagina"];
    }
 
    $limitInf=($pagina-1)*$tamPag;

   
    $numPags=ceil($numeroRegistros/$tamPag);
    if(!isset($pagina))
    {
       $pagina=1;
       $inicio=1;
       $final=$tamPag;
    }else{
       $seccionActual=intval(($pagina-1)/$tamPag);
       $inicio=($seccionActual*$tamPag)+1;

       if($pagina<$numPags)
       {
          $final=$inicio+$tamPag-1;
       }else{
          $final=$numPags;
       }

       if ($final>$numPags){
          $final=$numPags;
       }
    } 
Despues ya puesto eso pones otra vez el codigo del buscador pero añadiendole lo que esta en rojito:

$buscar = mysql_query("SELECT * FROM mascotas WHERE nombre LIKE '%$nombre%' OR tipo LIKE '%$tipo%' OR raza LIKE '%$raza%'
     OR tamano LIKE '%$tamano%' OR estado LIKE '%$estado%' OR sexo LIKE '%$sexo%' OR procedencia LIKE '%$proc%'
      OR edad LIKE '%$edad%' [color=red]ORDER BY mascota_id DESC  LIMIT ".$limitInf.",". $tamPag ."[/color]  ")   or die ("

Ocurrio un error</p>")

Despues ya van las respectivas llamadas al buscador desplegando los resultados, osea el while , pero recuerda que tienes que llamar el buscador con lo que te señale en rojito o si no, no funcionara, seria algo asi:


$numeroDeresultados = mysql_num_rows($buscar);
          
          if($numeroDeresultados <= 0)
          {
          echo "

No se encontraron resultados</p>";
          }
          else {
          if(mysql_num_rows($buscar))
          {
          while ($encontrado = mysql_fetch_array($buscar))
          {
        //Tus resultados
          echo '

'.$encontrado["nombre"].'</p>';
          }
          }
         } 
Despues ahi vemos sorpresivamente que ya se cargan solo los resultados puestos en la variable tamPag; pero ahora falta ponerlo en sus respectivas paginas , entonces debajo de lo ya hecho ponemos esto:


    if($pagina>1)
    {
       echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?[color=red]nombre=".$nombre."&TipodeAnimal=".$tipo."&Raza=".$raza."&Tamano=".$tamano."
      &Estado=".$estado."&Sexo=".$sexo."&Procedencia=".$proc."&Edad=".$edad."[/color]&pagina=".($pagina-1)."'>";
       echo "<font face='verdana' size='-2'>anterior</font>";
       echo "</a> ";
      
      
    }

    for($i=$inicio;$i<=$final;$i++)
    {
       if($i==$pagina)
       {
          echo "<font face='verdana' size='-2'>[b]".$i."[/b] </font>";
       }else{
          echo "<a class='p' href='".$_SERVER["PHP_SELF"].
        "?[color=red]nombre=".$nombre."&TipodeAnimal=".$tipo."&Raza=".$raza."&Tamano=".$tamano."&Estado=".$estado."
        &Sexo=".$sexo."&Procedencia=".$proc."&Edad=".$edad."[/color]&pagina=".$i."'>";
          echo "<font face='verdana' size='-2'>".$i."</font></a> ";
       
       }
    }
    if($pagina<$numPags)
   {
       echo " <a class='p' href='".$_SERVER["PHP_SELF"]."?[color=red]nombre=".$nombre."&TipodeAnimal=".$tipo."&Raza=".$raza."&Tamano=".$tamano."
      &Estado=".$estado."&Sexo=".$sexo."&Procedencia=".$proc."&Edad=".$edad."[/color]&pagina=".($pagina+1)."'>";
       echo "<font face='verdana' size='-2'>siguiente</font></a>";
   } 
Lo que te puse en rojito lo debes editar por las variables que hayas puesto en la url al momento de dar click en buscar , Y asi ya tendraimos nuestra paginacion recuerda que esta parte de codigo:

$busqueda = mysql_query("SELECT * FROM mascotas WHERE nombre LIKE '%$nombre%' OR tipo LIKE '%$tipo%' OR raza LIKE '%$raza%'
     OR tamano LIKE '%$tamano%' OR estado LIKE '%$estado%' OR sexo LIKE '%$sexo%' OR procedencia LIKE '%$proc%'
      OR edad LIKE '%$edad%'   ")   or die ("

Ocurrio un error</p>"); 
Es solamente ficticia era para poder tener algo en que basarme pero tu ya has de saber de que parte de codigo te hablo

Espero y te haya ayudado

un saludo 8)
Es facil programar "Solo interesate en aprender"
Hola Cesar,

Lo primero, quiero agradecerte tu ayuda, ya que gracias a ti, he logrado que me funcione la paginacion; me ha costado mucho, pero lo he logrado.

En segundo lugar, ahora solo me falta algun pequeño detalle que no me termina de cuadrar; y es que no se como hacer lo siguiente;

Si la persona elige que quiere buscar el animal <de 6 meses, tiene k hacer un select de todas las mascotas cuya diferencia entre la fecha del dia en que lo buscas y la fecha de nacimiento sea < de 6 meses. Eso no termino de saber muy bien como ponerlo, haber si me podias ayudar.

Y luego otra cosa, cuando la persona que busca quiere buscar + informacion sobre el animal, nos tendra que enviar a la misma pagina (la pagina en la que estamos), pasando como variables unicamente el mascota_id y asi supongo k ya funcionaria no?

Muchas gracias, si quieres probar si funciona, ya sabes en que pagina es: prueba.php

Un saludo
Por cierto otra cosa, cuando le doy a la informacion de un animal, me pone la historia de ese animal (en la base de datos esta en FULL TEXT o parecido no recuerdo bien).

La cuestion es que si el texto es muy grande, la tabla se autoensancha al ancho de pagina y queda muy feo; me gustaria que si se pasara del tamaño de la tabla, el texto continuara en otra linea.

Se te ocurre alguna idea?

Si quieres probarlo, entra en la pagina, busca todos los animales, y dale a la informacion de Jack (IdPerro = 20), y veras a lo que me refiero.

Muchas gracias