Ir para conteúdo

POWERED BY:

Arquivado

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

O8oO

[Resolvido] Busca com múltiplos campos.

Recommended Posts

Preciso de uma ajuda aqui com a busca com múltiplos campos.

Aqui está o meu código que fiz para testar

 

 

<?php require_once('Connections/connection.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 $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_rs = "-1";
if (isset($_GET['nome'])) {
 $colname_rs = $_GET['nome'];
}
$cidade_rs = "-1";
if (isset($_GET['cidade'])) {
 $cidade_rs = $_GET['cidade'];
}
mysql_select_db($database_connection, $connection);
$query_rs = sprintf("SELECT * FROM busca WHERE nome = %s AND %s = %s ORDER BY id DESC", GetSQLValueString($colname_rs, "text"),GetSQLValueString($cidade_rs, "text"),GetSQLValueString($cidade_rs, "text"));
$rs = mysql_query($query_rs, $connection) or die(mysql_error());
$row_rs = mysql_fetch_assoc($rs);
$totalRows_rs = mysql_num_rows($rs);
?><!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%" height="98" border="0" cellpadding="0" cellspacing="0">
 <tr>
   <td height="24"><form id="form1" name="form1" method="get" action="resultadoos.php">
     <table width="100%" border="0" cellspacing="0" cellpadding="0">
       <tr>
         <td width="18%"><div align="right">BUSCAR</div></td>
         <td width="82%"> 
           <label for="nome"></label>
           <input type="text" name="nome" id="nome" />  
           <label for="cidade"></label>
           <input type="text" name="cidade" id="cidade" />
            
           <label for=""></label>
           <input type="submit" value="Procurar" /></td>
       </tr>
     </table>
   </form>    </td>
 </tr>
 <tr>
   <td><hr /></td>
 </tr>
 <tr>
   <td valign="top"><?php do { ?>
       <table width="100%" border="0" cellspacing="0" cellpadding="0">
         <tr>
           <td><?php echo $row_rs['nome']; ?></td>
         </tr>
         <tr>
           <td><?php echo $row_rs['cidade']; ?></td>
         </tr>
         <tr>
           <td> </td>
         </tr>
               </table>
       <?php } while ($row_rs = mysql_fetch_assoc($rs)); ?><br /></td>
 </tr>
 <tr>
   <td valign="top"> </td>
 </tr>
</table>
</body>
</html>
<?php
mysql_free_result($rs);
?>

 

E quando eu clico em pesquisar, eu coloco bruno no campo nome e osasco no campo cidade, aí acha mais quando eu coloco qualquer coisa no form cidade (ex: SSSSSSSSSSSSSSSSSSS), ele acha, e quando inverto, não acha,

Traduzindo, pra funcionar tem que colocar algo nos dois campos, mas, o form cidade não funciona.

Se tiverem alguma solução ou algum tutorial pra refazer eu agradeceria :)

 

Aqui está o código separado do record set

SELECT *
FROM busca
WHERE nome = colname AND cidade = cidade
ORDER BY id DESC

 

 

ABRAÇOS

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT *
FROM busca
WHERE nome = colname AND cidade = cidade
ORDER BY id DESC

 

quando tu mexe com texto, não se usa - e sim LIKE

 

 

SELECT *
FROM busca
WHERE nome LIKE colname AND cidade LIKE cidade
ORDER BY id DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT *
FROM busca
WHERE nome = colname AND cidade = cidade
ORDER BY id DESC

 

quando tu mexe com texto, não se usa - e sim LIKE

 

 

SELECT *
FROM busca
WHERE nome LIKE colname AND cidade LIKE cidade
ORDER BY id DESC

 

 

Hmm... Não mudou ficou do mesmo jeito... D:

Compartilhar este post


Link para o post
Compartilhar em outros sites

para usar o LIKE retornando partes de nomes precisa abraçar o termo pesquisado com %

Compartilhar este post


Link para o post
Compartilhar em outros sites

para usar o LIKE retornando partes de nomes precisa abraçar o termo pesquisado com %

 

Tipo assim?

SELECT * FROM busca WHERE nome LIKE ".$nome" AND cidade LIKE ".$cidade" ORDER BY id DESC

 

ou

SELECT * FROM busca WHERE nome LIKE "nome" AND cidade LIKE "cidade" ORDER BY id DESC

??

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT * FROM busca WHERE nome LIKE '%nomepesquisado%' AND cidade LIKE '%cidadepesquisada%' ORDER BY id DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom ficou assim

SELECT *
FROM busca
WHERE nome LIKE %colname% AND cidade LIKE %cidade%
ORDER BY id DESC

 

Mas, o "erro" permanece D: tem algum tutorial para que eu possa refazer..?..

 

