Jump to content
DreamOn

[Resolvido] Limitar tabela á procura

Recommended Posts

DreamOn

Boas pessoal ;)

Preciso de ajuda numa das páginas do site onde inseri um sistema simples de procura...

O caso é o seguinte:

Como podem ver pela imagem a minha procura funciona mas está a mostrar os resultados por baixo da caixa de procura:

search_zpsbfwefbmw.png

O meu objectivo era que os resultados apareçam na tabela removendo os outros que não correspondem á procura de modo a que me seja possivel ainda, como mostra na tabela, clicar no "Ver Ficheiro" para que seja possivel ao utilizador utilizar esse link.

Numa explicação basica quero que a tabela fique igual ao que está mas apenas com os resultados da procura.

Código da página:

<?php
mysql_connect("localhost","root","mysql") or die("Não conectado...");
mysql_select_db("dbrelpro") or die("DB não encontrada");
$output = '';

if(isset($_POST['search'])) {
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

$query = mysql_query("SELECT * FROM tbl_ficheiros WHERE id_ficheiro LIKE '%$searchq%' OR ficheiro LIKE '%$searchq%'") or die("Erro na procura...");
$count = mysql_num_rows($query);
if($count == 0){
$output = 'Sem resultados na procura...';
}else{
while($row = mysql_fetch_array($query)) {
$idficheiro = $row['id_ficheiro'];
$nficheiro = $row['ficheiro'];
$id = $row['id_ficheiro'];

$output .= '<div>ID = '.$idficheiro.' // nome = '.$nficheiro.'</div>';
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>Lista de Relatórios</title>
<link rel="stylesheet" type="text/css" media="screen" href="style.css" />
<style type="text/css">
#container #intro #pageHeader h1 {
color: #CC0000;
font-size: 2em;
}
#container #intro #pageHeader h1 {
font-size: 4em;
color: #666666;
}
#body form p label {
color: #666666;
}
body table tr th {
color: #FFFFFF;
}
body table tr td {
color: #FFFFFF;
}
</style>
</head>
<body>
<br/><h1>Lista de Relatórios</h1><br/>
<form id="frm_lista" method="post">
<div align="center">
<table width="40%" border="1">
<tr>
<td width="15%">Ficheiro</td>
<td width="12%">Tipo</td>
<td width="19%">Tamanho(KB)</td>
<td width="20%">Ver</td>
<?php
$sql="SELECT * FROM tbl_ficheiros";
$result_set=mysql_query($sql);
while($row=mysql_fetch_array($result_set))
{
?>
</tr>

<tr>
<td><?php echo $row['ficheiro'] ?></td>
<td><?php echo $row['tipo'] ?></td>
<td><?php echo $row['tamanho'] ?></td>
<td><a href="uploads/<?php echo $row['ficheiro'] ?>" target="_blank">Ver Ficheiros</a></td>
</tr>
<?php
}
?>
</table>



</div>

<form action="search_teste.php" method="post">
<input type="text" name="search" placeholder="Nome do Relatório..." />
<input type="submit" class="btn" value=">>" />
</form>

<?php print("$output");?>

<p> </p>
<p><a href="novo_relatorio.php">
<input align="middle" name="btn_novo" type="submit" class="btn" id="button" value="Novo Relatório" />
</a></p>
<p><a href="relatorios.php"><input align="middle" name="btn_voltar" type="submit" class="btn" id="button" value="Voltar" /></a></p>
</body>
</html>

Editado: Se possivel queria ter um botão que limpa-se os dados da procura para que a tabela volte a ter todos os valores.

Desde já agradeço a ajuda e mais alguma informação necessária basta pedir ;)

Edited by DreamOn

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens dois pedidos à base de dados onde só deveria existir um

- ou faz a pesquisa normal

- ou faz a pesquisa filtrada


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
DreamOn

Podias dar umas luzes do que estás a tentar explicar? Eu vi um video do youtube para fazer este código de procura :/

Editado: Estás a dizer duas porque faço uma procura para dar valores á tabela (pesquisa normal) e a outra pelo nome ou ID (pesquisa filtrada) certo?

Edited by DreamOn

Share this post


Link to post
Share on other sites
HappyHippyHippo

sim ... existem duas chamadas à função mysql_query quando só deveria aparecer uma


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
DreamOn

Então para que funcione o quero fazer como recomendas que faça?

Editado: A procura filtrada estava apenas a testa-la para que no final fizesse essa procura filtrada mas na tabela. Dai estarem duas na mesma página.

Edited by DreamOn

Share this post


Link to post
Share on other sites
HappyHippyHippo

- se não existe dados de filtragem : executa um SQL normal

- se existe dados de filtragem : executa um SQL composto com os dados do filtro

Edited by HappyHippyHippo
  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
DreamOn

Faço um if certo?

Editado: Podias dar uma ajuda sff

Edited by DreamOn

Share this post


Link to post
Share on other sites
DreamOn

É possivel criar uma função para cada um dos tipos de procura e fazer o IF apartir dessas funções?

