dguimaraes Posted January 22, 2016 at 12:56 PM Report Share #592313 Posted January 22, 2016 at 12:56 PM (edited) 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 January 22, 2016 at 12:58 PM by dguimaraes Link to comment Share on other sites More sharing options...
tiago.f Posted January 22, 2016 at 01:21 PM Report Share #592317 Posted January 22, 2016 at 01:21 PM (edited) @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 January 22, 2016 at 01:24 PM by tiago.f Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 22, 2016 at 01:23 PM Report Share #592318 Posted January 22, 2016 at 01:23 PM qual o valor da variável ]TT]$palavra[/TT] usada na construção do SQL ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
dguimaraes Posted January 22, 2016 at 02:10 PM Author Report Share #592320 Posted January 22, 2016 at 02:10 PM Boas void, Muito bom. Obrigado! Vou alterar e testar. HappyHippyHippo é "cliente" Link to comment Share on other sites More sharing options...
tiago.f Posted January 22, 2016 at 02:20 PM Report Share #592322 Posted January 22, 2016 at 02:20 PM Void....é a minha sina.... Link to comment Share on other sites More sharing options...
dguimaraes Posted January 22, 2016 at 03:57 PM Author Report Share #592334 Posted January 22, 2016 at 03:57 PM 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 More sharing options...
tiago.f Posted January 22, 2016 at 04:18 PM Report Share #592337 Posted January 22, 2016 at 04:18 PM (edited) 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 January 22, 2016 at 04:19 PM by tiago.f Link to comment Share on other sites More sharing options...
dguimaraes Posted January 22, 2016 at 07:03 PM Author Report Share #592356 Posted January 22, 2016 at 07:03 PM 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 More sharing options...
HappyHippyHippo Posted January 22, 2016 at 07:55 PM Report Share #592363 Posted January 22, 2016 at 07:55 PM Boas void, Muito bom. Obrigado! Vou alterar e testar. HappyHippyHippo é "cliente" Errado tenta novamente IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now