Ir para conteúdo

Arquivado

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

Juninho Vox

[Resolvido] Filtro de busca com PHP e MYSQL

Recommended Posts

E ai galera, td blzera?

Pessoal estou tentando fazer um filtro aqui e de certo modo ele funcionou, porém o video com esse tutorial deixou uma coisa a desejar e é exatamente o que ficou a desejar, que eu preciso nesse momento!

Eu consigo fazer o filtro, porém quando eu abro a página com o filtro ela vem sem nenhum resultado de inicio, para eu poder visualizar os resultado na tabela dinamica eu preciso clicar no botão OK do filtro!

Abaixo a link de teste que eu fiz desse filtro:

Modelo do Filtro

 

Abaixo o código no recordset:

SELECT *
FROM CAD_USUARIO
WHERE NOME LIKE %colname% AND EMAIL LIKE %colemail% 

As variaveis usadas são:

colname e colemail.

Abaixo o video tutorial:

Pessoal espero que vcs possam me ajudar com isso.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara você pode fazer a seguinte forma.. se você quer trazer tudo na tela, você faz ele verificar se esta vindo alguma cosia pra busca..

 

Tipo esse exemplo

 

<?php
 // Aqui ele vai verificar se esta vindo a variavel BUSCA via GET
 if (isset($_GET["busca"])) {
   $sql = "SELECT * FROM tabela WHERE campo LIKE '%".$_GET["busca"]."%'";
 } else {
   $sql = "SELECT * FROM tabela"
 }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara você pode fazer a seguinte forma.. se você quer trazer tudo na tela, você faz ele verificar se esta vindo alguma cosia pra busca..

 

Tipo esse exemplo

 

<?php
 // Aqui ele vai verificar se esta vindo a variavel BUSCA via GET
 if (isset($_GET["busca"])) {
   $sql = "SELECT * FROM tabela WHERE campo LIKE '%".$_GET["busca"]."%'";
 } else {
   $sql = "SELECT * FROM tabela"
 }
?>

Fera, entendi muito bem a lógica sua, realmente usando o if ele poderia trazer o que eu quero, mas não sei como implementar isso no meu fonte!

Estou postando o código da minha página exemplo, peço por favor uma ajuda sua, se possível se você puder dar uma olhadinha rapida e ver se você conseguiria me dar uma luz dentro do meu fonte.

Abaixo o fonte:

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 if (PHP_VERSION < 6) {
   $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
 }

 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

 switch ($theType) {
   case "text":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;    
   case "long":
   case "int":
     $theValue = ($theValue != "") ? intval($theValue) : "NULL";
     break;
   case "double":
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
     break;
   case "date":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;
   case "defined":
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
     break;
 }
 return $theValue;
}
}

$colname_rsFiltro = "-1";
if (isset($_POST['NOME'])) {
 $colname_rsFiltro = $_POST['NOME'];
}
mysql_select_db($database_connSGS, $connSGS);
$query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO WHERE NOME LIKE %s ORDER BY USUARIO_ID DESC", GetSQLValueString("%" . $colname_rsFiltro . "%", "text"));
$rsFiltro = mysql_query($query_rsFiltro, $connSGS) or die(mysql_error());
$row_rsFiltro = mysql_fetch_assoc($rsFiltro);
$totalRows_rsFiltro = mysql_num_rows($rsFiltro);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>

<body>
<table width="100%">
 <tr>
   <td><form id="form1" name="form1" method="post" action="">
Nome:
     <label>
       <input name="NOME" type="text" id="NOME" size="30" />
     </label>
     <label>
       <input type="submit" name="ok" id="ok" value="OK" />
     </label>
   </form></td>
 </tr>
 <tr>
   <td> </td>
 </tr>
 <tr>
   <td> 
     <table border="1">
       <tr>
         <td bgcolor="#999999">USUARIO_ID</td>
         <td bgcolor="#999999">NOME</td>
         <td bgcolor="#999999">EMAIL</td>
         <td bgcolor="#999999">USUARIO</td>
         <td bgcolor="#999999">SENHA</td>
         <td bgcolor="#999999">NIVEL</td>
         <td bgcolor="#999999">DATA_CADASTRO</td>
         <td bgcolor="#999999">STATUS</td>
       </tr>
       <?php do { ?>
         <tr>
           <td><?php echo $row_rsFiltro['USUARIO_ID']; ?></td>
           <td><?php echo $row_rsFiltro['NOME']; ?></td>
           <td><?php echo $row_rsFiltro['EMAIL']; ?></td>
           <td><?php echo $row_rsFiltro['USUARIO']; ?></td>
           <td><?php echo $row_rsFiltro['SENHA']; ?></td>
           <td><?php echo $row_rsFiltro['NIVEL']; ?></td>
           <td><?php echo $row_rsFiltro['DATA_CADASTRO']; ?></td>
           <td><?php echo $row_rsFiltro['STATUS']; ?></td>
         </tr>
         <?php } while ($row_rsFiltro = mysql_fetch_assoc($rsFiltro)); ?>
   </table></td>
 </tr>
</table>
<p>No caso acima eu estou filtando pelo campo NOME, buscando qualquer conteudo com a letra ou palavra digitada!</p>
<p>O que eu preciso é apenas que ao abrir essa tela os dados do Banco MYSQL esteja todos na tela...e não como está agora; tendo que clicar no botão OK para mostrar na tela os dados.</p>
<p> </p>
<p> </p>
<p>Valew<br />
</p>
</body>
</html>
<?php
mysql_free_result($rsFiltro);
?>

Obrigado Fera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muda essa parte aqui...

 

