Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi pessoas, espero que possam me orientar,vou descrever o que ocorre.
tenho um BD, com uma tabela cadastro, esta tudo funcionando beleza, mas na hora de realizar a busca, quero que faça uma busca interna no site, nessa tabela cadastro, em quase todos os seus campos, e que não haja necessidade de digitar a palavra toda, ex, se digito paulo, retorna todos os Resultados como Paulo, São Paulo, Paulo Coelho, assim sendo, (uso o DreamWeaver CS3), fiz um recordset avançado que o conteudo sql ficou assim:
SELECT *
FROM t_cadastro
WHERE t_cadastro.categoria LIKE %busca% OR
t_cadastro.n_fantasia LIKE %busca% OR
t_cadastro.sobrenome LIKE %busca% OR
t_cadastro.nome LIKE %busca% OR
t_cadastro.telefone LIKE %busca% OR
t_cadastro.rua LIKE %busca% OR
t_cadastro.site LIKE %busca% OR
t_cadastro.produtos LIKE %busca% OR
t_cadastro.ofertas LIKE %busca%
a busca funciona como o desejado, porem o que ta me errado é que se eu não digitar nada no campo de busca, colocar o cursor lá e der um enter, ou clicar no botão buscar retorna todos os resultados cadastrados no BD, minha intenção e:
1 - Se não digitar nada no campo de busca e der o enter ou clicar no botão buscar, que não aconteça nada. (que pare de vir todos os registros do BD
porem deu esse erro ai, e não consigo consertar para dar continuidade ao projeto. Ja Tirei %, passei varias noites pesquisando na net, mas não consegui. Minha prioridade é tirar esse erro, com certeza pelo que ja pesquisei nesse forum, encontrarei minhas respostas aqui. No aguardo
A pesquisa esta retornando os resultados como desejado,ex, se eu digitar paulo, retorna os resultados cadastrados Paulo, são paulo, paulo Coelho, etc, a busca esta funcionando corretamente, mas o que ta dando pau é se eu não digitar nada no campo de busca e der enter ou clicar no botão busca, retorna todos os resultados cadastrados.
Mas como eu faria um simples if/else? sei que é simples, só que eu não sei onde colocar. Sei que a logica é
if Se houver "Paulo" digitado no campo 'busca'retorte os resultados contendo Paulo,
else Senão, retorne a pagina nenhum resultado foi encontrado.
mas eu não sei criar esse if e else rs please
talves assim funcione.
Quando o usuario clicar no OK você envia isso para fazer a busca, correto ? Então antes do select você coloca o função indicada pelo Willian, dessa forma
if( !empty( $_POST['campo_busca'] ) )
{
$sql("select ......")
}else{
echo "É necessário digitar algo para continuar a busca."
// retorna para a busca.
}Na verdade não consegui inserir esse codigo na minha pagina. Se coloco, da erro.
Vou postar a pagina toda, e o codigo fonte foi gerado pelo DreamWeaver CS3, menos as instruções do Like e o tal % que digitei no proprio recordset do DreamWeaver e ficou isso ai. O resto esta tudo funcionando, os resultados retornando normalmente, o problema ta que se nao digito nada na busca retorna todos os resultados cadastrado no BD. O form da busca esta definido da seguinte maneira na pagina index.php
<form name="form1" method="get" action="busca2.php">
<div align="center">
<input name="busca" type="text" id="busca" size="40">
<input type="submit" name="Submit" value="Buscar">
</div>
</form>
e segue a pagina busca2.php
<?php require_once('Connections/online.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;
}
}
$currentPage = $_SERVER["PHP_SELF"];
$maxRows_rsBusca_Resultado = 25;
$pageNum_rsBusca_Resultado = 0;
if (isset($_GET['pageNum_rsBusca_Resultado'])) {
$pageNum_rsBusca_Resultado = $_GET['pageNum_rsBusca_Resultado'];
}
$startRow_rsBusca_Resultado = $pageNum_rsBusca_Resultado * $maxRows_rsBusca_Resultado; ;
$maxRows_rsBusca_Resultado = 25;
$pageNum_rsBusca_Resultado = 0;
if (isset($_GET['pageNum_rsBusca_Resultado'])) {
$pageNum_rsBusca_Resultado = $_GET['pageNum_rsBusca_Resultado'];
}
$startRow_rsBusca_Resultado = $pageNum_rsBusca_Resultado * $maxRows_rsBusca_Resultado;
//$startRow inicia a paginação com os resultados encontrados definidos pelo numero maximo de registro por paginas
$busca_rsBusca_Resultado = "1";
if (isset($_GET['busca'])) {
$busca_rsBusca_Resultado = $_GET['busca'];
}
mysql_select_db($database_online, $online);
$query_rsBusca_Resultado = sprintf("SELECT * FROM t_cadastro WHERE t_cadastro.categoria LIKE %s OR t_cadastro.n_fantasia LIKE %s OR t_cadastro.sobrenome LIKE %s OR t_cadastro.nome LIKE %s OR t_cadastro.telefone LIKE %s OR t_cadastro.rua LIKE %s OR t_cadastro.site LIKE %s OR t_cadastro.produtos LIKE %s OR t_cadastro.ofertas LIKE %s ", GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"));
$rsBusca_Resultado = mysql_query($query_rsBusca_Resultado, $online) or die(mysql_error());
$row_rsBusca_Resultado = mysql_fetch_assoc($rsBusca_Resultado);
$totalRows_rsBusca_Resultado = mysql_num_rows($rsBusca_Resultado);
$queryString_rsBusca_Resultado = "";
if (!empty($_SERVER['QUERY_STRING'])) {
$params = explode("&", $_SERVER['QUERY_STRING']);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, "pageNum_rsBusca_Resultado") == false &&
stristr($param, "totalRows_rsBusca_Resultado") == false) {
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString_rsBusca_Resultado = "&" . htmlentities(implode("&", $newParams));
}
}
$queryString_rsBusca_Resultado = sprintf("&totalRows_rsBusca_Resultado=%d%s", $totalRows_rsBusca_Resultado, $queryString_rsBusca_Resultado);
?><head>
<title>xxxxxxxxxx</title> ai segue as htmlWilliam, seria +- isso:
Pelo que entendi, você está fazendo o select antes de colocar a condição.
>
$query_rsBusca_Resultado = sprintf("SELECT * FROM t_cadastro WHERE t_cadastro.categoria LIKE %s OR t_cadastro.n_fantasia LIKE %s OR t_cadastro.sobrenome LIKE %s OR t_cadastro.nome LIKE %s OR t_cadastro.telefone LIKE %s OR t_cadastro.rua LIKE %s OR t_cadastro.site LIKE %s OR t_cadastro.produtos LIKE %s OR t_cadastro.ofertas LIKE %s ", GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"),GetSQLValueString("%" . $busca_rsBusca_Resultado . "%", "text"));
if (!empty($_SERVER['QUERY_STRING'])) {
$params = explode("&", $_SERVER['QUERY_STRING']);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, "pageNum_rsBusca_Resultado") == false &&
stristr($param, "totalRows_rsBusca_Resultado") == false) {
array_push($newParams, $param);
Tenta colocar o select dentro da condição, +- assim:
if (isset($_GET['busca'])) {
$busca_rsBusca_Resultado = $_GET['busca'];
}
if (!empty($busca_rsBusca_Resultado)){
select ......
}você entende de JavaScript? Pq eu recomendaria o uso de JavaScript no evento onSubmit do seu <form>
Ficaria algo assim
Isso no cabeçalho, dentro de <head>
function validaForm(){
if (document.form1.busca.value == ""){
alert("Digite algo");
return false;
}
else{
return true;
}
}
Daí você alteraria o seu HTML assim:
<form name="form1" method="get" action="busca2.php" onSubmit="return validaForm()">
<div align="center">
<input name="busca" type="text" id="busca" size="40">
<input type="submit" name="Submit" value="Buscar">
</div>
Claro que isso pode dar problema se o usuário tiver o javascript desativado no navegador, mas você ganha em performance, pois não vai utilizar o servidor de forma desnecessária
;)
Em todo caso, é melhor tratar dos dois modos
Denis_Uyeda fiz o java script como você recomendou e deu certo, apenas retirei a mensagem de alerta, muito obrigada, mas ainda vou tentar fazer isso no php pois acho mais seguro, mas pelo menos vai dar para continuar o trabalho que ficou parado uns 3 dias rs.. valeu
Marcos Barbosa coloquei o if da forma que você passou, porem continuou voltando todos os resultados, como antes, talves eu não saiba colocar no lugar certo. Acho que o problema esta em meu codigo que esta aceitando o "nada" como busca, ai ele vai no BD e retorna tudo o q encontra, ja que em todos os campos tem espaço vazio (posso estar falando bobeira, pois de programação só entendo da logica, e faço quase tudo com o DreamWeaver), mas vou continuar tentando fazer em php pois é mais seguro. valeu, brigada
>
porem deu esse erro ai, [..]. Minha prioridade é tirar esse erro,
Que erro ?
para que não pesquise caso o campo estiver em branco, faça um simples if/else
if( !empty( $_POST['campo_busca'] ) )
{
//ai sim faz a busca
}