Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

28-06-2010 11:08

Segue código de teclado virtual usando PHP/MySQL para a inserção de senhas:

Crie um banco de dados com o nome teclado_virtual_php_1 e insira a seguinte tabela:

# Banco de Dados : `teclado_virtual_php_1` # -------------------------------------------------------- # # Estrutura da tabela `usuarios` # CREATE TABLE usuarios ( id int(10) NOT NULL auto_increment, usuario varchar(255) NOT NULL default '', senha varchar(255) NOT NULL default '', KEY id (id) ) TYPE=MyISAM; # # Extraindo dados da tabela `usuarios` # INSERT INTO usuarios VALUES (1, 'teste', 'abc909090');

Crie um arquivo chamado configuracao_mysql.php e cole o seguinte código:

<? $db_host = "localhost"; $db_username = "root"; $db_password = ""; $db_name = "teclado_virtual_php_1"; $site_url = "http://localhost/teclado_virtual_php_1"; $base = mysql_connect("localhost","root","") or die(mysql_error()); $connection = mysql_connect($db_host, $db_username, $db_password) or die(mysql_error()); $db = mysql_select_db($db_name, $connection); session_start(); $t = time(); ?>

Crie um arquivo chamado teclado_virtual.php e cole o seguinte código:

<? require_once('configuracao_mysql.php'); // verificando pelo get se a senha é igual à do banco $colname_usuarios = "-1"; if (isset($_GET['display'])) { $colname_usuarios = (get_magic_quotes_gpc()) ? $_GET['display'] : addslashes($_GET['display']); } // fazendo o select na senha recuperada do get mysql_select_db($database_testes); //mysql_select_db($database_testes, $testes); $query_usuarios = sprintf("SELECT * FROM usuarios WHERE senha = '%s'", $colname_usuarios); $usuarios = mysql_query($query_usuarios) or die(mysql_error()); //$usuarios = mysql_query($query_usuarios, $testes) or die(mysql_error()); $row_usuarios = mysql_fetch_assoc($usuarios); $totalRows_usuarios = mysql_num_rows($usuarios); // mantendo os dados digitados no teclado, no display $enviar = $_GET['Submit']; $display = $_GET['display']; $submitaction = $_GET['Submitaction']; $display = $display . $enviar; // verificando se a senha é igual à do banco. $senha=$row_usuarios['senha']; // se for diferente de vazia: if ($submitaction != null) { // e igual à ação de apagar, apaga tudo o que estiver no display if ($submitaction=='Apagar') { $display=""; } // se for igual à ação de entrar, ou logar: elseif ($submitaction=='Entrar') { if ($display==$senha) // verifica se o que está no display é igual à variável $senha, que é igual ao campo senha do banco de dados // se for igual, mostra o nome do usuário, e uma mensagem { if($_GET['display'] != ''){ echo "<center>Olá ".$row_usuarios['usuario']." - Sua senha está correta!<br>Redirecionando... </center>"; $display=""; } } // se for diferente, manda o aviso else { if($_GET['display'] != ''){ echo '<center>Sua senha está incorreta, tente novamente!</center>'; $display=""; } } } } ?><head> <style> .style2 {text-align:center; background:#ffffff; border-width:1; border-color:#000000;font-family: arial; font-size: 11px; color: #000000; font-weight: bold; cursor:hand;} .borda { border-color : #000000; border-style : solid; border-width : 1px; } </style> </head> <!-- aqui tem o formulário do teclado --> <blockquote> <form name="form1" method="get" action=""> <table width="200" height="20" align="center" cellpadding="0" cellspacing="0"> <tr> <td><input name="display" type="password" onKeyPress="return false" value="<? print $display; ?>" size="27"></td> </tr> </table> <table><tr><td height="2"></td></tr></table> <table width="200" align="center" border="0" class="borda"> <tr align="center"><td><table align="center"><tr> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="1"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="2"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="3"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="4"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="5"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="6"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="7"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="8"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="9"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="0"></td> </tr></table></td></tr> <tr align="center"><td><table align="center"><tr> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="q"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="w"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="e"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="r"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="t"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="y"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="u"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="i"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="o"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="p"></td> </tr></table></td></tr> <tr align="center"><td><table align="center"><tr> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="a"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="s"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="d"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="f"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="g"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="h"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="j"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="k"></td> <td width="20" height="20" align="center"><input name="Submit" type="submit" class="style2" value="l"></td> </tr></table></td></tr> <tr align="center"><td><table align="center"><tr> <td align="center"><input name="Submit" type="submit" class="style2" value="z"></td> <td align="center"><input name="Submit" type="submit" class="style2" value="x"></td> <td align="center"><input name="Submit" type="submit" class="style2" value="c"></td> <td align="center"><input name="Submit" type="submit" class="style2" value="v"></td> <td align="center"><input name="Submit" type="submit" class="style2" value="b"></td> <td align="center"><input name="Submit" type="submit" class="style2" value="n"></td> <td align="center"><input name="Submit" type="submit" class="style2" value="m"></td> </tr></table></td></tr> </table> <table width="316" align="center" border="0"> <tr> <td width="50%" align="left"><input name="Submitaction" type="Submit" class="style2" value="Apagar"></td> <td width="50%" align="right"><input name="Submitaction" type="submit" class="style2" value="Entrar"></td> </tr> </table> </form> </blockquote> <?php // libera o mysql da consulta realizada anteriormente, nunca esqueça disso..rs mysql_free_result($usuarios); ?>

