O8oO 0 Denunciar post Postado Fevereiro 1, 2011 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
gremio10 14 Denunciar post Postado Fevereiro 1, 2011 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
O8oO 0 Denunciar post Postado Fevereiro 1, 2011 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
Mário Monteiro 179 Denunciar post Postado Fevereiro 1, 2011 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
O8oO 0 Denunciar post Postado Fevereiro 1, 2011 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
Mário Monteiro 179 Denunciar post Postado Fevereiro 1, 2011 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
O8oO 0 Denunciar post Postado Fevereiro 1, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 1, 2011 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
O8oO 0 Denunciar post Postado Fevereiro 1, 2011 Então no sql eu deveria colocar SELECT * FROM busca WHERE `nome` = 'Bruno' AND `cidade` = 'Sampa' ? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 1, 2011 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
O8oO 0 Denunciar post Postado Fevereiro 1, 2011 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
O8oO 0 Denunciar post Postado Fevereiro 2, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 2, 2011 use AND no lugar do OR então. e estude SQL. Compartilhar este post Link para o post Compartilhar em outros sites