Busca

Boa tarde pessoal, preciso de ajuda.
Estou fazendo um campo de busca com ajax que achei na net.
preciso de uma query que procure na minha tabela produtos, por nome, código, referencia, marca ou categoria,
esta que eu tenho funciona mas só me traz só o nome do produto (“SELECT * FROM produtos WHERE nome LIKE '%”.$valor."%’")

Obrigado

Boa tarde!

Você tem que mudar o tipo da pesquisa para cada tipo de consulta que deseja fazer!

(SELECT * FROM produtos WHERE codigo = ".$valor.")   

`(SELECT * FROM produtos WHERE nomeProduto LIKE '%".$valor."%'")`

(SELECT * FROM produtos WHERE nomeMarca LIKE '%".$valor."%'")

(SELECT * FROM produtos WHERE nomeCategoria LIKE '%".$valor."%'")

Muito obrigado Jonathan

Tentei assim mas está retornando o seguinte erro:

Parse error: syntax error, unexpected ‘SELECT’ (T_STRING) in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\cadastro\busca.php on line 10

  1. $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE codigo = “.$valor.”);
  2. $sql = mysqli_query($conexao, “SELECT * FROM produtos WHERE nome = “.$valor.”%”");
  3. $sql = mysqli_query($conexao, “SELECT * FROM produtos WHERE nomeMarca = “.$valor.”%”");
  4. $sql = mysqli_query($conexao, “SELECT * FROM produtos WHERE nomeCategoria = “.$valor.”%”");

Este é um erro de sintaxe, ou seja os comandos de consulta estão escritos de forma incorreta!

Campos do tipo NUMÉRICO a consulta é realizada através do " = " e campos do tipo TEXTO é utilizado o " like ".

9) $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE codigo = ".$valor.");
10) $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE nome LIKE '%".$valor."%'");
11) $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE nomeMarca LIKE '%".$valor."%'");
12) $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE nomeCategoria LIKE '%".$valor."%'");

Fiz as alterações Jonathan e o erro apresentado é este

Parse error: syntax error, unexpected ‘SELECT’ (T_STRING) in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\cadastro\busca.php on line 10

Segue abaixo meu banco.php

<?php require_once 'conecta.php' ?> <?php // Recebe o valor enviado $valor = $_GET['valor']; // Procura titulos no banco relacionados ao valor $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE codigo = ".$valor."); $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE nome LIKE '%".$valor."%'"); $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE nomeMarca LIKE '%".$valor."%'"); $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE nomeCategoria LIKE '%".$valor."%'"); // Exibe todos os valores encontrados while ($noticias = mysqli_fetch_object($sql)) { echo "id."')\">" . $noticias->nome . "
"; } // Acentuação header("Content-Type: text/html; charset=ISO-8859-1",true);

Bom, vamos tentar encontrar uma solução elegante para seu problema, além do mais seu código está muito sujeito a ataques por SQL injection e também de travamento futuro devido o uso da extensão mysql_ que foi removida da nova versão 7 do php e diante essas situações sugiro usar PDO

Sua busca precisa trazer os resultados por qualquer um desses campos em um único select ou um select para cada um deles?

obrigado Lost Soldier.

Tenho um campo de busca onde o usuário deverá digitar uma das informações das colunas (codigo, nome, marca ou categoria). As colunas marca e categoria são foreign keys.

O retorno da query será mostrado em uma pagina de lista produtos simples que está no BD

Abraços!!

Sergio

Bom, ficou um pouco confuso, mas pelo que entendi creio que uma das duas formas funcionará:

Exemplos usando PDO ok?

Primeira, um único valor usando or…

$sql = 'SELECT * FROM produtos WHERE codigo = ? OR nome LIKE ? ';
$sql.= 'OR nomeMarca LIKE ? OR nomeCategoria LIKE ?';

// query segura, evita SQL injection
$pstmt = $pdo->prepare($sql);
$pstmt->bindValue($valor);
$pstmt->bindValue("%$valor%");
$pstmt->bindValue("%$valor%");
$pstmt->bindValue("%$valor%");
$pstmt->execute();

$produtos = $pstmt->fetchAll(PDO::FETCH_ASSOC); // todos de uma vez

Segunda, dois campos passados, coluna e valor…

$sql = 'SELECT * FROM produtos WHERE ? LIKE ?';

// query segura...
$pstmt = $pdo->prepare($sql);
$pstmt->bindValue($coluna); // $_GET['coluna'] talvez?
$pstmt->bindValue("%$valor%");
$pstmt->execute();

$produtos = $pstmt->fetchAll(PDO::FETCH_ASSOC);

Obrigado LostSoldier, mas não sei porque continua a dar erro só que agora é este: você poderia me ajudar?

Notice: Undefined variable: pdo in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\cadastro\busca.php on line 13

Fatal error: Call to a member function prepare() on null in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\cadastro\busca.php on line 13

segue o arquivo abaixo:

<?php require_once 'conecta.php' ?> <?php // Recebe o valor enviado $valor = $_GET['valor']; // Procura titulos no banco relacionados ao valor $sql = 'SELECT * FROM produtos WHERE codigo = ? OR nome LIKE ? '; $sql.= 'OR nomeMarca LIKE ? OR nomeCategoria LIKE ?'; // query segura, evita SQL injection $pstmt = $pdo->prepare($sql); $pstmt->bindValue($valor); $pstmt->bindValue("%$valor%"); $pstmt->bindValue("%$valor%"); $pstmt->bindValue("%$valor%"); $pstmt->execute(); $produtos = $pstmt->fetchAll(PDO::FETCH_ASSOC); // todos de uma vez // Acentuação header("Content-Type: text/html; charset=ISO-8859-1",true);

Como disse anteriormente, foi apenas um exemplo. o erro diz que a variável $pdo não foi definida, logo você terá de criá-la em seu arquivo conecta.php por exemplo, Há exemplos de conexão no link de referência que passei mais acima… tenha em mente que isso pode afetar todas as páginas que usam o arquivo conecta.php…

Obrigado LostSoldier vou fazer do jeito que me orientou e reportarei se obtive sucesso.

abraços!!