Jump to content

Procura na base de dados


dguimaraes
 Share

Recommended Posts

Boas,

Estou a tentar fazer uma pesquisa na base de dados que criei e está a dar erros de sql e não consigo resolver. Segue o Codigo

for html:

<!DOCTYPE html>
<html>
<body>
<form action="include/consultar_contrato.php" method="post">
<input type="text" name="palavra" />
<input type="submit" Value="Buscar" />
</form>
</body>
</html>

consulta php

<?php
$hostdb = "localhost";// Geralmente Localhost
$userdb = "root";//usuário do seu banco de dados
$passdb = "";// senha do banco de dados
$tabledb = "dbase_man";// tabela do banco de dados
$conecta = mysql_connect($hostdb, $userdb, $passdb) or die (mysql_error());
@mysql_select_db($tabledb, $conecta) or die ("Erro ao conectar com o banco de dados");
$procura = $_POST['palavra'];// palavra que o usuario digitou
$metodo = $_POST['metodo']; //clienteque o usuario deseja
$procura_query = mysql_query("SELECT * tb_contractos WHERE (cliente LIKE '%$palavra%' OR projecto LIKE '%$palavra%')") or die(mysql_error());//faz a procura com as palavras enviadas
if (empty($procura_query)) { //Se nao achar nada, lança essa mensagem
echo "Nenhum registro encontrado.";
}
// quando existir algo em '$procura_query' ele realizará o script abaixo.
while ($dados = mysql_fetch_array($procura_query)) {
echo "ID Cliente: $dados[id]<br />";
echo "Nome do Cliente: $dados[cliente]<br />";
echo "Nome do Projecto: $dados[projecto]<br />";

echo "<hr>";
}
?>
Edited by dguimaraes
Link to comment
Share on other sites

@mysql_select_db($tabledb, $conecta) or die ("Erro ao conectar com o banco de dados");

porque estás a ignorar erros deste comando? Se houver erro convém saber.

$metodo = $_POST['metodo']; //clienteque o usuario deseja

no html não há nenhum campo do formulário com este nome

"SELECT * tb_contractos WHERE (....

Falta o "FROM" -> select * FROM tb_.....

if (empty($procura_query)) { //Se nao achar nada, lança essa mensagem

Não deves testar assim.

Para veres se o query correu bem:

if (! $procura_query) {
// ocorreu um erro

Para veres o número de registos encontrados (depois de confirmares que não houve erro)

$registoEncontratos = mysql_num_rows($procura_query);

O loop está mal:

mysql_fetch_array

retorna um array com indices númericos.

Tu queres usar

mysql_fetch_assoc

E por fim, isto

echo "ID Cliente: $dados[id]<br />";
echo "Nome do Cliente: $dados[cliente]<br />";
echo "Nome do Projecto: $dados[projecto]<br />";

devia ser isto (faltam as plicas):

echo "ID Cliente: $dados['id']<br />";
echo "Nome do Cliente: $dados['cliente']<br />";
echo "Nome do Projecto: $dados['projecto']<br />";

+ (ver comentário abaixo!!!)

Edited by tiago.f
Link to comment
Share on other sites

Void,

Eu estive a tentar fazer uma pesquisa de maneira diferente. Mas acabo novamente por nao obter resultados:

BD:

banco: dbase_man

tabela: tb_contratos

id cliente projecto gestor_projecto contrato_man inicio_contrato fim_contrato pack_viagens pack_horas_remotas pack_horas_locais pack_horas_dev observacoes

consultar_test.php

<!DOCTYPE html>
<html>
<body>
<form name="consultor "action="consultar_contrato.php" method="post">
<input type="text" name="search" />
<input type="submit" Value="Buscar" />
</form>
<p>Search results</p>
<?php if(mysql_num_rows($search_query)!=0){
do { ?>
<p><?php echo $search_rs['cliente']; ?> </p>
<?php }while ($search_rs=mysql_fetch_assoc($search_query));
}else{
echo "Sem resultados";
}?>
</body>
</html>

consultar_contrato.php

<?php
$connect = mysql_connect('localhost','root','');
$banco = mysql_select_db('dbase_man');

if(!isset($_POST['search'])){
 header("Location:consultar_teste.php");
}
$search_sql="SELECT * FROM tb_contratos WHERE cliente LIKE '".$_POST['search']."%' OR projecto LIKE '%".$_POST['search']."%'";
$search_query=mysql_query($search_sql);
if(mysql_num_rows($search_query)!=0){
 $search_rs=mysql_fetch_assoc($search_query);
}
$teste = $_POST['search'];

echo "Pesquisamos por $teste";

?>
Link to comment
Share on other sites

ok, há aí alguma confusão em como o servidor php processa pedidos do browser, páginas php e responde.

Estás a pensar que ao fazeres

header("Location:consultar_teste.php");

ele vai continuar a executar o código do ficheiro consultar_teste.php.

Não é verdade. O que acontece é que o servidor responde ao browser: "agora navega para a página consultar_teste.php"

O browser pede ao servidor a página consultar_teste.php e o servidor, quando vai executar o php, encontra como 1ª instrução:

if(mysql_num_rows($search_query)!=0){

ora este comando vai dá erro já que não houve nenhum query feito desde que o pedido do browser chegou (e podes ver esse erro com o comando mysql_error(); ) , dái que nunca tenhas resultados.

e já agora, o teu php no consultar_test não faz nada! (o ciclo while tá mal/não tem instruções/etc/etc

Algo como isto (1 só fiicheiro) deve funcionar. NOTA: não testei por isso desculpa lá qq coisinha

<!DOCTYPE html>
<html>
<body>
<form name="consultor" action="" method="post">
 <input type="text" name="search" />
 <input type="submit" Value="Buscar" />
</form>
<p>Search results</p>
<?php

if (isset($_POST['search'])) {
 $connect = mysql_connect('localhost','root','');
 $banco = mysql_select_db('dbase_man');
 $srch = mysql_real_escape_string($_POST['search']);

 $search_sql = "SELECT * FROM tb_contratos WHERE cliente LIKE '" . $srch . "%' OR projecto LIKE '%" . $srch . "%'";
 $search_query = mysql_query($search_sql);
 if ($search_query) {
	 if (mysql_num_rows($search_query) == 0) {
		 echo "Sem resultados";
	 } else {
		 while ($dados = mysql_fetch_assoc($search_query)) {
			 echo "ID Cliente: $dados['id']<br />";
			 echo "Nome do Cliente: $dados['cliente']<br />";
			 echo "Nome do Projecto: $dados['projecto']<br />";
		 }
	 }
 }
}
?>
</body>
</html>
Edited by tiago.f
Link to comment
Share on other sites

Bem, foste responder a minha questão para mim a do header, tava com a ideia q o fazia abrir na própria página. Sim com o q fizeste funciona, tive q voltarca ajustar para a página formatada com estilos do bootstrap mas já funciona. Obrigado por tudo, PHP e SQL só tenho 3 dias disso e n sou estudante nem trabalho na área...e curiosidade mas gosto disto 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.