Por exemplo:

If (procura efectuada) function a() else function b();

Algo parecido a isto?

Share this post


Link to post
Share on other sites
DreamOn

Vou tentar fazer e se não conseguir já digo algo ;)

Uma questão. Dentro de cada função vou criar uma tabela diferente para cada pesquisa né? As duas criadas da mesma maneira mas apresentam resultados diferentes consuante a pesquisa feita?

Share this post


Link to post
Share on other sites
HappyHippyHippo

não ... o objectivo é separar somente o que é diferente que é a query À base de dados, tudo o resto (parece) ser tudo igual


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
DreamOn

Então na parte em que insere os dados que são mostrados na tabela é meto o IF a chamar uma das funções

Eu já criei a função para o filtro mas não sei como fazer a outra porque abre e fecha o php várias vezes e ao abrir a função no inicio e fechar no fim dá me erro :/

<?php
function filtro(){
$output = '';

if(isset($_POST['search'])) {
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

$query = mysql_query("SELECT * FROM tbl_ficheiros WHERE id_ficheiro LIKE '%$searchq%' OR ficheiro LIKE '%$searchq%'") or die("Erro na procura...");
$count = mysql_num_rows($query);
if($count == 0){
$output = 'Sem resultados na procura...';
}else{
while($row = mysql_fetch_array($query)) {
$idficheiro = $row['id_ficheiro'];
$nficheiro = $row['ficheiro'];
$id = $row['id_ficheiro'];

$output .= '<div>ID = '.$idficheiro.' // nome = '.$nficheiro.'</div>';
}
}
}
}
?>

Esta é a primeira função ou seja a filtrada

Edited by DreamOn

Share this post


Link to post
Share on other sites
Knot

Pegando em alguma parte do teu código:

<?php
if(isset($_POST['search'])) //se estou a procurar
{
  //Então a minha query de pesquisa tem filtros
  $query = mysql_query ("SELECT * FROM tbl_ficheiros WHERE id_ficheiro LIKE '%$searchq%' OR ficheiro LIKE '%$searchq%'");
}
else //se não estou a procurar
{
  //Entao a minha querya de pesquisa não tem filtros
  $query = mysql_query("SELECT * FROM tbl_ficheiros";
}
?>
<html>
<body>
<form id="frm_lista" method="post">
<div align="center">
<table width="40%" border="1">
<tr>
<td width="15%">Ficheiro</td>
<td width="12%">Tipo</td>
<td width="19%">Tamanho(KB)</td>
<td width="20%">Ver</td>
<?php
while($row=mysql_fetch_array($query)) //aqui vai ler a pesquisa "query" que não te interessa qual é, pois em cima o php já decide
{
?>
</tr>

<tr>
<td><?php echo $row['ficheiro'] ?></td>
<td><?php echo $row['tipo'] ?></td>
<td><?php echo $row['tamanho'] ?></td>
<td><a href="uploads/<?php echo $row['ficheiro'] ?>" target="_blank">Ver Ficheiros</a></td>
</tr>
<?php
}
?>
</table>



</div>
</form>
</body>
</html>

Share this post


Link to post
Share on other sites
DreamOn

<?php
include_once("dbconfig.php");
?>
<?php
if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

$query = mysql_query("SELECT * FROM tbl_ficheiros WHERE id_ficheiro LIKE '%$searchq%' OR ficheiro LIKE '%$searchq%'") or die("Erro na procura...");
$count = mysql_num_rows($query);
if($count == 0){
$output = 'Sem resultados na procura...';
}else{
while($row = mysql_fetch_array($query)) {
$idficheiro = $row['id_ficheiro'];
$nficheiro = $row['ficheiro'];
$id = $row['id_ficheiro'];

$output .= '<div>ID = '.$idficheiro.' // nome = '.$nficheiro.'</div>';
}
}

}else{  
$sql="SELECT * FROM tbl_ficheiros";
$result_set=mysql_query($sql);
while($row=mysql_fetch_array($result_set))
{
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>Lista de Relatórios</title>
<link rel="stylesheet" type="text/css" media="screen" href="style.css" />
<style type="text/css">
#container #intro #pageHeader h1 {
color: #CC0000;
font-size: 2em;
}
#container #intro #pageHeader h1 {
font-size: 4em;
color: #666666;
}
#body form p label {
color: #666666;
}
body table tr th {
color: #FFFFFF;
}
body table tr td {
color: #FFFFFF;
}
</style>
</head>
<body>
<form id="frm_lista" method="post">
<div align="center">
<table width="40%" border="1">
<tr>
<td width="15%">Ficheiro</td>
<td width="12%">Tipo</td>
<td width="19%">Tamanho(KB)</td>
<td width="20%">Ver</td>

<?php
while($row=mysql_fetch_array($query)) //aqui vai ler a pesquisa "query" que não te interessa qual é, pois em cima o php já decide
?>
</tr>

