Ir para conteúdo

Arquivado

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

johnhey

Pesquisa não funciona na paginação

Recommended Posts

Boa noite pessoal, tenho uma página que exibe uma galeria de imagens que foi cadastrada em um banco de dados, que está a funcionar.

Também adicionei um campo para fazer uma pesquisa em sql pelo nome das imagens, que também está a funcionar.

Se existir mais de 40 imagens faço uma paginação que também está a funcionar.

Só que, quando abro a paginação na página dois, três em diante e tento fazer uma pesquisa não me mostra nada, já coloquei mysql_error para ver se dava algum erro, mais não devolve nada.

Segue o código:

<?PHP
//Adiciona dados as variaveis no inicio
if ($tb == '') {
$tabela = "tb_bebes";
}
else {
$tb = $_GET['tb'];
$tabela = $tb;
}
$exibir = "adotado";

// Criando conexão
$link = mysql_connect('host', 'usuário', 'senha');
if (!$link) {
die('Não foi possí­vel conectar: ' . mysql_error()); //Exibe o erro por não conectar
}
//Conexão bem sucedida seleciona o BD
$db_selected = mysql_select_db('BD', $link);

//Pesquisa por nome ao carregar no botão pesquisa
if (isset($_POST['pesquisar'])){
$pesquisa = $_POST['pesquisa'];
if ($pesquisa == '') {
echo "<script type='text/javascript'>";
echo "alert('Informe um nome para pesquisa!');";
echo "</script>";
}
else {
$tabela = "tb_bebes";
$exibir = "adotado";
}
}

//Números de imagens por página
$limite = 40;

$SQL_COUNT = mysql_query("SELECT COUNT('registo') FROM $tabela");
$SQL_RESUL = ceil(mysql_result($SQL_COUNT, 0) / $limite);
$pg = (isset($_GET["pg"])) ? (int)$_GET["pg"] : 1;

$inicio = ($pg - 1) * $limite;

if ($pesquisa != ''){
//faz a pesquisa pelo nome
$SQL= mysql_query("SELECT * FROM tb_bebes WHERE nome like '%$pesquisa%' and $exibir LIKE '1' ORDER BY registo DESC LIMIT $inicio, $limite") or die('não foi possivel conectar '. mysql_error());

}
else{
$SQL= mysql_query("SELECT * FROM $tabela WHERE $exibir LIKE '1' ORDER BY registo DESC LIMIT $inicio, $limite");
}

while($lh = mysql_fetch_array($SQL)){
$nome= $lh['nome'];
$foto= $lh['foto'];

if ($tabela!='tb_bebes') {
?>
<ul><li><a class="group1" href="imagens/originais/bebes/<?php echo $tabela.'/'.$foto;?>" title="<?php echo ucfirst($nome);?> <?php $caminho = strtolower($nome).'.txt';
print file_get_contents($caminho);?>"><img src="imagens/originais/bebes/<?php echo $tabela.'/'.$foto;?>" width="100" height="80" alt="Foto <?php echo ucfirst($nome);?>" /></a></li></ul>
<?php }
else {
echo "<li><a href='fotos.php?tb=tb_$nome'><img src='imagens/originais/bebes/miniatura/$foto' alt='$nome' title='$nome' ><p><ucfirst($nome)</p></a></li>";
}
}
?>
</ul>
</div>
<div id="numpag">
<?php
$sqltotal ="select registo from $tabela";
$qrtotal = mysql_query($sqltotal) or die(mysql_error());
$numtotal = mysql_num_rows($qrtotal);
$totalpagina = ceil($numtotal/$limite);

echo '<a href="?pg=1">Primeira Página</a>';
if($SQL_RESUL > 1 && $pg <=$SQL_RESUL){
for($i=1; $i<=$SQL_RESUL; $i++){
echo "<a href='?pg=$i'/>$i</a>";
}
}
echo "<a href=\"?pg=$totalpagina\">Última Página</a>";
?>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_POST['pesquisar'] só existirá na primeira página, você terá que persistir essa informação nas outras páginas também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, primeiro, se decida, o nome do campo é pesquisar ou pesquisa?

