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
- $sql = mysqli_query($conexao, "SELECT * FROM produtos WHERE codigo = “.$valor.”);
- $sql = mysqli_query($conexao, “SELECT * FROM produtos WHERE nome = “.$valor.”%”");
- $sql = mysqli_query($conexao, “SELECT * FROM produtos WHERE nomeMarca = “.$valor.”%”");
- $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!!