Jump to content
JenneferBarbosa

Busca com vários campos com PHP e MySQL

Recommended Posts

Pessoal, sou nova aqui no Fórum e estou começando a estudar PHP. Estou com dúvidas quanto a pesquisa com vários campos, consegui fazer para um campo só, porém quando tento para vários campos não funciona. Fiz algumas pesquisas e só consegui achar buscas com 'selects e options' e eu queria que ele pegasse o que foi digitado no input e fizesse a busca, mas o usuário não precisaria informar todos os campos (se não quisesse). Quando clico em 'Pesquisar' aparece todos os dados do banco. E uma outra dúvida, como faz para que os dados pesquisados sejam exibidos na mesma tela (abaixo do formulário de pesquisa)

<form method="POST" id="form-pesquisa" action="busca.php">
            Livro: <input type="text" name="nome" id="nome" placeholder="Fulano de Tal">
            Autor: <input type="text" name="autor" id="autor" placeholder="Fulano de Tal">
            Edicao:  <input type="text" name="edicao" id="edicao" placeholder="Fulano de Tal">
            <input type="submit" name="enviar" value="Pesquisar">
 </form>
<ul class="resultado"></ul>


$nome = $_POST['nome'];
$autor = $_POST['autor'];
$edicao = $_POST['edicao'];

//Pesquisar no banco de dados nome do livro referente a palavra digitada pelo usuário
$livros = "SELECT * FROM livro WHERE nome OR autor OR edicao ORDER BY nome ASC";
$resultado_livros = mysqli_query($conn, $livros);

if (mysqli_num_rows($resultado_livros) <= 0) {
    echo "Nenhum livro encontrado...";
} else {
    while ($rows = mysqli_fetch_assoc($resultado_livros)) {
        echo "<li>" . $rows['codigo'] . "</li>";
        echo "<li>" . $rows['nome'] . "</li>";
        echo "<li>" . $rows['autor'] . "</li>";
        echo "<li>" . $rows['edicao'] . "</li>";
    }
}

. Como se ele fizesse a busca internamente e mostrasse ao usuário o que ele pesquisou sem ele sair da tela em que está o form

Share this post


Link to post
Share on other sites

@JenneferBarbosa Para fazer isso basta você usar o operador do LIKE do SQL, é bem simples bastar fazer algumas mudanças na sua consulta SQL.

 

Também recomendo o uso do AND a o em vez do OR já que utilizando o operador LIKE com o OR pode ocorrer complicações.

 

Um exemplo do uso do LIKE mais o AND na sua consulta ficaria +- assim

$livros = "SELECT * FROM `livro` WHERE `nome` LIKE '".$nome."%' AND `autor` LIKE '".$autor."%' AND `edicao` LIKE '".$edicao."%' ORDER BY `nome` ASC";

 

 

Share this post


Link to post
Share on other sites

Oi boa noite, seja bem vinda.

 

O que nosso amigo disse acima vai te ajudar, use o LIKE, apenas complementando que você deve utilizar o like apenas uma vez depois você usa o operando AND ou OR com ou sem parênteses depende de como você vai fazer a consulta.

 

e para exibir tudo em uma mesma página depende de como você está exibindo o resultado, se você enviar a action do form para a mesma página você pode exibir os registros da consulta na mesma página ou uma alternativa é salvar o resultado em uma sessão e exibir também na mesma página verificando antes(if) se existe a sessão com os valores pesquisados.

 

Share this post


Link to post
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

  • Similar Content

    • By gersonab
      Boa tarde a todos, tenho um sistema de upload de arquivos que funciona perfeitamente, agora eu gostaria que estes arquivos fossem armazenados em nuvem, não no servidor, poderiam indicar um tutorial ou como proceder.
    • By Diego-SLP
      Bom dia,
       
      Teria como eu fazer um UPDATE na minha base colocando através de um FORM o VALOR_UNITARIO sendo que a QUANTIDADE já tenho na base de dados, e assim, atualizar o campo VALOR FINAL já? 
       
      Vou atualizar varios registros de uma vez.
    • By magegamer07
      Galera, estou a muito tempo pesquisando como remover isso do resultado final do meu site 
       
      <dl class="variation">Início: 17 de julho de 2020</dl>
      Eu apenas gostaria que ele me retornasse o seguinte valor
      Início: 17 de julho de 2020
       
      É uma função que estou tentando fazer no wordpress junto ao woocommce para que na hora de clicar em finalizar compra, ele me redirecione ao WhatsApp com os itens do meu carrinho,
      Tudo vai bem, com exceção desse bendito <dl class..
      tem como ocultar isso?
       
      Quando a mensagem chega no whats, ela vem da forma que mostrei a cima com o DL
       
      Estou fazendo isso dentro de /public_html/wp-content/plugins/woocommerce/templates/order/order-details.php
       
      Tenho pouco conhecimento em php, por favor me ajudem 
       
      GRATIDÃO!
       
       
    • By _danf
      Senhores, boa noite!
      Possuo um cadastro em php é SQL Server.
      queria adicionar uma função, que ao selecionar um item do select fizesse um insert numa tabela especifica do DB
      Exemplo:
      <select id="select-faction"> <option value="opt">Escolha sua facção</option> <option value="1">Aliança da Luz (Light)</option> <option value="0">União da Fúria (Dark)</option> </select> Database GameData > Table UserMaxGrow > 
      Campos:
      RowID, ServerID, UserUID, Conntry (0 Luz, 1 Furia), MaxGrow (3), Del (false)
      Ao criar a conta, ele teria que inserir Por padrão:
       
       
      Exemplo:
      na imagem abaixo desde ja agradeço.

       
      Cadastro.php
      <?php require_once('db.config.php'); $user_ip = $_SERVER['REMOTE_ADDR']; $username = isset($_POST['username']) ? trim($_POST['username']) : ''; $password = isset($_POST['password']) ? trim($_POST['password']) : ''; $password2 = isset($_POST['password2']) ? trim($_POST['password2']) : ''; $email = isset($_POST['email']) ? trim($_POST['email']) : ''; $errors = array(); $success = false; // Processar os dados POST. if(isset($_POST) && !empty($_POST)){ // VALIDAR LOGIN if(empty($username)){ $errors[] = '<center><font color="#970808">E necessário um login*</font>'; }else if(strlen($username) < 3 || strlen($username) > 16){ $errors[] = '<center><font color="#970808">Seu login deve ter entre 3 e 16 caracteres.</font>'; }else if(ctype_alnum($username) === false){ $errors[] = '<center><font color="#970808">Seu login deve consistir de números e letras apenas.</font>'; }else{ // VERIFICA SE O LOGIN JÁ EXISTE. $sql = "SELECT UserID FROM PS_UserData.dbo.Users_Master WHERE UserID = ?"; $stmt = odbc_prepare($GLOBALS['dbConn'],$sql); $args = array($username); if(!odbc_execute($stmt,$args)){ $errors[] = '<center><font color="#970808">Não foi possível determinar se esse usuário já existe no banco de dados.</font>'; }elseif($row = odbc_fetch_array($stmt)){ $errors[] = '<center><font color="#970808">Login já existente, utilize outro.</font>'; } } // VALIDAR SENHA if(empty($password)){ $errors[] = '<center><font color="#A52A2A">Informe uma senha.</font>'; }else if(strlen($password) < 3 || strlen($password) > 16){ $errors[] = '<center><font color="#970808">A senha deve ter entre 3 e 16 caracteres.</font>'; }else if($password != $password2){ $errors[] = '<center><font color="#970808">As senhas não coincidem.</font>'; } // E-MAIL COM VALIDAÇÃO "O USUÁRIO NÃO PODE CRIAR UMA CONTA COM O MESMO E-MAIL". if(isset($_POST) && !empty($_POST)){ if(empty($email)){ $errors[] = '<center><font color="#970808">Informe um e-mail.</font>'; }else if(strlen($email) < 5 || strlen($email) > 30){ $errors[] = '<center><font color="#970808">O E-mail deve ter entre 5 e 30 caracteres de comprimento.</font>'; }else{ // VERIFICA SE O E-MAIL JÁ EXITE. $sql = "SELECT email FROM PS_UserData.dbo.Users_Master WHERE email = ?"; $stmt = odbc_prepare($GLOBALS['dbConn'],$sql); $args = array($email); if(!odbc_execute($stmt,$args)){ $errors[] = '<center><font color="#970808">Falha ao determinar se esse E-amil já existe no banco de dados.</font>'; }elseif($row = odbc_fetch_array($stmt)){ $errors[] = '<center><font color="#970808">O E-mail já foi usado. Escolha outro E-mail.</font>'; } } } // Persiste a nova conta no banco de dados se não ocorrerem erros anteriores. if(count($errors) == 0){ $sql = "INSERT INTO PS_UserData.dbo.Users_Master (UserID,Pw,JoinDate,Admin,AdminLevel,UseQueue,Status,Leave,LeaveDate,UserType,Point,EnPassword,UserIp,email) VALUES (?,?,GETDATE(),0,0,0,0,0,GETDATE(),'N',0,'',?,?)"; $stmt = odbc_prepare($GLOBALS['dbConn'],$sql); $args = array($username,$password,$user_ip,$email); if(odbc_execute($stmt,$args)){ $success = htmlentities("{$username}, seu cadastro foi finalizado com sucesso!"); }else{ // Isso significa que a instrução inserir provavelmente não é válida para seu banco de dados. Corrija a consulta ou corrija seu banco de dados, sua escolha;) $errors[] = '<center><font color="#970808">Problema ao tentar criar sua conta, tente novamente.</font>'; } } } // Determine which view to show. if($success === false){ require_once('cadastro.view.php'); }else{ require_once('success.view.php'); } ?>  
      cadastro.view.php
      <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="login.css"> <link rel="icon" href="https://img.icons8.com/officel/16/000000/code.png"> <link href="https://fonts.googleapis.com/css2?family=Montserrat&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Josefin+Sans&display=swap" rel="stylesheet"> <title>Vamos lá? </title> </head> <body><br> <?php if(count($errors)){ ?> <ul id="error"> <?php foreach($errors as $error){ ?> <li><?php echo $error; ?></li> <?php } ?> </ul> <?php } ?> <div class="form-register"> <form action="cadastro.php" method="POST"> <h1>Criar uma nova conta</h1> <br><br> <input value="<?php if(isset($_POST['username'])){ echo $_POST['username']; } ?>" type="text" title="Login" placeholder="Login*" name="username"> <br><br><br> <input value="<?php if(isset($_POST['password'])){ echo $_POST['password']; } ?>" type="password" title="Senha" placeholder="Senha" name="password"> <br><br><br> <input value="<?php if(isset($_POST['password2'])){ echo $_POST['password2']; } ?>" type="password" title="Confirmar senha" placeholder="Confirmar senha" name="password2"> <br><br><br> <input value="<?php if(isset($_POST['email'])){ echo $_POST['email']; } ?>" type="mail" title="E-mail" placeholder="Endereço de e-mail" name="email"> <label>Utilize um e-mail válido para confirmação</label> <br><br> <select id="select-faction"> <option value="opt">Escolha sua facção</option> <option value="0">Aliança da Luz (Light)</option> <option value="1">União da Fúria (Dark)</option> </select> <br><br> <button type="submit">Cadastrar</button> <br><br> <h2><a href="index.html"> Já possui um acesso?</a></h2> </form> </div> </body> </html>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.