if (isset($_POST['pesquisar'])){
$pesquisa = $_POST['pesquisa'];

Segundo, vou assumir que o nome do campo é pesquisar:

if ($_REQUEST['pesquisar'] != ''){
$pesquisa = $_REQUEST['pesquisar'];
echo '<a href="?pg=1&pesquisar='.$_REQUEST['pesquisar'].'">Primeira Página</a>';
if($SQL_RESUL > 1 && $pg <=$SQL_RESUL){
for($i=1; $i<=$SQL_RESUL; $i++){
echo "<a href='?pg=$i&pesquisar=".$_REQUEST['pesquisar']."'/>$i</a>"; 
}
}
echo "<a href=\"?pg=$totalpagina&pesquisar=".$_REQUEST['pesquisar']."\">Última Página</a>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe foi apenas um erro de digitação aqui no site o nome é "pesquisa" , mas não funcionou por completo, na primeira página e na página 1 funciona a 100% nas páginas 2 , 3 em diante não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segundo a W3C, pesquisas devem ser feitas através do request method GET. POST deve ser utilizado somente quando houver alterações em um storage.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe foi apenas um erro de digitação aqui no site o nome é "pesquisa" , mas não funcionou por completo, na primeira página e na página 1 funciona a 100% nas páginas 2 , 3 em diante não funciona.

Apenas postar "não funcionou" não resolve nada, são necessários dados para serem analisados, por exemplo, como está o código? Os dados estão persistindo na querystring? etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já alterei tudo para o method request, mas só funciona directo na pagina.php ou na pagina.php\?pg1, nas restante não funciona a pesquisa.

Segue o código.


<?PHP
//Adiciona dados as variaveis no inicio
if ($tb == '') {
$tabela = "tb_bebes";
}
else {
$tb = $_GET['tb'];
$tabela = $tb;
}
$exibir = "adotado";

// Criando conexão
$link = mysql_connect('hostingmysql243.amen.pt', 'JHT1_BDReborn', '1981htj');
if (!$link) {
die('Não foi possí­vel conectar: ' . mysql_error()); //Exibe o erro por não conectar
}
//Conexão bem sucedida seleciona o BD
$db_selected = mysql_select_db('rebornimaginacoesdebebes_com_pt_bdreborn', $link);

//Pesquisa por nome ao carregar no botão pesquisa
if ($_REQUEST['pesquisa'] != ''){
$pesquisa = $_REQUEST['pesquisa'];
if ($pesquisa == '') {
echo "<script type='text/javascript'>";
echo "alert('Informe um nome para pesquisa!');";
echo "</script>";
}
else {
$tabela = "tb_bebes";
$exibir = "adotado";
}
}

//Números de imagens por página
$limite = 40;

$SQL_COUNT = mysql_query("SELECT COUNT('registo') FROM $tabela");
$SQL_RESUL = ceil(mysql_result($SQL_COUNT, 0) / $limite);
$pg = (isset($_GET["pg"])) ? (int)$_GET["pg"] : 1;

$inicio = ($pg - 1) * $limite;

if ($pesquisa != ''){
//faz a pesquisa pelo nome
$SQL= mysql_query("SELECT * FROM tb_bebes WHERE nome like '%$pesquisa%' and $exibir LIKE '1' ORDER BY registo DESC LIMIT $inicio, $limite") or die('não foi possivel conectar '. mysql_error());

}
else{
$SQL= mysql_query("SELECT * FROM $tabela WHERE $exibir LIKE '1' ORDER BY registo DESC LIMIT $inicio, $limite");
}

while($lh = mysql_fetch_array($SQL)){
$nome= $lh['nome'];
$foto= $lh['foto'];

if ($tabela!='tb_bebes') {
?>
<ul><li><a class="group1" href="imagens/originais/bebes/<?php echo $tabela.'/'.$foto;?>" title="<?php echo ucfirst($nome);?> <?php $caminho = strtolower($nome).'.txt';
print file_get_contents($caminho);?>"><img src="imagens/originais/bebes/<?php echo $tabela.'/'.$foto;?>" width="100" height="80" alt="Foto <?php echo ucfirst($nome);?>" /></a></li></ul>
<?php }
else {
echo "<li><a href='fotos.php?tb=tb_$nome'><img src='imagens/originais/bebes/miniatura/$foto' alt='$nome' title='$nome' ><p><ucfirst($nome)</p></a></li>";
}
}
?>
</ul>
</div>
<div id="numpag">
<?php
$sqltotal ="select registo from $tabela";
$qrtotal = mysql_query($sqltotal) or die(mysql_error());
$numtotal = mysql_num_rows($qrtotal);
$totalpagina = ceil($numtotal/$limite);

if ($_REQUEST['pesquisa'] != ''){
$pesquisa = $_REQUEST['pesquisa'];

echo '<a href="?pg=1&pesquisar='.$_REQUEST['pesquisa'].'">Primeira Página</a>';
if($SQL_RESUL > 1 && $pg <=$SQL_RESUL){
for($i=1; $i<=$SQL_RESUL; $i++){
echo "<a href='?pg=$i&pesquisar=".$_REQUEST['pesquisa']."'/>$i</a>";
}
}
echo "<a href=\"?pg=$totalpagina&pesquisar=".$_REQUEST['pesquisa']."\">Última Página</a>";
}
else {
echo '<a href="?pg=1&pesquisar='.$_REQUEST['pesquisa'].'">Primeira Página</a>';
if($SQL_RESUL > 1 && $pg <=$SQL_RESUL){
for($i=1; $i<=$SQL_RESUL; $i++){
echo "<a href='?pg=$i&pesquisar=".$_REQUEST['pesquisa']."'/>$i</a>";
}
}
echo "<a href=\"?pg=$totalpagina&pesquisar=".$_REQUEST['pesquisa']."\">Última Página</a>";
}
?>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha como está a sua paginação:

 

echo "<a href='?pg=$i&pesquisar=".$_REQUEST['pesquisa']."'/>$i</a>";

 

Altere o "pesquisar" ali para "pesquisa".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já agora como faço para postar aqui o código formatado, estou a enviar através do iPad e não aparece a função de escolher se é código php html ou css como no computador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa tarde pessoal, preciso de vossa ajuda, pois infelizmente não consigo.

 

1- A listagem de todas as imagens esta funcionando;

2- Na pagina adotados.php funciona todas as pesquisas;

3- Na primeira página da paginação "\adotados.php&pg=1" também funciona as pesquisas;

 

da Páginação 2 em diante não funciona a pesquisa, tenho sempre que voltar a primeira página para realizar outra pesquisa.

Ao fazer alguma busca sempre me devolve a mensagem:

Não foi encontrado nenhum bebé com este nome, por favor verifique

 

meu form:

<form name="formbusca" enctype="multiart/form-data" method="post" action="">
 			<div id="pesquisa">
 			Digite o nome para a pesquisa:
 			<input type="text" name="buscar" >
 			<input type="submit" class="btn btn-default" name="enviar" value="Pesquisar"/>
 			</div>
 		</form>

Minha consulta:

<?PHP
 				$tabela = 'tb_bebes';
 				//Conexão com o Banco de Dados
				$conexao = mysql_connect('host', 'usuario', 'senha');
				if (!$conexao) {
					die('Não foi possí­vel conectar: ' . mysql_error()); //Exibe o erro por não conectar
					}
					//Conexão bem sucedida seleciona o BD
				$db_selected 		= mysql_select_db('rebornimaginacoesdebebes_com_pt_bdreborn', $conexao);
				
				$pagina = $_GET['pg'];
					if ($pagina > 1){
						$pagina = $pagina;
					}else {
						$pagina = 1;
					}
				
				//Quantidade de imagens por página
				$limite_fotos_pg = 40;
				
				$inicio = ($pagina * $limite_fotos_pg) - $limite_fotos_pg;
				
				//busca a foto
				$buscar = $_POST['buscar'];
				$sql_listar_fotos 	= mysql_query("SELECT * FROM $tabela WHERE nome like '%$buscar%' and adotado LIKE '1' ORDER BY registo desc LIMIT $inicio, $limite_fotos_pg" );
				$total_fotos 		= mysql_num_rows($sql_listar_fotos);
				
				if ($total_fotos == '0') {
					echo "<h2> Não foi encontrado nenhum bebé com este nome, por favor verifique</h2>";
				} else {
						while ($produto = mysql_fetch_array($sql_listar_fotos)){
					$nome= $produto['nome'];
					$foto= $produto['foto'];
				
					echo "<li><a href='fotos.php?tb=tb_$nome'><img src='imagens/originais/bebes/miniatura/$foto' alt='$nome' title='$nome' ><p><ucfirst($nome)</p></a></li>";
				}
				}

Minha paginação:

<?php
//busca a foto
$buscar = $_REQUEST['buscar'];

$sqltotal =mysql_query("SELECT * FROM $tabela WHERE nome like '%$buscar%' and adotado LIKE '1'");
$numtotal = mysql_num_rows($sqltotal);
$totalpagina = ceil($numtotal/$limite_fotos_pg);

echo '<a href="?pg=1&tb='.$_REQUEST['$buscar'].'">Primeira Página</a>';

if($totalpagina > 1 && $pagina <=$totalpagina){
for($i=1; $i<=$totalpagina; $i++){
echo "<a href='?pg=$i&tb=".$_REQUEST['$buscar']."'/>$i</a>"; 
}
}
echo "<a href=\"?pg=$totalpagina&tb=".$_REQUEST['$buscar']."\">Última Página</a>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tchê, a questão é extremamente simples, você está copiando/colando. O que você tem que fazer é ler e entender a lógica.. copiar e colar sem entender não vai adiantar nada, basta olhar o que você postou:

1 - \adotados.php&pg=1

Isso nunca vai funcionar, motivo? O que separa a querystring do da URL é um ponto de interrogação ? e não o "&".

 

2 - $buscar = $_REQUEST['buscar'];

Você está usando o buscar, mas na paginação...

 

3 - ?pg=1&tb='.$_REQUEST['$buscar']

...Na paginação além de estar buscando um tal de '$buscar' está usando um valor diferente do índice que está passando (tb), ou seja, se decida se o negócio é buscar ou tb...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe mais não consigo compreender, pode me chamar de burro ou o que quiser, nunca fiz nenhum curso e até sei muito por isso.

O facto deu ter colocado & e ? é que vi em uma video aula assim, e esta funcionando.

Esta criando minha paginação correcta.

Se não se importar vamos lá ver se consigo explicar e me ajudar, por favor.

 

Fiz um form e criei um input com o nome de 'buscar'.

 

Depois criei uma variável $buscar e joguei o valor do input dentro dela, correcto?

assim:

$buscar = $_REQUEST['buscar']

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando gero o resultado da pesquisa, que penso que seja aqui através do while: Correcto?

while ($produto = mysql_fetch_array($sql_listar_fotos)){
					$nome= $produto['nome'];
					$foto= $produto['foto'];
				
					echo "<li><a href='adotados.php?tb=tb_$nome'><img src='imagens/originais/bebes/miniatura/$foto' alt='$nome' title='$nome' ><p><ucfirst($nome)</p></a></li>";

estou atribuindo no echo outro indice ('tb') porque depois irei precisar dele para mudar o nome da tabela que irei pesquisar, ou seja, cada tabela tera o nome da imagem. Se fiz mal até aqui por favor corrija-me.

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque gostaria de fazer um único arquivo de galeria. mudando assim somente a tabela de pesquisa. e não ter que criar arquivos para cada álbum.

exemplo.

Não quero ter que criar: lucio.php, daniel.php, carlos.php

No href na linha echo bastava eu concatenar o "nome da imagem" através da váriavel $nome com "php" que criava o link para a página, correcto?

assim:

echo "<li><a href='NOME DA IMAGEM.'.php'>....

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas como quero usar somente um arquivo. criei o indice tb no link, assim quando eu clicar na imagem irá atribuir a variavel ('tb') com a concatenação o nome da tabela.

 

Então ai coloquei.

if ($tb == ''){
    $tabela = 'tb_bebes';
}else{
    tabela = $tb;
}

por isso coloquei o tb na páginação, espero ter sido claro. E que possa me ajudar, se for o caso, até pode me enviar um numero de telefone que retorno a ligação, posto aqui meu email caso não queira enviar por mensagem.

Pois pode ser eu quem não consigo me expressar correctamente.

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.