Bom... Os formulários são: 1º nome e 2º cidade, 3º botão sem nome...

formulario:

Nome: form1

Método: GET

Ação: resultadoos.php (MESMA PÁGINA)

 

Será que é erro no formulário?

 

Eu fiz um sistema de busca comum, aí alterei para que fique múltiplo campo.

 

É no formulário???

 

??????? D:

Compartilhar este post


Link para o post
Compartilhar em outros sites

que sofrimento...

 

@gremio10, pare de 'chutar', pois está complicando os usuários.

<?php
if( isset( $_GET['procurar'] ) )
{
	$sql = "SELECT * FROM busca";

	$where = Array();
	if( !empty( $_GET['nome'] ) ) $where[] = " `nome` = '{$_GET['nome']}' ";
	if( !empty( $_GET['cidade'] ) ) $where[] = " `cidade` = '{$_GET['cidade']}' ";
	if( !empty( $_GET['estado'] ) ) $where[] = " `estado` = '{$_GET['estado']}' ";

	if( count( $where ) )
	{
		$sql .= ' WHERE ';
		$sql .= implode( ' OR ', $where );
	}
	echo $sql;
}
?>
<html>
<head>


</head>
<body>
<form method="get" action="">
	<label>Nome: <input type="text" name="nome" /></label>
	<label>Cidade: <input type="text" name="cidade" /></label>
	<label>Estado: <input type="text" name="estado" /></label>

	<label><input type="submit" name="procurar" value="Procurar" /></label>
</form>
</body>
</html>

 

colocando apenas Nome: Bruno

SELECT * FROM busca WHERE `nome` = 'Bruno' 

colocando

Nome: Bruno, Cidade: Sampa:

SELECT * FROM busca WHERE `nome` = 'Bruno' OR `cidade` = 'Sampa' 

Ou sei lá, Cidade: Sampa, Estado: SP:

SELECT * FROM busca WHERE `cidade` = 'Sampa' OR `estado` = 'SP' 

 

entendeu ? :lol:

 

ai ajusta entre OR e AND dependendo da lógica e do cruzamento de informações que você precisar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não!!

 

roda o script que postei, e entenda oque eu fiz.

o SQL será formado dinâmicamente!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oks vou tentar, e mals ae sou novo na área, não estudei php ainda D:

 

LoL,

Valew ae! funcionou, o código ficou assim:

<?php require_once('Connections/connection.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 $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_rs = "-1";
if (isset($_GET['nome'])) {
 $colname_rs = $_GET['nome'];
}
mysql_select_db($database_connection, $connection);
$query_rs = sprintf("SELECT * FROM busca WHERE nome = '{$_GET['nome']}' OR cidade = '{$_GET['cidade']}' ORDER BY id DESC", GetSQLValueString($colname_rs, "text"));
$rs = mysql_query($query_rs, $connection) or die(mysql_error());
$row_rs = mysql_fetch_assoc($rs);
$totalRows_rs = mysql_num_rows($rs);

       if( isset( $_GET['procurar'] ) )
       {
               $sql = "SELECT * FROM busca";

               $where = Array();
               if( !empty( $_GET['nome'] ) ) $where[] = " `nome` = '{$_GET['nome']}' ";
               if( !empty( $_GET['cidade'] ) ) $where[] = " `cidade` = '{$_GET['cidade']}' ";

               if( count( $where ) )
               {
                       $sql .= ' WHERE ';
                       $sql .= implode( ' OR ', $where );
               }
               echo $sql;
       }
?>
<html>
<head>


</head>
<body>
       <form method="get" action="">
               <label>Nome: <input type="text" name="nome" /></label>
               <label>Cidade: <input type="text" name="cidade" /></label>

               <label><input type="submit" name="procurar" value="Procurar" /></label>
</form>
       <?php do { ?>
         <br>
         <?php echo $row_rs['nome']; ?><br>
         <?php echo $row_rs['cidade']; ?>
         <?php } while ($row_rs = mysql_fetch_assoc($rs)); ?>
</body>
</html>
<?php
mysql_free_result($rs);
?>

 

VLw msm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh outra ajuda...

Quando ele pesquisa, vai tudo certo, mais tipo quero que ele pegue os 3 campos, ex: profissao, cidade, estado

Mais ele pega tipo cidade ponho OSASCO, ai ele pega todos os que tem osasco, eu coloco estado ele pega todos os que tem SP...

 

como corrijo isto?

 

Aqui um "teste" online...

http://www.power-seg.net/iaibrother/

É SÓ PESQUISAR : osasco em cidade pra fazer teste

Compartilhar este post


Link para o post
Compartilhar em outros sites

use AND no lugar do OR então.

 

e estude SQL.

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.