Logo Hardware.com.br
Romanoo.oo1
Romanoo.oo1 Novo Membro Registrado
21 Mensagens 4 Curtidas

[Resolvido] Como faz? / 1 Select escolhe ID,Nome,RG ou CPF e 1 Input entra com os dados

#1 Por Romanoo.oo1 31/10/2020 - 01:31
Olá Programadores!

Estou tentando fazer uma página de pesquisa, que tem 1 SELECT e 1 INPUT
O SELECT escolhe entre ID, NOME, RG ou CPF
E no INPUT digita o dado. Ex: Se escolheu ID no SELECT digita o ID no INPUT para fazer a pesquisa em ID no Banco de Dados


<form method="post" action="pesquisacadastrohospede.php">

<div class="form-group col-md-3">

<strong>Escolher entre ID, NOME, RG ou CPF </strong>

<select class="browser-default custom-select" name=" ">





</select>

</div>

<div class="form-group col-md-3">

<strong>Digitar ID, NOME, RG ou CPF </strong>

<input class='form-control' type='text' name='rg' size='25' value=''>

</div>

<button class="" type="submit" class="btn btn">Buscar</button>

</form>


Se eu usar o name"rg" do INPUT ele só busca pelos usuários com RG, ai que eu queria poder escolher entre ID, NOME, RG ou CPF.

_____________________

Outra coisa tbm, queria saber como que faço para pesquisar os 4 campos da tabela

TABELA = cadastro CAMPOS = idCad, nome, rg, cpf

No meu código abaixo ele esta fazendo a pesquisa apenas em $rg
[php]

$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE rg BETWEEN '$rg' AND '$rg'");

$linhas = mysqli_num_rows($resultado);