if (isset($_POST['NOME'])) {
 $colname_rsFiltro = $_POST['NOME'];
}
mysql_select_db($database_connSGS, $connSGS);
$query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO WHERE NOME LIKE %s ORDER BY USUARIO_ID DESC", GetSQLValueString("%" . $colname_rsFiltro . "%", "text"));

 

 

Para isso aqui

if (isset($_POST['NOME'])) {
 $colname_rsFiltro = $_POST['NOME'];
 $query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO WHERE NOME LIKE %s ORDER BY USUARIO_ID DESC", GetSQLValueString("%" . $colname_rsFiltro . "%", "text"));
} else {
 $query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO ORDER BY USUARIO_ID DESC");
}
mysql_select_db($database_connSGS, $connSGS);

 

 

 

Agora só uma dica.. eu não curto muito fazer DO WHILE em grid... que dessa forma ele sempre vai lhe fazer a primeira volta do WHILE sem registro nenhum... praticamente você vai ficar com a primeira linha sem registro... usa WHILE normal...

 

 

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

...

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim mano...

 

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 if (PHP_VERSION < 6) {
   $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
 }

 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

 switch ($theType) {
   case "text":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;    
   case "long":
   case "int":
     $theValue = ($theValue != "") ? intval($theValue) : "NULL";
     break;
   case "double":
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
     break;
   case "date":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;
   case "defined":
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
     break;
 }
 return $theValue;
}
}
if($_POST['NOME']){
$where[1] = "like '".$_POST['NOME']."'";
}
if($_POST['email']){
$where[2] = " and email like '".$_POST['email']."'";
}


mysql_select_db($database_connSGS, $connSGS);

$rsFiltro = mysql_query("SELECT * FROM CAD_USUARIO WHERE ".$where[1].$where[2]." ORDER BY USUARIO_ID DESC") or die(mysql_error());
$row_rsFiltro = mysql_fetch_assoc($rsFiltro);
$totalRows_rsFiltro = mysql_num_rows($rsFiltro);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>

<body>
<table width="100%">
 <tr>
   <td><form id="form1" name="form1" method="post" action="">
Pesquisar por Nome:
     <label>
       <input name="NOME" type="text" id="NOME" size="30" /> e <input type="text" name="email"  value="e-mail" onclick="if(this.value=='e-mail')this.value='';" onblur="if(this.value=='')this.value='e-mail';" />
     </label>
     <label>
       <input type="submit" name="ok" id="ok" value="OK" />
     </label>
   </form></td>
 </tr>
 <tr>
   <td> </td>
 </tr>
 <tr>
   <td> 
     <table border="1">
       <tr>
         <td bgcolor="#999999">USUARIO_ID</td>
         <td bgcolor="#999999">NOME</td>
         <td bgcolor="#999999">EMAIL</td>
         <td bgcolor="#999999">USUARIO</td>
         <td bgcolor="#999999">SENHA</td>
         <td bgcolor="#999999">NIVEL</td>
         <td bgcolor="#999999">DATA_CADASTRO</td>
         <td bgcolor="#999999">STATUS</td>
       </tr>
       <?php do { ?>
         <tr>
           <td><?php echo $row_rsFiltro['USUARIO_ID']; ?></td>
           <td><?php echo $row_rsFiltro['NOME']; ?></td>
           <td><?php echo $row_rsFiltro['EMAIL']; ?></td>
           <td><?php echo $row_rsFiltro['USUARIO']; ?></td>
           <td><?php echo $row_rsFiltro['SENHA']; ?></td>
           <td><?php echo $row_rsFiltro['NIVEL']; ?></td>
           <td><?php echo $row_rsFiltro['DATA_CADASTRO']; ?></td>
           <td><?php echo $row_rsFiltro['STATUS']; ?></td>
         </tr>
         <?php } while ($row_rsFiltro = mysql_fetch_assoc($rsFiltro)); ?>
   </table></td>
 </tr>
</table>
<p>No caso acima eu estou filtando pelo campo NOME, buscando qualquer conteudo com a letra ou palavra digitada!</p>
<p>O que eu preciso é apenas que ao abrir essa tela os dados do Banco MYSQL esteja todos na tela...e não como está agora; tendo que clicar no botão OK para mostrar na tela os dados.</p>
<p> </p>
<p> </p>
<p>Valew<br />
</p>
</body>
</html>
<?php
mysql_free_result($rsFiltro);
?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muda essa parte aqui...

 

if (isset($_POST['NOME'])) {
 $colname_rsFiltro = $_POST['NOME'];
}
mysql_select_db($database_connSGS, $connSGS);
$query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO WHERE NOME LIKE %s ORDER BY USUARIO_ID DESC", GetSQLValueString("%" . $colname_rsFiltro . "%", "text"));

 

 

Para isso aqui

if (isset($_POST['NOME'])) {
 $colname_rsFiltro = $_POST['NOME'];
 $query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO WHERE NOME LIKE %s ORDER BY USUARIO_ID DESC", GetSQLValueString("%" . $colname_rsFiltro . "%", "text"));
} else {
 $query_rsFiltro = sprintf("SELECT * FROM CAD_USUARIO ORDER BY USUARIO_ID DESC");
}
mysql_select_db($database_connSGS, $connSGS);

 

 

 

Agora só uma dica.. eu não curto muito fazer DO WHILE em grid... que dessa forma ele sempre vai lhe fazer a primeira volta do WHILE sem registro nenhum... praticamente você vai ficar com a primeira linha sem registro... usa WHILE normal...

 

 

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

...

}

Fera, funcionou perfeitamente como eu precisava, só não entendi muito bem o caso do "WHILE".

Se eu trocar a minha linha pela sua linha de código daria algum erro?

 

Valew...

Obrigado

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.