Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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";
}$tb = $_GET['tb'];
$tabela = $tb;
}
$exibir = "adotado";
// Criando conexão
$link = mysql_connect('host', 'usuário', 'senha');
if (!$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>";
}$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 != ''){$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());
}$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 }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>Desculpe pela ignorância mais como faço? Passei o dia todo a ver o código que já não consigo ver o ; à frente
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>";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.
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.
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...
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";
}$tb = $_GET['tb'];
$tabela = $tb;
}
$exibir = "adotado";
// Criando conexão
$link = mysql_connect('hostingmysql243.amen.pt', 'JHT1_BDReborn', '1981htj');
if (!$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>";
}$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 != ''){$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());
}$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 }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>";
}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>Olha como está a sua paginação:
echo "<a href='?pg=$i&**pesquisar**=".$_REQUEST['**pesquisa**']."'/>$i</a>";
Altere o "pesquisar" ali para "pesquisa".
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.
Também já alterei pesquisar para pesquisa como o ESerra disse não resultou
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>";
?>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...
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']
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.
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'>....
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.
$_POST['pesquisar'] só existirá na primeira página, você terá que persistir essa informação nas outras páginas também.