Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KillMachine

[Resolvido] Sistema de busca não funciona

Recommended Posts

Estou montando um banco de dados e nao estou consiguindo fazer este sistema de busca funcionar da o seguinte erro:

 

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\wamp\www\auto_center\busca.php on line 65

agora todo o codigo do busca.php

 

<?php
	mysql_connect("localhost", "root", ""); mysql_select_db("clientes");

?>
<!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>
<style>
form{border-botton-style:dashed;}
form, input, select{font: 25px arial; color:#666666;}
input{color: #999; border: solid 3px #999;}, table, td, tr, th{border: solid 1px #CCCCCC;}
.bt_lupa{width: 30px; border:none;}
.col1{width:300px;}
.col2{width:150px; text-align:center;}
.col3{width:200; text-align:left;}

</style>
</head>
<body>
<form method="get" action="">
	
 Busca: <input type="text" size="25" name="busca" />
 <select name="tabela" >
 <option value="nome">Nome</option>
 <option value="cpf">CPF</option>
 <option value="dt_nasc">Data de Nascimento</option>
 </select>
<input type="image" src="lupa.png" border="0" class="bt_lupa">
 <p />
</form>
<?php

	$busca = addslashes($_GET['busca']);
	$tabela = addslashes($_GET['tabela']);
	$SQL = "SELECT nome, cpf, dt_nasc, responsavel
			FROM clientes
		 ";
	
	switch($tabela){
		case "nome":
			$SQL .= "WHERE nome LIKE('%$busca%')";
			break;
		case "cpf":
			$SQL .= "WHERE cpf LIKE('%$busca%')";
			break;
		case "dt_nasc":
			$SQL .= "WHERE dt_nasc LIKE('%$busca%')";
			break;
					
	}

	$SQL .= "ORDER BY $tabela ASC";
	
	$rs = mysql_query($SQL);
	echo '<table>
				<tr>
				<th class="col1">Nome</th>
				<th class="col2">CPF</th>
				<th class="col1">Data de Nascimento</th>
				<th class="col2">Situação</th>
				</tr>';
	
	[b]//linha 65 if (list($cod_cli, $nome, $cpf, $dt_nasc, $resp) = mysql_fetch_row($rs)) {[/b] 
		while(list($cod_cli, $cpf, $dt_nasc, $resp) = mysql_fetch_row($rs)){
			echo "<tr>
			<td class=\"col1\">$nome</td>
			<td class=\"col2\">$cpf</td>
			<td class=\"col3\">$dt_nasc</td>
			<td class=\"col3\">$resp</td>
			<td><a href=\"detalhe.php?cod=$cod_cli\">Detalhe</a></td>
			</tr>";
		}
	} else {
		echo "<tr>
			<td colspan=\"4\" align=\"center\">Refine os parâmentros de pesquisa</td>
			</tr>";
	}
		echo '</table>';
	
?>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim:

$SQL .= "ORDER BY $tabela ASC";

echo $SQL,"\n";
$rs = mysql_query($SQL)or die(mysql_error());
nos diga oque retornar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT nome, cpf, dt_nasc, responsavel FROM clientes WHERE nome LIKE('%Tuca%')ORDER BY nome ASC No database selected

 

no lugar daquele erro aconteceu isso, que não é bem um erro creio eu

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas eu ja fiz isso quando eu chamei no começo do codigo mas vou tentar

 

EDIT: Achei um erro meu realmente estava selecionando o banco de dados errado, mas agora esta dando este erro

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC' at line 3

 

EDIT2 : e quando eu coloco para buscar mesmo com o erro da um Notice

 

Notice: Undefined offset: 4 in C:\wamp\www\auto_center\busca.php on line 67

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser que nao estejas recebendo o valor de $tabela.

Mantenha o código como o William lhe passou e veja como está retornando a consulta (o valor de $SQL).

 

Uma solução é testar se tem o valor do campo antes de incluí-lo na cosulta:

if(isset($tabela))$SQL .= "ORDER BY $tabela ASC";
Quanto ao segundo, alguma das chaves (a "4") não foi setada.

Não sei como está teu código agora, então nao sei dizer ao certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não , não mudou nada e o codigo com a sua dica esta assim

 

<?php
mysql_connect("localhost", "root", ""); mysql_select_db("auto_center");
?>
<!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>
<style>
form{border-botton-style:dashed;}
form, input, select{font: 25px arial; color:#666666;}
input{color: #999; border: solid 3px #999;}, table, td, tr, th{border: solid 1px #CCCCCC;}
.bt_lupa{width: 30px; border:none;}
.col1{width:300px;}
.col2{width:150px; text-align:center;}
.col3{width:200; text-align:left;}

</style>
</head>
<body>
<form method="get" action="">

   Busca: <input type="text" size="25" name="busca" />
 <select name="tabela" >
     <option value="nome">Nome</option>
     <option value="cpf">CPF</option>
     <option value="dt_nasc">Data de Nascimento</option>
 </select>
<input type="image" src="lupa.png" border="0" class="bt_lupa">
   <p />
</form>
<?php

@$busca = addslashes($_GET['busca']);
@$tabela = addslashes($_GET['tabela']);
$SQL = "SELECT nome, cpf, dt_nasc, responsavel
		FROM clientes
		 ";

switch($tabela){
	case "nome":
		$SQL .= "WHERE nome LIKE('%$busca%')";
		break;
	case "cpf":
		$SQL .= "WHERE cpf LIKE('%$busca%')";
		break;
	case "dt_nasc":
		$SQL .= "WHERE dt_nasc LIKE('%$busca%')";
		break;

}

if(isset($tabela))$SQL .= "ORDER BY $tabela ASC";



$rs = mysql_query($SQL) or die (mysql_error());
echo '<table>
			<tr>
			<th  class="col1">Nome</th>
			<th  class="col2">CPF</th>
			<th  class="col1">Data de Nascimento</th>
			<th  class="col2">Situação</th>
			</tr>';

if (list($cod, $nome, $cpf, $dt_nasc, $resp) = mysql_fetch_row($rs)) {
	while(list($cod, $cpf, $dt_nasc, $resp) = mysql_fetch_row($rs)){
		echo "<tr>
		<td class=\"col1\">$nome</td>
		<td class=\"col2\">$cpf</td>
		<td class=\"col3\">$dt_nasc</td>
		<td class=\"col3\">$resp</td>
		<td><a href=\"detalhe.php?cod=$cod\">Detalhe</a></td>
		</tr>";
	}
} else {
	echo "<tr>
		<td colspan=\"4\" align=\"center\">Refine os parâmentros de pesquisa</td>
		</tr>";
}
	echo '</table>';

?>
</body>
</html>

 

Tem mais algumas coisas erradas no codigo, certo? pois tipo quando eu coloco para buscar por nome (a busca é do tipo que tem um menu dai você escolhe se quer buscar por nome data de nascimento ou cpf) dai aparece certinho soh que no campo nome estranhamente aparece um numero que eh de um cliente mas em todos aparece o mesmo numero (014.256.96885) ai no Detalhe aparece o nome da pessoa, mas o nome é para aparecer embaixo da coluna nome esta dando errado algo ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom filho,

 

troque este pedaço:

if (list($cod, $nome, $cpf, $dt_nasc, $resp) = mysql_fetch_row($rs)) {
while(list($cod, $cpf, $dt_nasc, $resp) = mysql_fetch_row($rs)){
echo "<tr>
<td class=\"col1\">$nome</td>
<td class=\"col2\">$cpf</td>
<td class=\"col3\">$dt_nasc</td>
<td class=\"col3\">$resp</td>
<td><a href=\"detalhe.php?cod=$cod\">Detalhe</a></td>
</tr>";
}
por este:
if (mysql_num_rows($rs)>0){
while($cliln = mysql_fetch_row($rs)){
echo "<tr>
<td class=\"col1\">".$cliln['nome']."</td>
<td class=\"col2\">".$cliln['cpf']."</td>
<td class=\"col3\">".$cliln['dt_nasc']."</td>
<td class=\"col3\">".$cliln['resp']."</td>
<td><a href=\"detalhe.php?cod=".$cliln['cod']."\">Detalhe</a></td>
</tr>";
}
Verifique se está listando certo.

 

troque o "<th clas..." por "<td clas..." e insira um último <td></td> depois de "Situação"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então esta melhorando o segundo erro se foi mas o do

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC' at line 3

 

continua =O

(PS: o erro , só aparece na pagina principal do busca.php ou seja, quando eu coloco para buscar qualquer coisa o erro sai e fica normal, do jeito que eu falei logo abaixo)

 

 

quando eu vou fazer uma busca ele busca tudo certo por exemplo tem dois clientes com "A" se eu ponho "A" ele acha dois, só que os dados desse cliente não aparecem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi um erro meu...

Troque o "mysql_fetch_row($rs)" do while por: "mysql_fetch_assoc($rs)" assim ele vai listar com base no nome da coluna.

 

Quanto ao erro, é porque não tem o valor de "$tabela" então a SQL vai retornar erro.

Coloque o resultado que tem que aparecer dentro de uma condição para testar se tem este valor.

Assim não irá fica fazendo uma consulta sem que seja preciso, sómente na hora que ele recebe o valor de "$tabela"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Otimo ela ja esta funcionando muito bem, só tem 2 duvidas

 

Nao intendi oque é para eu fazer na $tabela (Sou iniciante em php, ja deve ter notado ^^)

 

 

Como eu faço para quando digitar no campo da busca só buscar na primeira palavra do campo por exemplo

 

Busquei A

 

Alessandro

RobertA

 

ele vai lsitar roberta pq tem A no meio eu sou quero que preocure por A que tenha no começo do nome entendeu? como faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pra limitar a visualização sem a nescessidade. Por isso gera erro, poi o PHP vai fazer a consulta sem ter tudo ali.

 

Deixe assim

if($tabela){// testa se foi enviado em qual tabela buscar
$SQL = "SELECT nome, cpf, dt_nasc, responsavel
...... //resto do código
echo '</table>';
} // fecha a condição
use o coringa "%". ele significa "qualquer coisa"

Ex.

$var='alber';

$var% [ALBERto, ALBERtina]

%$var [wALBER]

%$var% [wALBERto]

 

WHERE nome LIKE '$busca%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.