<tr>
<td><?php echo $row['ficheiro'] ?></td>
<td><?php echo $row['tipo'] ?></td>
<td><?php echo $row['tamanho'] ?></td>
<td><a href="uploads/<?php echo $row['ficheiro'] ?>" target="_blank">Ver Ficheiros</a></td>
</tr>
<?php
}
?>
</table>



</div>
</form>
</body>
</html>

Algo assim? Já agora se for isto dá me erro na linha 69. query undifined variable.

while($row=mysql_fetch_array($query))

Share this post


Link to post
Share on other sites
Knot

Vê bem o que eu fiz. Eu disse que se tivesse filtros a minha variável $query era .... , caso fosse sem filtros a minha variável $query seria ....

Ou seja, eu uso sempre a mesma variável, tu estás a usar 2 variáveis diferentes.

E eu estou a definir e a fazer as querys (duas) antes do html, mas depois faço um unico mysql_fetch_array dentro do html. Coloca identação no teu código para perceberes melhor

Share this post


Link to post
Share on other sites
DreamOn

Indo por partes que a inteligência aqui não é muita xD

A primeira parte (antes do html) será algo assim?:

<?php
include_once("dbconfig.php");
?>
<?php
if(isset($_POST['search'])) //se estou a procurar
{
//Então a minha query de pesquisa tem filtros
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

$query = mysql_query("SELECT * FROM tbl_ficheiros WHERE id_ficheiro LIKE '%$searchq%' OR ficheiro LIKE '%$searchq%'") or die("Erro na procura...");
$count = mysql_num_rows($query);
if($count == 0){
$output = 'Sem resultados na procura...';
}else{
while($row = mysql_fetch_array($query))
{
$idficheiro = $row['id_ficheiro'];
$nficheiro = $row['ficheiro'];
$id = $row['id_ficheiro'];

$output .= '<div>ID = '.$idficheiro.' // nome = '.$nficheiro.'</div>';
}
}

}
else //se não estou a procurar
{
//Entao a minha query de pesquisa não tem filtros
$query = mysql_query("SELECT * FROM tbl_ficheiros");
}
?>

Desculpa qualquer erro ou falta de compreensão da minha parte mas sou novo nisto...

Edited by DreamOn

Share this post


Link to post
Share on other sites
Knot

É mais fácil definires as querys fora do html e fazeres o while($row = mysql_fetch_array($query)) dentro do html, isto refiro-me à forma visual, pq o PHP é sempre executado primeiro que o HTML.

<?php
include_once("dbconfig.php");

if(isset($_POST['search'])) //se estou a procurar
{
  //Então a minha query de pesquisa tem filtros
  $searchq = $_POST['search'];
  $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
  $query = mysql_query("SELECT * FROM tbl_ficheiros WHERE id_ficheiro LIKE '%$searchq%' OR ficheiro LIKE '%$searchq%'") or die("Erro na procura...");
}
else //se não estou a procurar
{
  //Entao a minha query de pesquisa não tem filtros
  $query = mysql_query("SELECT * FROM tbl_ficheiros");
}
?>

O while($row = mysql_fetch_array($query)) fazes depois dentro do html para construir a tua tabela.

<html>
<body>
 <form id="frm_lista" method="post">
<div align="center">
<?php
if(mysql_num_rows($query) < 1)
  echo "Não encontrou dados!"
else
{
?>
<table width="40%" border="1">
  <tr>
	<td width="15%">Ficheiro</td>
	<td width="12%">Tipo</td>
	<td width="19%">Tamanho(KB)</td>
	<td width="20%">Ver</td>
  </tr>
  <?php
  while($row=mysql_fetch_array($query)) //aqui vai ler a pesquisa "query" que não te interessa qual é, pois em cima o php já decide
  {
  ?>
  <tr>
	<td><?php echo $row['ficheiro'] ?></td>
	<td><?php echo $row['tipo'] ?></td>
	<td><?php echo $row['tamanho'] ?></td>
	<td><a href="uploads/<?php echo $row['ficheiro'] ?>" target="_blank">Ver Ficheiros</a></td>
  </tr>
<?php
}
?>
   </table>
  <?php
  }
  ?>
</div>
</form>
</body>
</html>

Não te prometo que todo o código esteja certo, é para teres uma ideia de como funciona.

Edited by Knot
  • Vote 1

Share this post


Link to post
Share on other sites
DreamOn

Fiz um php para testar o Código e está tudo em ordem. Só uma questão... Após ser feita uma pesquisa ele limita a tabela como tinha pedido. Agora eu precisava de algo que limpa-se a pesquisa para a tabela voltar a ter todos os campos. Um botão ou algo do género

Share this post


Link to post
Share on other sites
Knot

Metes um botão ou hiperligação a enviar novamente para a tua página:

<a href='minha_pagina.php'>Reset</a>

Se mais tarde quiseres podes ver o datatables que é muito interessante para fazer o que pretendes, mostra-te todos os registos e depois permite filtrar através de um campo de pesquisa.

Tem um exemplo logo na página - http://datatables.net/

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.