Eu adaptei o código a partir do contido no seguinte link: http://www.revistaphp.com.br/artigo.php?id=72. Poderá ser melhorado, inclusive layout e segurança, ficando à disposição para contribuições nesse sentido.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

28-06-2010 12:30

Testei só o html, sem o banco de dados, mas não entendi porque a cada clicar na tecla dá um submit no documento.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

28-06-2010 19:10

Isso eu também não sei, mas é porque sou leigo. Mas teste com o banco de dados. Está funcionando. Eu queria saber se é seguro. Naquele link que passei, após os artigos tem os comentários, e teve um cara que detonou com o script e com quem o postou. Há uma coisa que achei interessante: nos navegadores em que testei, a inserção de dados pelo teclado do computador foi bloqueada. Faça um teste com o bd para vê-lo funcionar. Eu gostaria de saber se o código é seguro.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

28-06-2010 19:29

Não achei seguro, até porque cada vez que é feito um submit, a link, no caso, as senha que estão sendo passadas vão ficando no histórico. O correto era não ter o refresh no documento. O teclado poderia ser igual o que postei no link abaixo

http://www.codigosnaweb.com/forum/Tecla ... 3_319.html

Seria só adaptar nele a conexão com o banco de dados.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

28-06-2010 19:51

Ontem, eu copiei o script de seu teclado e o testei. Mas uma coisa está pegando. O Google colocou um teclado virtual em sua home, que você o acessa ao clicar num ícone (um tecladinho) dentro do campo input. Eu não quero que o teclado fique a todo momento aparente. Há pouco, eu encontrei um código em que há tal ícone, mas fora do input, que me serve (http://www.greywyvern.com/code/javascript/keyboard). Acho que foi em seu site, vi um código em js para bloquear o teclado do computador. Acho que vou usá-lo para bloquear o teclado da máquina e forçar o usuário a usar apenas o teclado virtual para a inserção de senha. O que você acha? Esse negócio de teclado virtual atrapalha a quem quer fazer mau uso do site, ou é apenas para inglês ver?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

28-06-2010 19:55

Hoje em dia tem que ter segurança em tudo, e existe várias formas para isso: captcha, validação, teclado virtual, etc...

Você tem que avaliar a necessidade da proteção e escolher um desses. Só não pode deixar uma área que é importante do site desprotegida.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

28-06-2010 20:05

Coloquei os três itens que você referiu. Eu acessei um site, procurando pelo teclado virtual, em que havia uns comentários, e um cara ridicularizava o teclado virtual. Era um post já antigo, creio que de 2004. Naquela época eles ofereciam menos resistência do que hoje? Ou o teclado virtual é fácil de ser burlado para quem sabe?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

28-06-2010 20:19

Eu acho que alguns sistemas de spam conseguem burlar um captcha, agora, teclado virtual eu acho difícil, até porque ele é usado para comparar a senha digitada com uma gravada. De qualquer forma, é sempre bom fazer uma validação dos dados digitados também antes de comparar ou inserir no banco de dados.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

29-06-2010 16:55

Vou usar o teclado virtual do link que informei atrás, em js. Eu gostaria que no campo em que utilizarei o teclado virtual fosse desabilitado o teclado da máquina. Eu cheguei a ver um código que bloqueava o teclado, não me recordo se neste site, mas acredito que não guardei o link. Tem como fazer o que pretendo?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

29-06-2010 16:59

É só você colocar o readonly no input que já não permite entrada de dados no input pelo teclado.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 09:41

Dei uma pesquisada, mas encontrei várias formas: apenas escrito readonly; readonly="true"; readonly="readonly". Qual a correta?
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 09:52

Eu coloquei readonly="true" no input (não sei se está certo). No Opera e no Safari os dados não são enviados. Apenas nos FF e no IE. Está certa a forma como coloquei?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

30-06-2010 13:47

Vou verificar aqui no Opera.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 13:49

Eu achei algo com jQuery, mas não sei como chamar a função. Posso te passar os links? Geralmente, o que se faz em jQuery é cross browser, em sua maioria.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

30-06-2010 13:53

Instalei o Opera aqui, e funcionou o readonly assim

readonly="readonly"
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 14:17

Eu coloquei assim, também. Não é que não funciona. É que os dados do campo não estão sendo enviados, pois não há a confrontação com os contidos no bd. Está ocorrendo com o Opera e Safari. Está ok com FF e IE. Veja como está meu input:

$Input .= "<input type=\"password\" readonly=\"readonly\" class=\"keyboardInput\" name=\"ps\" value=\"$ValuePassword\">";

Isto class=\"keyboardInput\" coloca um ícone ao lado do campo input para se abrir o teclado virtual.
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 14:23

Desculpe, mas descobri algo. No Opera, e acredito que no Safari também, os dados estão inseridos inversamente. Por exemplo, se insiro 12345, no Opera está sendo inserido 54321. Reitero, isso não está acontecendo no FF e IE. Eu poderia identificar o navegador e contornar o problema. Identificar o navegador eu já sei. Como eu poderia fazer os dados serem inseridos corretamente: 12345 ao invés de 54321?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

30-06-2010 14:25

* Obs.: To testando aqui no Opera e não está invertendo o valor do input.

Eu testei aqui no Opera, um script de envio de dados, e mostrou normalmente.

<?php echo $_POST['valor']; ?> <form action="teste.php" method="post"> <input type="text" name="valor" value="abc" readyonly="readonly"> <input type="submit"> </form>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 14:31

O problema é a inversão na entrada dos dados pelo teclado virtual nos navegadores Opera e Safari (testei no Safari, também). Se digito 12345 entra como 54321 (mas somente nesses dois navegadores). Como poderia fazer os dados entrarem corretamente conforme digitados? Aí eu identificaria o navegador, e faria a entrada de acordo com ele. A inversão está se dando no Opera e Safari por causa do teclado virtual.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

30-06-2010 14:39

Para identificar o navegador usando o PHP
http://techpatterns.com/downloads/php_b ... ection.php

Para inverter o valor da string
echo strrev("54321");
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 14:44

Vi, também, uma função chamada Sort (PHP), mas não sei usar com o input. Como uso strrev("54321"); com o input?
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 14:53

Estaria certo isto?
$PostPassword = strrev($_POST[ps]);

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

30-06-2010 16:04

Isso mesmo, você vai pegar o valor recebido quando o navegador for o desejado, fazer o tratamento, tipo

$valor = strrev($_POST['valor']);

E usar como precisa.

Eu nunca vi esse problema do navegador inverter o valor :think:

Vê se não é o seu navegador "sem atualização" ou se não tem alguma função "PHP ou JS" fazendo isso ai.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1273
Sexo: Masculino

teclado virtual com php-mysql

30-06-2010 16:34

Como você disse, eu acho que pode ter algo fazendo a inversão no código javascript do teclado virtual, que está dando problema no Opera e Safari (estou testando os códigos no FF, IE, Opera e Safari. Tentei instalar o Chrome e não consegui e deixei de lado). Estou identificando o navegador, e usando $valor = strrev($_POST['valor']); para o Opera e Safari, fazendo uma jogadinha com if, elseif e else. Está funcionando ok. Todos os campos input de acesso à área restrita deverão utilizar o teclado virtual, e não apenas o password. Inclusive o login e o captcha. Apesar de usar $valor = strrev($_POST['valor']); (não sei se está certo, mas isso funcionará após o submit), a inserção dos dados nos navegadores ainda é mostrada de forma invertida quando da digitação. Daí eu fiz um teste, acredito que deu certo, e se deu penso ter aumentado um pouco a segurança: os campos input referentes ao nome do usuário e ao captcha, que eram do tipo text, transformei-os em password. Assim, quando você preenche tais campos, ao invés dos valores digitados aparece o asterisco ou uma bolinha, dependendo do navegador. E está funcionando belezinha. Apesar de aparentemente haver dado certo, haveria algo com que se possa "desinverter" os valores conforme eles são digitados.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

teclado virtual com php-mysql

30-06-2010 18:28

Eu vi o script que acho que está usando http://www.greywyvern.com/code/javascript/keyboard, e ele tem bastante coisa, teria que estudar cada arquivo usado para verificar.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado