Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bobnaldo

[Resolvido] Erro de Paginação...

Recommended Posts

Olá pessoal, sou iniciante e acho que estou com um problema besta mas que não consigo solucionar. criei um form de consulta onde seleciono o tipo de consulta em um menu/list "tipobusca" e descrevo o termo em um textfield "termobusca" como podemos observar abaixo:

 

form.html

<form action="relatorio_consulta.php" method="post" >
  <p><strong>Escolha uma opção:</strong><br />
  <select name="tipobusca">
    <option selected="selected"></option>
                  <option value="nome">Nome</option>
                  <option value="matricula">Matricula</option>
                  <option value="identidade">Identidade</option>
                  <option value="cpf">CPF</option>

  </select>
  </p>
  <p>    <strong>Digite o termo da consulta:</strong><br />
    <input name="termobusca" type="text" class="textfield" size="31" />
  </p>
  <p></p>
    <p align="justify"><input name="consultar" type="submit" class="button" id="consultar" value="Consultar" /><input type="reset" class="button" value="Limpar" /></p>
</form>

Os dados são eviados para relatorio_consulta.php como podemos também observar a seguir:

 


relatorio_consulta.php

<?
 
    // Fazemos o include do arquivo com as config do banco de dados
  
    include "mysqlconfig.php";
  
    // Executa a cláusula SQL
  
    include "mysqllistar.php";
  
    //Executa a consulta
    
    $tipobusca  = $_POST['tipobusca'];
    $termobusca = trim($_POST['termobusca']);

	if (!$tipobusca || !$termobusca)
    {
       echo 'Você não preencheu todos os campos. Por favor tente novamente.';
       exit;
    }
  
    $tipobusca = addslashes($tipobusca);
    $termobusca = addslashes($termobusca);

	$sql = "select * from tb_info where ".$tipobusca." like '%".$termobusca."%' ORDER BY data_sys DESC";

	$resultado = mysqllistar($conect,$sql);

	//#Número de registros paginados por página
	$registros_pagina = "1";
	
	//#Resgatamos a página que estiver sendo acessada pela paginação
	$lista = (int)$_GET["lista"];
	
	//#Se for a página inicial da consulta, a variável $lista será nula
	if(!$lista) {
		$pc = "1";
	}
	//#Caso contrário, declaramos o valor atual da variável $lista
	else {
		$pc = $lista;
	}
	
	$inicio = $pc - 1;
	$inicio = $inicio * $registros_pagina;
	
	//#Limitamos a nossa consulta do MySQL para exibir apenas a quantidade máxima configurada mais acima
	$resultado = mysql_query("$sql LIMIT $inicio, $registros_pagina");
	
	//#Vamos agora consultar a quantidade total de registros
	$todos = mysql_query("$sql");
	
	//#Armazenamos a quantidade total de registros
	$tr = mysql_num_rows($todos);
	
	//#Armazenamos o resultado da quantidade total de registros pela quantidade de registros por página
	$tp = $tr / $registros_pagina;
	 
	$cont = 0;
	
	// Exibe o resultado da nossa consulta
	#Se não houverem registros a se exibir, é acusado o retorno abaixo
	
	if(mysql_num_rows($resultado) < 1) {
	echo "Nenhum registro encontrado";
	}
	//#Caso contrário é exibido o resultado da consulta
	else {
	//#Exibimos o resultado dos registros encontrados na consulta
	
	while($row = mysql_fetch_array($resultado)) {

	echo "<p align=center>Cadastro Aluno</p>";
	echo "<p align=justify> </p>";	
	echo "<p align=justify>Nome: ".$row['nome']."</p>";
	echo "<p align=justify>Matrícula: ".$row['matricula']."</p>";
	echo "<p align=justify>Identidade: ".$row['identidade']."</p>";
	echo "<p align=justify>CPF: ".$row['cpf']."</p>";
	echo "<p align=justify>Nascimento: ".$row['nascimento']."</p>";
	echo "<p align=justify>Curso: ".$row['curso']."</p>";
	echo "<p align=justify>Período: ".$row['periodo']."</p>";
	echo "<p align=justify>Endereço: ".$row['endereco']."</p>";

		
	$cont = $cont + 1;
	
	}
?>             
              </p>
          <p align="center">
            <?
	//#E por fim montamos os links da paginação

	$tp = ceil($tp);
	if($pc>1) {
	   $anterior = $pc - 1;
		echo "<a href=\"?lista=$anterior\">[Anterior]</a> ";
	}
	for($i=$pc-5;$i<$pc;$i++) {
		if($i<=0) {
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";
		}
	}
	for($i=$pc;$i<=$pc+5;$i++) {
		if($i==$tp) {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}

			echo "</a> ";
			break;
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";

			if($i==$pc+5 && $tp>$pc+5) {
				echo " ... <a href=\"?lista=$tp\">[$tp]</a>";
			}
		}
	}
	if($pc<$tp) {
		$proxima = $pc + 1;
		echo " <a href=\"?lista=$proxima\">[Próxima]</a>";
	}
}
?>

Bom, até aí tudo bem, porém quando eu clico no link para passar para a página seguinte ele retorna a menssagem: Você não preencheu todos os campos. Por favor tente novamente. Como faço para que o valor de $_POST transforme-se em um valor fixo? Já fiz um teste com SELECT * tb_info e a paginação funcionou perfeitamente. O problema tá na condição if (!$tipobusca || !$termobusca)... Por favor, alguém pode me ajudar? Fico muito agradecido pois já quebrei a cabeça e nào consegui resolver isto... Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de fazer assim:

if (!$tipobusca || !$termobusca)

Faça assim:

if ($tipobusca=='' || $termobusca=='')

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você espera dessa condição?

if (!$tipobusca || !$termobusca)
Pelo que vejo ela nunca retornará verdadeiro nessa situação....

 

Olá lucaswxp, bem espero com essa condição que o usuário preencha as duas caixas de textos ;). Outra coisa, quando eu retiro esta condição ele retorna erro na SQL. Coloquei os includes abaixo... Obrigado irmãozinho.

 

Ao invés de fazer assim:

if (!$tipobusca || !$termobusca)

Faça assim:

if ($tipobusca=='' || $termobusca=='')

Continua dando o mesmo erro amigão. Valeu Shrek-BH ;)...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysqlconfig.php

<?php

      // Nesse arquivo passamos as configurações para nosso servidor MySQL

      // Configuração endereço MySQL

   
      $hostname ="meubanco.com";
   
      // Configuração do nome da base de dados MySQL
   
      $database="banco";
   
      // Configuração do nome do usuário de acesso a base de dados MySQL
   
      $usuario="usuario";
   
      // Configuração da senha para acesso a base de dados MySQL
  
      $senha="senha";
  
      // Conectamos ao nosso servidor MySQL
  
      if(!($conect = mysql_connect($hostname,$usuario,$senha)))
  
      {
  
      echo "Erro ao conectar ao MySQL.";
  
      exit;
  
      }
  
      // Selecionamos nossa base de dados MySQL
  
      if(!($con = mysql_select_db($database,$conect)))
  
      {
  
      echo "Erro ao selecionar ao MySQL.";
  
      exit;
  
      }

?>

mysqllistar.php
  
      <?php
   
      /*
   
      empty() Retorna FALSE se var é um valor não nulo ou não zero.
   
      Em outras palavras, "", 0, "0", NULL, FALSE, array(),
   
      var $var;, e objetos sem propriedades são considerados como valores vazios.
   
      TRUE será retornado se var é vazio.
   
      empty() é o oposto de (boolean) var, com exceção de não gerar um alerta
   
      (warning) se a variável não existir.
   
      */
  
      // Função com os parametros recebidos onde
  
      // O $conect é nosso Ponteiro
  
      // O $sql é nossa SQL de consulta
  
      // O $falha é para sabermos se função vai listar ou não (0=não, 1=sim)
  
      function mysqllistar($conect,$sql,$falha = 1)
  
      {
  
      if(empty($sql) OR !($conect))
  
      {
  
      return 0; //Erro com a conexão e ou consulta SQL
  
      }
  
      if (!($res = @mysql_query($sql,$conect)))
  
      {
  
      if($falha)
  
      echo "Erro na SQL.";
  
      exit;
  
      }
  
      return $res;
  
      }
  
      ?>

<form action="relatorio_consulta.php" method="post" >
  <p><strong>Escolha uma opção:</strong><br />
  <select name="tipobusca">
    <option selected="selected"></option>
                  <option value="nome">Nome</option>
                  <option value="matricula">Matricula</option>
                  <option value="identidade">Identidade</option>
                  <option value="cpf">CPF</option>

  </select>
  </p>
  <p>    <strong>Digite o termo da consulta:</strong><br />
    <input name="termobusca" type="text" class="textfield" size="31" />
  </p>
  <p></p>
    <p align="justify"><input name="consultar" type="submit" class="button" id="consultar" value="Consultar" /><input type="reset" class="button" value="Limpar" /></p>
</form>

<?
 
    // Fazemos o include do arquivo com as config do banco de dados
  
    include "mysqlconfig.php";
  
    // Executa a cláusula SQL
  
    include "mysqllistar.php";
  
    //Executa a consulta
    
    $tipobusca  = $_POST['tipobusca'];
    $termobusca = trim($_POST['termobusca']);

	if (!$tipobusca || !$termobusca)
    {
       echo 'Você não preencheu todos os campos. Por favor tente novamente.';
       exit;
    }
  
    $tipobusca = addslashes($tipobusca);
    $termobusca = addslashes($termobusca);

	$sql = "select * from tb_ocorrencia where ".$tipobusca." like '%".$termobusca."%' ORDER BY data_sys DESC";

	$resultado = mysqllistar($conect,$sql);

	//#Número de registros paginados por página
	$registros_pagina = "1";
	
	//#Resgatamos a página que estiver sendo acessada pela paginação
	$lista = (int)$_GET["lista"];
	
	//#Se for a página inicial da consulta, a variável $lista será nula
	if(!$lista) {
		$pc = "1";
	}
	//#Caso contrário, declaramos o valor atual da variável $lista
	else {
		$pc = $lista;
	}
	
	$inicio = $pc - 1;
	$inicio = $inicio * $registros_pagina;
	
	//#Limitamos a nossa consulta do MySQL para exibir apenas a quantidade máxima configurada mais acima
	$resultado = mysql_query("$sql LIMIT $inicio, $registros_pagina");
	
	//#Vamos agora consultar a quantidade total de registros
	$todos = mysql_query("$sql");
	
	//#Armazenamos a quantidade total de registros
	$tr = mysql_num_rows($todos);
	
	//#Armazenamos o resultado da quantidade total de registros pela quantidade de registros por página
	$tp = $tr / $registros_pagina;
	 
	$cont = 0;
	
	// Exibe o resultado da nossa consulta
	#Se não houverem registros a se exibir, é acusado o retorno abaixo
	
	if(mysql_num_rows($resultado) < 1) {
	echo "Nenhum registro encontrado";
	}
	//#Caso contrário é exibido o resultado da consulta
	else {
	//#Exibimos o resultado dos registros encontrados na consulta
	
	while($row = mysql_fetch_array($resultado)) {

	echo "<p align=center>Exemplo cadastro</p>";
	echo "<p align=justify>Nome: ".$row['nome']."</p>";
	echo "<p align=justify>Matrícula: ".$row['matricula']."</p>";
	echo "<p align=justify>Identidade: ".$row['identidade']."</p>";
	echo "<p align=justify>CPF: ".$row['cpf']."</p>";
	echo "<p align=justify> </p>";	
		
	$cont = $cont + 1;
	
	}
?>             
              </p>
          <p align="center">
            <?
	//#E por fim montamos os links da paginação

	$tp = ceil($tp);
	if($pc>1) {
	   $anterior = $pc - 1;
		echo "<a href=\"?lista=$anterior\">[Anterior]</a> ";
	}
	for($i=$pc-5;$i<$pc;$i++) {
		if($i<=0) {
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";
		}
	}
	for($i=$pc;$i<=$pc+5;$i++) {
		if($i==$tp) {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}

			echo "</a> ";
			break;
		}
		else {
			echo "<a href=\"?lista=$i\">";
			if($i=="$pc") {
				echo "<b>[$i]</b>";
			}
			else {
				echo "[$i]";
			}
			echo "</a> ";

			if($i==$pc+5 && $tp>$pc+5) {
				echo " ... <a href=\"?lista=$tp\">[$tp]</a>";
			}
		}
	}
	if($pc<$tp) {
		$proxima = $pc + 1;
		echo " <a href=\"?lista=$proxima\">[Próxima]</a>";
	}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você espera dessa condição?

if (!$tipobusca || !$termobusca)
Pelo que vejo ela nunca retornará verdadeiro nessa situação....

 

Outra coisa Lucas, acho que tens razão, a condição sempre vai retornar falso. Tem como enviar as variáveis sem ser por $_POST? Ou fazer essa condição na tela do FORM e enviar por POST mesmo só que sem as condições?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como enviar as variáveis sem ser por $_POST? Ou fazer essa condição na tela do FORM e enviar por POST mesmo só que sem as condições?

Você poderia com javascript... Conteudo, parece ser apenas erro de logica.

Para verificar se está vazio, faça assim:

if (empty($tipobusca) || empty($termobusca))
  echo 'Está vazio';

Se der erro no SQL, poste o erro, que aí ja será outra coisa....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como enviar as variáveis sem ser por $_POST? Ou fazer essa condição na tela do FORM e enviar por POST mesmo só que sem as condições?

Você poderia com javascript... Conteudo, parece ser apenas erro de logica.

Para verificar se está vazio, faça assim:

if (empty($tipobusca) || empty($termobusca))
  echo 'Está vazio';

Se der erro no SQL, poste o erro, que aí ja será outra coisa....

 

Com a mudança o retorno é o seguinte: Está vazioErro na SQL. O problema é na hora de paginar, pois ele busca a variável e ela tá vazia entendeste. Por isso tá dando essa bronca. A primeira página aparece normalmente e com a quantidade de páginas correspondente a procura. Vou montar o exemplo aqui e colocar o link já, já para você ver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm. Não tenho certeza se entendi o problema, mas parece que você terá que utilizar GET ao invés de POST. Pois você precisa manter as informações entre as páginas. Tente mudar pra GET....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm. Não tenho certeza se entendi o problema, mas parece que você terá que utilizar GET ao invés de POST. Pois você precisa manter as informações entre as páginas. Tente mudar pra GET....

 

Refiz isto e o problema persiste :(... Será que tem como enviar estes dados para uma página oculta tipo valida_consulta.php e apresentar na página relatorio_teste.php apenas as variáveis com os valores digitados na página de consulta_teste.php?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem pessoal, consegui resolver o problema depois de quebrar muito a cabeça. O problema era mas simples dio que eu esperava. Bem, para manter o valor fixo das variáveis é preciso criar uma página onde valida a condição, cria uma sessão e em seguida envia a seção para a página onde você quer que apareça o resultado da busca. Simples como deve ser ;). Abraço a todos os que me ajudaram e aos que apenas olharam o tópioc também. ;P...

 

mysqlconfig.php

 

<?php

 

// Nesse arquivo passamos as configurações para nosso servidor MySQL

 

// Configuração endereço MySQL

 

 

$hostname ="meubanco.com";

 

// Configuração do nome da base de dados MySQL

 

$database="banco";

 

// Configuração do nome do usuário de acesso a base de dados MySQL

 

$usuario="usuario";

 

// Configuração da senha para acesso a base de dados MySQL

 

$senha="senha";

 

// Conectamos ao nosso servidor MySQL

 

if(!($conect = mysql_connect($hostname,$usuario,$senha)))

 

{

 

echo "Erro ao conectar ao MySQL.";

 

exit;

 

}

 

// Selecionamos nossa base de dados MySQL

 

if(!($con = mysql_select_db($database,$conect)))

 

{

 

echo "Erro ao selecionar ao MySQL.";

 

exit;

 

}

 

?>

 

mysqllistar.php

 

<?php

 

/*

 

empty() Retorna FALSE se var é um valor não nulo ou não zero.

 

Em outras palavras, "", 0, "0", NULL, FALSE, array(),

 

var $var;, e objetos sem propriedades são considerados como valores vazios.

 

TRUE será retornado se var é vazio.

 

empty() é o oposto de (boolean) var, com exceção de não gerar um alerta

 

(warning) se a variável não existir.

 

*/

 

// Função com os parametros recebidos onde

 

// O $conect é nosso Ponteiro

 

// O $sql é nossa SQL de consulta

 

// O $falha é para sabermos se função vai listar ou não (0=não, 1=sim)

 

function mysqllistar($conect,$sql,$falha = 1)

 

{

 

if(empty($sql) OR !($conect))

 

{

 

return 0; //Erro com a conexão e ou consulta SQL

 

}

 

if (!($res = @mysql_query($sql,$conect)))

 

{

 

if($falha)

 

echo "Erro na SQL.";

 

exit;

 

}

 

return $res;

 

}

 

?>

 

consulta_ocorrencia.php

 

<form action="validarConsulta.php" method="post" >

<p><strong>Escolha uma opção:</strong><br />

<select name="tipobusca">

<option selected="selected"></option>

<option value="nome">Nome</option>

<option value="matricula">Matricula</option>

<option value="identidade">Identidade</option>

<option value="cpf">CPF</option>

 

</select>

</p>

<p> <strong>Digite o termo da consulta:</strong><br />

<input name="termobusca" type="text" class="textfield" size="31" />

</p>

<p></p>

<p align="justify"><input name="consultar" type="submit" class="button" id="consultar" value="Consultar" /><input type="reset" class="button" value="Limpar" /></p>

</form>

 

ValidarOcorrencia.php

 

<?php

 

$tipobusca = $_POST['tipobusca'];

$termobusca = trim($_POST['termobusca']);

 

if (!$tipobusca || !$termobusca)

{

echo 'Você não preencheu todos os campos. Por favor tente novamente.';

exit;

 

} else {

 

$tipobusca = addslashes($tipobusca);

$termobusca = addslashes($termobusca);

 

session_start(); {

$_SESSION['tipobusca'] = $tipobusca;

$_SESSION['termobusca'] = $termobusca;

}

header("Location: relatorio_ocorrencia.php"); }

?>

 

relatorio_ocorrencia.php

 

<?

 

// Fazemos o include do arquivo com as config do banco de dados

 

include "mysqlconfig.php";

 

// Executa a cláusula SQL

 

include "mysqllistar.php";

 

//Executa a consulta

 

$tipobusca = $_POST['tipobusca'];

$termobusca = trim($_POST['termobusca']);

 

if (!$tipobusca || !$termobusca)

{

echo 'Você não preencheu todos os campos. Por favor tente novamente.';

exit;

}

 

$tipobusca = addslashes($tipobusca);

$termobusca = addslashes($termobusca);

 

$sql = "select * from tb_ocorrencia where ".$tipobusca." like '%".$termobusca."%' ORDER BY data_sys DESC";

 

$resultado = mysqllistar($conect,$sql);

 

//#Número de registros paginados por página

$registros_pagina = "1";

 

//#Resgatamos a página que estiver sendo acessada pela paginação

$lista = (int)$_GET["lista"];

 

//#Se for a página inicial da consulta, a variável $lista será nula

if(!$lista) {

$pc = "1";

}

//#Caso contrário, declaramos o valor atual da variável $lista

else {

$pc = $lista;

}

 

$inicio = $pc - 1;

$inicio = $inicio * $registros_pagina;

 

//#Limitamos a nossa consulta do MySQL para exibir apenas a quantidade máxima configurada mais acima

$resultado = mysql_query("$sql LIMIT $inicio, $registros_pagina");

 

//#Vamos agora consultar a quantidade total de registros

$todos = mysql_query("$sql");

 

//#Armazenamos a quantidade total de registros

$tr = mysql_num_rows($todos);

 

//#Armazenamos o resultado da quantidade total de registros pela quantidade de registros por página

$tp = $tr / $registros_pagina;

 

$cont = 0;

 

// Exibe o resultado da nossa consulta

#Se não houverem registros a se exibir, é acusado o retorno abaixo

 

if(mysql_num_rows($resultado) < 1) {

echo "Nenhum registro encontrado";

}

//#Caso contrário é exibido o resultado da consulta

else {

//#Exibimos o resultado dos registros encontrados na consulta

 

while($row = mysql_fetch_array($resultado)) {

 

echo "<p align=center>Exemplo cadastro</p>";

echo "<p align=justify>Nome: ".$row['nome']."</p>";

echo "<p align=justify>Matrícula: ".$row['matricula']."</p>";

echo "<p align=justify>Identidade: ".$row['identidade']."</p>";

echo "<p align=justify>CPF: ".$row['cpf']."</p>";

echo "<p align=justify> </p>";

 

$cont = $cont + 1;

 

}

?>

</p>

<p align="center">

<?

//#E por fim montamos os links da paginação

 

$tp = ceil($tp);

if($pc>1) {

$anterior = $pc - 1;

echo "<a href=\"?lista=$anterior\">[Anterior]</a> ";

}

for($i=$pc-5;$i<$pc;$i++) {

if($i<=0) {

}

else {

echo "<a href=\"?lista=$i\">";

if($i=="$pc") {

echo "<b>[$i]</b>";

}

else {

echo "[$i]";

}

echo "</a> ";

}

}

for($i=$pc;$i<=$pc+5;$i++) {

if($i==$tp) {

echo "<a href=\"?lista=$i\">";

if($i=="$pc") {

echo "<b>[$i]</b>";

}

else {

echo "[$i]";

}

 

echo "</a> ";

break;

}

else {

echo "<a href=\"?lista=$i\">";

if($i=="$pc") {

echo "<b>[$i]</b>";

}

else {

echo "[$i]";

}

echo "</a> ";

 

if($i==$pc+5 && $tp>$pc+5) {

echo " ... <a href=\"?lista=$tp\">[$tp]</a>";

}

}

}

if($pc<$tp) {

$proxima = $pc + 1;

echo " <a href=\"?lista=$proxima\">[Próxima]</a>";

}

}

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.