while($linhas = mysqli_fetch_array($resultado)){

$idCad = $linhas["idCad"];
$nome = $linhas["nome"];
$endereco = $linhas["endereco"];
$numero = $linhas["numero"];
$cidade = $linhas["cidade"];
$estado = $linhas["estado"];
$cep = $linhas["cep"];
$telResd = $linhas["telResd"];
$telCel1 = $linhas["telCel1"];
$telCel2 = $linhas["telCel2"];
$rg = $linhas["rg"];
$cpf = $linhas["cpf"];


echo'
'.$linhas["idCad"].'
'.$linhas["nome"].'
'.$linhas["endereco"].'
'.$linhas["numero"].'
'.$linhas["cidade"].'
'.$linhas["estado"].'
'.$linhas["cep"].'
'.$linhas["telResd"].'
'.$linhas["telCel1"].'
'.$linhas["telCel2"].'
'.$linhas["rg"].'
'.$linhas["cpf"].'

Anexos

esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
31/10/2020 - 13:53
!! CUIDADO !!
No você utilizou exatamente os mesmos nomes das colunas do domínio no BD e — a menos que prefira facilitar a vida de um HACKER, — isto é falha grave!


Embora seja possível implementar na página as adequações correspondentes às escolhas do usuário, você não precisa fazer este malabarismo todo dentro dela – Observe que o formulário se incumbe de remeter tudo: Tanto a opção escolhida (no select) e como o conteúdo digitado (no input).
E para isso só precisa batizar cada campo com o 'name' adequado:
  • <select class="browser-default custom-select" name="tipoID">

  • <input class="form-control" type="text" name="identificacao" size="25">



Voltando à questão da segurança, lembre-se que o usuário não enxerga o código e portanto não se importa com o que há nas "options", logo, na combo use para elas diferentes apelidos ideais porém incomuns (ou vice-versa):
rg = ci
cpf = cic
idCad = cadastro
nome = nomeCompleto

Para reverter os valores de acordo com os respectivos nomes das colunas, use o PHP. Comumente aplica-se o "switch-case" ou uma instância de objeto.
[php]$tipo_id = $_POST['tipoID'];

#1 Object:
$nomeCols = array("ci"=>"rg", "cic"=>"cpf", "cadastro"=>"idCad", "nomeCompleto"=>"nome");
$col = $nomeCols[$tipo_id]

#2 Switch-case:
$col = ""
switch($tipo_id) {
case "ci": $col = "rg"; break;
case "cic": $col = "cpf"; break;
case "cadastro": $col = "idCad"; break;
case "nomeCompleto": $col = "nome"; break;
}[/php]


E então, sabendo que o documento receberá da requisição somente um tipo de identificador por vez, é possível fazer assim:
[php]if (empty($col)) {
// mensagem de erro / consulta / query inválida
}
else {
$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $col = $_POST['identificacao']");

$linhas = ...
...
}
[/php]


wink.png Verifica aí
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
Romanoo.oo1
Romanoo.oo1 Novo Membro Registrado
21 Mensagens 4 Curtidas
#3 Por Romanoo.oo1
31/10/2020 - 17:07
esquiloesperto disse:
Embora seja possível implementar na página as adequações correspondentes às escolhas do usuário, você não precisa fazer este malabarismo todo dentro dela – Observe que o formulário se incumbe de remeter tudo: Tanto a opção escolhida (no select) e como o conteúdo digitado (no input).
E para isso só precisa batizar cada campo com o 'name' adequado:
  • <select class="browser-default custom-select" name="tipoID">

  • <input class="form-control" type="text" name="identificacao" size="25">



Voltando à questão da segurança, lembre-se que o usuário não enxerga o código e portanto não se importa com o que há nas "options", logo, na combo use para elas diferentes apelidos ideais porém incomuns (ou vice-versa):

Para reverter os valores de acordo com os respectivos nomes das colunas, use o PHP. Comumente aplica-se o "switch-case" ou uma instância de objeto.
[php]$tipo_id = $_POST['tipoID'];

#1 Object:
$nomeCols = array("ci"=>"rg", "cic"=>"cpf", "cadastro"=>"idCad", "nomeCompleto"=>"nome");
$col = $nomeCols[$tipo_id]

#2 Switch-case:
$colSelect = ""
switch($tipo_id) {
case "ci": $colSelect = "rg"; break;
case "cic": $colSelect = "cpf"; break;
case "cadastro": $colSelect = "idCad"; break;
case "nomeCompleto": $colSelect = "nome"; break;
}[/php]


E então, sabendo que o documento receberá da requisição somente um tipo de identificador por vez, é possível fazer assim:
[php]if (empty($col)) {
// mensagem de erro / consulta / query inválida
}
else {
$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $col = $_POST['identificacao']");

$linhas = ...
...
}
[/php]


wink.png Verifica aí



________________________

EsquiloEsperto,

Muito show, aprendi muito com esse código e as dicas de segurança. Obrigado.

Ficou assim o html: (vou fazer funcionar primeiro p/ depois entrar com css)

<form method="post" action="pesquisacadastrohospede.php">
<div class="form-group col-md-3">
<img style="width:15px; margin-bottom:2px;" src="imagens/icone_info2.png" title="" />
<strong>Escolher entre ID, NOME, RG ou CPF </strong>

<select class="browser-default custom-select" name="tipoID">







</select>

</div>

<div class="form-group col-md-3">
<strong>Digitar ID, NOME, RG ou CPF </strong>

<input class="form-control" type="text" name="identificacao" size="25">

</div>

<button class="btn btn-default" type="submit" class="btn btn">Buscar</button>

</form>


[PHP]
echo ' - Palavra digitada input = ' .$colinput = $_POST['identificacao']; // retornando correto

//se não existir pesquisa não mostrar nada
if ($colinput == true){

echo ' - Palavra escolhida select = ' .$tipo_id = $_POST['tipoID']; // retornando correto

#1 Object:
$nomeCols = array("ci"=>"rg", "cic"=>"cpf", "cad"=>"idCad", "nomeCompleto"=>"nome");
$colSelect = $nomeCols[$tipo_id];

#2 Switch-case:
$colSelect = "";
switch($tipo_id) {
case "ci": $colSelect = "rg"; break;
case "cic": $colSelect = "cpf"; break;
case "cad": $colSelect = "idCad"; break;
case "nomeCompleto": $colSelect = "nome"; break;
}

if (empty($colinput)) {
echo ' - ERRO - Selecione entre ID, RG, CPF ou NOME';
}
else {
//funcionou mas retorna resultados aleatórios
$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $col");

//não fez pesquisa
//$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $col = $_POST['identificacao'] ");

//Deu certo, mas.... faz pesquisa apenas com ID
//$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $colSelect BETWEEN $colinput and $colinput ");

$linhas = mysqli_num_rows($resultado);
while($linhas = mysqli_fetch_array($resultado)){
$idCad = $linhas["idCad"];
$nome = $linhas["nome"];
$endereco = $linhas["endereco"];
$numero = $linhas["numero"];
$cidade = $linhas["cidade"];
$estado = $linhas["estado"];
$cep = $linhas["cep"];
$telResd = $linhas["telResd"];
$telCel1 = $linhas["telCel1"];
$telCel2 = $linhas["telCel2"];
$rg = $linhas["rg"];
$cpf = $linhas["cpf"];

echo'
'.$linhas["idCad"].'
'.$linhas["nome"].'
'.$linhas["endereco"].'
'.$linhas["numero"].'
'.$linhas["cidade"].'
'.$linhas["estado"].'
'.$linhas["cep"].'
'.$linhas["telResd"].'
'.$linhas["telCel1"].'
'.$linhas["telCel2"].'
'.$linhas["rg"].'
'.$linhas["cpf"].'
RG e digitar 333 ele retorna alguns resultados, e assim acontece com todos, menos com nome que não retorna nada.

Abaixo um print da pesquisa para entender melhor.

______________________

Alguma coisa esta passando despercebido, estou tentando aqui.

Será que... onde esta buscando no BD WHERE $col ele retorna qualquer resultado que tiver algumas das letras ou nº ex:3, ai ele retorna tudo que tem esse nº
E não esta buscando no CAMPO = ID, RG, CPF ou NOME somente + a pesquisa $col (será que é isso?)


________________________


Fiz esta alteração na pesquisa sql, deu certo, mas apenas com ID o resto não retorna nada
[PHP]
//onde WHERE $colSelect escolhe a coluna e BETWEEN $colinput and $colinput busca o que foi digitado
$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $colSelect BETWEEN $colinput and $colinput ");
[/PHP]


_______________________

Lembrando que estou carregando a pesquisa na própria página de pesquisa, ou seja o form envia para a mesma pagina (pesquisacadastrohospede.php)

Gostei muito deste código do EsquiloEsperto Show!

Obrigado.

Anexos

marcos andrade22
marcos andra... General de Pijama Registrado
3.6K Mensagens 333 Curtidas
#4 Por marcos andra...
31/10/2020 - 18:02
Eu entendi o que desejas fazer porém vendo pelo lado do usuário seria interessante no campo da busca ele buscar todos os parametros sem a necessidade de um select, isso dá para fazer com like no mysql.

Eu não uso like porém acrescento esta funcionalidade em minhas tabelas com o datatables, aconselho o uso.

https://www.datatables.net/
Possui uma implementação muito fácil, e adiantando que em breve irá precisar de paginação de resultados o que o datatables já implementa automáticamente, assim como ordenação e outras coisa interessantes como botões de exportação, impressão etc.


Outro ponto é que dependendo do tamanho dos resultados retornados na tabela a consulta pode se tornar demasiadamente demorada se fazendo a necessidade de realmente implementar um sistema de paginação para filtrar a consulta, neste caso você consegue implementar uma busca ajax com o datatables e PHP onde irá conseguir limitar os resultados de uma única consulta e ainda irá conseguir a busca conforme digita.
Romanoo.oo1
Romanoo.oo1 Novo Membro Registrado
21 Mensagens 4 Curtidas
#6 Por Romanoo.oo1
31/10/2020 - 18:39
marcos andrade22 disse:
Eu entendi o que desejas fazer porém vendo pelo lado do usuário seria interessante no campo da busca ele buscar todos os parametros sem a necessidade de um select, isso dá para fazer com like no mysql.

Eu não uso like porém acrescento esta funcionalidade em minhas tabelas com o datatables, aconselho o uso.

https://www.datatables.net/
Possui uma implementação muito fácil, e adiantando que em breve irá precisar de paginação de resultados o que o datatables já implementa automáticamente, assim como ordenação e outras coisa interessantes como botões de exportação, impressão etc.


Outro ponto é que dependendo do tamanho dos resultados retornados na tabela a consulta pode se tornar demasiadamente demorada se fazendo a necessidade de realmente implementar um sistema de paginação para filtrar a consulta, neste caso você consegue implementar uma busca ajax com o datatables e PHP onde irá conseguir limitar os resultados de uma única consulta e ainda irá conseguir a busca conforme digita.


_____________________________

porém vendo pelo lado do usuário seria interessante no campo da busca ele buscar todos os parametros sem a necessidade de um select, isso dá para fazer com like no mysql.


Marcos, vc diz uma busca direta em só 1 INPUT?

____________________________

Eu não uso like porém acrescento esta funcionalidade em minhas tabelas com o datatables, aconselho o uso.


Isso funcionou com LIKE, mas o datatables não usei

____________________________

https://www.datatables.net/
Possui uma implementação muito fácil, e adiantando que em breve irá precisar de paginação de resultados o que o datatables já implementa automáticamente, assim como ordenação e outras coisa interessantes como botões de exportação, impressão etc.


Dei uma olhada, realmente é ótimo, eu ainda não conhecia.
Mas me parece bem complexo!
Vou dar uma pesquisada no Youtube para ver se tem alguma vídeo aula.

Obrigado.
marcos andrade22
marcos andra... General de Pijama Registrado
3.6K Mensagens 333 Curtidas
#7 Por marcos andra...
31/10/2020 - 18:55
A implementação básica é bem simples:

<!-- incluir os arquivos no código --->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.css">

<!-- criar a função -->
<script>
$(document).ready( function () {
$('#table_id').DataTable();
} );
</script>
<!-- adicionar o id da tabela -->
<table id="table_id" class="display">
<thead><tr><th>Column 1</th><th>Column 2</th></tr></thead><tbody><tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>

https://datatables.net/manual/installation
Os outros tipos de implementação realmente tem um pouco mais de complexidade, mas isso você também irá ter quando precisar fazer sem datatables.
Romanoo.oo1
Romanoo.oo1 Novo Membro Registrado
21 Mensagens 4 Curtidas
#8 Por Romanoo.oo1
31/10/2020 - 19:02
marcos andrade22 disse:
A implementação básica é bem simples:

<!-- incluir os arquivos no código --->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.css">

<!-- criar a função -->
<script>
$(document).ready( function () {
$('#table_id').DataTable();
} );
</script>
<!-- adicionar o id da tabela -->
<table id="table_id" class="display">
<thead><tr><th>Column 1</th><th>Column 2</th></tr></thead><tbody><tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>

https://datatables.net/manual/installation
Os outros tipos de implementação realmente tem um pouco mais de complexidade, mas isso você também irá ter quando precisar fazer sem datatables.



___________________________

Marcos,

Que legal, vou ter que usar dance.gif nao_quero_nem_ver.png

Valew pela dica!!!

Já implementei no código, agora só falta edição, print abaixo boa.gif


Mas para editar terei que baixar a biblioteca, certo?
Consegui editar, baixei a biblioteca. boa.gif

Anexos

esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#9 Por esquiloesper...
31/10/2020 - 19:39
Romanoo.oo1 disse:
Deu Certo!

Consegui assim alterando a pesquisa sql para LIKE

[php]$resultado = mysqli_query($conn, "SELECT * FROM cadastro WHERE $colSelect LIKE '%".$colinput."%' ");[/php]

É isso mesmo. O Like eu tinha preparado para mostrar depois (foi por isso que pedi pra você 'verificar' rolleyes.png)
Não funcionou de primeira porque no critério do Where você deixou "quebrado" da primeira vez.

Outra coisa: No arquivo PHP você utilizou o método "object" e também o "switch", quando na verdade era para usar apenas um ou outro.
Acerta essas coisas, daí dará tudo certo!
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
Romanoo.oo1
Romanoo.oo1 Novo Membro Registrado
21 Mensagens 4 Curtidas
#10 Por Romanoo.oo1
31/10/2020 - 19:47
esquiloesperto disse:
É isso mesmo. O Like eu tinha preparado para mostrar depois (foi por isso que pedi pra você 'verificar' rolleyes.png)
Não funcionou de primeira porque no critério do Where você deixou "quebrado" da primeira vez.

Outra coisa: No arquivo PHP você utilizou o método "object" e também o "switch", quando na verdade era para usar apenas um ou outro.
Acerta essas coisas, daí dará tudo certo!



Outra coisa: No arquivo PHP você utilizou o método "object" e também o "switch", quando na verdade era para usar apenas um ou outro.
Acerta essas coisas, daí dará tudo certo!



daa.png nem percebi.
Já arrumado

Valew bom_trabalho.gif
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal