Ir para conteúdo
Diego RLS

RESOLVIDO - Autenticação comparando array

Recommended Posts

Olá, estou com uma certa dificuldade e precisava de uma ajuda (coisa simples, eu acho)...

 

É o seguinte tenho uma página HTML e preciso que quando a pessoa for acessar a página apareça um prompt pedindo o ID e depois um outro prompt pedindo a matricula, e então o JavaScript iria comparar se o ID e a Matricula estão presentes no array, caso sim aparece um alert dando "Boas Vindas" e então o HTML é carregado, caso contrário aparece um alert informando que os dados estão incorretos e volta para o prompt pedindo o ID.

Quando eu acesso o HTML os prompts pedindo ID e matricula aparecem normal, mas independentemente das informações que eu insiro (seja dados corretos ou incorretos) não aparece nenhum dos alerts e a página HTML não carrega, pelo o que entendi a parte de verificação não está funcionando.

 

Só para deixar avisado eu sei que este tipo de autenticação por JavaScript não é segura, mas a implementação é apenas didática nada de importante... segue o código.

 

//INFORMAÇÕES SOBRE OS USUÁRIOS CADASTRADOS
// Exemplo : [usuario 0] > ID: abc, Matricula: 123

usuario = new Array();
usuario[0] = ["abc","123"];
usuario[1] = ["xyz","456"];  

do{
  //Informações enviadas pelo Usuario
  id_fornecido = prompt("Informe seu ID:");
  matricula_fornecida = prompt("Informe sua matrícula:");
  
  //A princípio, verificar se o ID existe
  for (id = 0; (id = usuario.length-1); id++) {
    if (usuario === id_fornecido[id][0]) {
      login_valido = true;
      break;
    }
  }
}
  		 
// Até que se provar o contrário, o login e inválido
while((login_valido = false));

if(login_valido === true){
	//Validar mátricula do Usuario
	if(usuario === matricula_fornecida[id][1])
		alert("Bem vindo ",id);
	}else{
      	alert("Dados Invalidos");
  		 }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
21 horas atrás, wanderval disse:

E ai Diego,

 

Fiz algumas correções no seu código, basicamente foi alguns operadores errados, e referencia de posição de array, da uma olhada se era isso que esperava:

 

https://jsbin.com/qekisujudu/edit?js,output

 

Bom dia Wanderval, obrigado pela ajuda cara,

 

Realmente essa é a ideia, só teve um pequeno problema, quando digita o ID correto (abc) e a matricula errada, ele aceita normalmente mesmo tendo no fim do ELSE a variavel login_valido = false, parece que este ELSe está sendo ignorado.

 

Tentei colocar um IF dentro do outro mas não funcionou.

 

//INFORMAÇÕES SOBRE OS USUÁRIOS CADASTRADOS
//Exemplo : [usuario 0] > ID: abc, Matricula: 123

var currentId;
var login_valido = false;
var matricula_fornecida = '';
var usuario = [];

usuario[0] = ["abc","123"];
usuario[1] = ["xyz","456"];

do{
  //Informações enviadas pelo Usuario
  id_fornecido = prompt("Informe seu ID:");
  matricula_fornecida = prompt("Informe sua matrícula:");
  
  //Verificação
  for (var id = 0; id < usuario.length; id++) {
    if (usuario[id][0] === id_fornecido) {
    currentId = id;	
    	if(usuario[currentId][1] === matricula_fornecida){
  		alert("Bem vindo, " + usuario[currentId][0]);
		login_valido = true;
    }else{
    	alert("Dados Invalidos");   
		login_valido = false;
    break;
    }
  }
} 
// Até que se provar o contrário, o login e inválido
while(login_valido === false);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom aparentemente o JSBin não executa o loop como esperado, talvez seja uma especie de segurança mas testei o mesmo código no codepen e o jsfiddle e executou aparentemente como esperado.

 

Seu código estava com erro de fechamento de chaves, melhor começar a usar um editor de código como vscode + Inspect Element, isso vai te ajudar em implementações futuras.

 

link: https://jsfiddle.net/a3qg7wce/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
19 horas atrás, wanderval disse:

Bom aparentemente o JSBin não executa o loop como esperado, talvez seja uma especie de segurança mas testei o mesmo código no codepen e o jsfiddle e executou aparentemente como esperado.

 

Seu código estava com erro de fechamento de chaves, melhor começar a usar um editor de código como vscode + Inspect Element, isso vai te ajudar em implementações futuras.

 

link: https://jsfiddle.net/a3qg7wce/

 

 

Agora deu certo, funcionando exatamente com queria, fiz mais uma mudança para alertar dados invalidos sempre que qualquer um dos dados estiverem errados, antes só aparecia em uma condição (ID correto e Matricula errada).

 

Sobre o editor de código eu uso sim, é que na pressa fui inventar de alterar usando editor de texto do Linux.

 

Mais uma vez muito obrigado pela ajuda Wanderval.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por MasterJ
      nao consigo encontrar o erro neste codigo

       
      <?php  if(isset($_POST['btnLogin'])){   $email = trim($_POST['user_email']);   $upass  = trim($_POST['user_pass']);   $h_upass = sha1($upass);       if ($email == '' OR $upass == '') {       message("Invalid Username and Password!", "error");       redirect("login.php");               } else {     //it creates a new objects of member     $user = new User();     //make use of the static function, and we passed to parameters     $res = $user::userAuthentication($email, $h_upass);     if ($res==true) {         message("You logon as ".$_SESSION['ROLE'].".","success");       if ($_SESSION['ROLE']=='Administrator' || $_SESSION['ROLE']=='Student'){         $_SESSION['ADMIN_USERID'] = $_SESSION['USERID'];         $_SESSION['ADMIN_FULLNAME'] = $_SESSION['FULLNAME'] ;         $_SESSION['ADMIN_USERNAME'] =$_SESSION['USERNAME'];         $_SESSION['ADMIN_ROLE'] = $_SESSION['ROLE'];         unset( $_SESSION['USERID'] );         unset( $_SESSION['FULLNAME'] );         unset( $_SESSION['USERNAME'] );         unset( $_SESSION['PASS'] );         unset( $_SESSION['ROLE'] );          redirect(WEB_ROOT."admin/index.php");       }      }else{       message("Account does not exist! Please contact Administrator.", "error");        redirect(WEB_ROOT."admin/login.php");      }  }  }   ?>   
    • Por gersonab
      há tempos utilizo para cadastrar data no BD a instrução :
      implode('-',array_reverse(explode('/',$data)))
      com isso no input posso colocar 09/02/2019 e no banco de dados grava 2019-02-09 , até ai sem problemas, porém ao atualizar um sistema para pdo, estou com problema no insert dinâmico, onde posso fazer 1 ou mais inserts, da forma abaixo cadastro quantos eu quiser :
      $sql = "INSERT INTO cantos ( id_t, id_c, data, ca, cant, po, des) VALUES (:id_t, :id_c, :data, :ca, :cant, :po, :des)";              $stmt = $pdo->prepare($sql);             foreach($_POST['idp'] as $indice => $valor) {             $stmt->bindParam(':id_t', $_POST['id_tor'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':id_c', $_POST['idp'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':data', $_POST['data'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':ca', $_POST["ca"][$indice], PDO::PARAM_STR);             $stmt->bindParam(':cant', $_POST['cant'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':po', $_POST['po'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':des', $_POST['des'][$indice], PDO::PARAM_STR);                              if ($stmt->execute()){                     echo "Cadastrado com sucesso.";             }
      no entento a data vai no formato do input 09/02/2019.
      caso utilize :
      $stmt->bindParam(':data', implode('-',array_reverse(explode('/',$_POST['data'][$indice]))), PDO::PARAM_STR);
      tenho o erro Strict standards: "Only variables should be passed by reference in "que significa "Apenas as variáveis podem ser passadas por referência"
      qual a melhor forma de se fazer neste caso ?
    • Por WictorP
      Olá, tudo bem? Eu espero que esteja!
       
      Estou com um pequeno problema em uma medida de segurança que estou fazendo, acho que vocês podem me ajudar.
       
      Estou tentando criar uma defesa global de todos os valores obtidos através de formulários, ao qual o usuário irá preencher, ou seja, uma pequena defesa contra SQLInjection.
      Sei que isto está longe de resolver o problema, mas acho que é só o que precisa para um projeto de pequeno porte.
      Para esta segurança eu pego tudo que vem por $_POST e passo na função addslashes e verifico se é uma string. Este método funciona, porém tem um defeito.
      Eu também trabalho com envio de Arrays no formulário, e para que a função addslashes funcione, todas as variáveis passadas pelo $_POST deve ser uma string (basicamente todo conteúdo não array de um formulário pode ser tratado como string, até as que contém só números).
       
      Tentei fazer uma verificação nesta função, que caso seja array, ele não faz essa adesão do addslashes e passa o array cru que será tratado mais pra frente na página que o requisitar, porém, não consigo fazer esta verificação com o is_array(), o IF passa como se fosse outra coisa e trata como se fosse string normal.
       
      Segue o código:

              $formulario = $_POST;         foreach($formulario AS $key => $valor) {             if(is_array($_POST[$key])) {                 $_POST[$key] = $_POST[$key];             }else {                 $_POST[$key] = filter_var(addslashes($_POST[$key]), FILTER_SANITIZE_STRING);             }         }
       
      Espero que possam me dar uma luz referente à isto.
      Grato, Wictor Pamplona.
    • Por maruanbredoff
      Boa tarde pessoal,
      Estou com quebrando a cabeça com uma situação no meu sistema.
      No sistema eu tenho uma tabela tratamento, clientes, dentista e procedimento. 
      Dentro do sistema tenho uma tela onde a pessoa vai cadastrar o tratamento para o paciente e nessa tela a pessoa escolhe quais os procedimento, e qual o dentista que vai realizar.
      O campo idprocedimento é um array pois o mesmo tratamento pode ter varios procedimentos.
       
      O meu problema está em apresentar esses dados do array na tabela. o Select é esse a seguir
       
      SELECT t.idtratamento,t.idprocedimento,c.idcliente,c.nome as cliente,d.iddentista,d.nome as dentista,p.descricao as procedimento,t.idtratamento,t.datainicio,t.obs,t.status_tratamento
      FROM tratamento t
      INNER JOIN clientes c ON t.idcliente = c.idcliente
      INNER JOIN dentista d ON d.iddentista = t.iddentista
      INNER JOIN procedimento p ON p.idprocedimento = t.idprocedimento
      where t.idcliente = 1 and p.idprocedimento in (t.idprocedimento)
       
      Com esse select o retorno é o seguinte:
      idtratamento idprocedimento cliente iddentista dentista procedimento   76 260 Paciente teste 1 Dentista Teste Aparelho extra-bucal 77 31,5,6 Paciente teste 1 Dentista Teste Alveoloplastia   
      Como podem ver, o campo idprocedimento está caindo junto no array, eu queria separar e em vez de 1 linha na tabela aparecesse 3 linhas com esses procedimentos separados. Alguem pode me ajudar?
    • Por sheepziiin
      Boa tarde colegas !
      Estou quebrando a cabeça com um job para tratamento de logradouros. Segue o raciocínio:  
      Tenho uma lista com todos os endereços do estado de São Paulo, onde os mesmos são extraídos da seguinte forma:
       
      Exemplo:
      AL-AFONSO SCHMIDT/CDM:ED. SOPHIS SANTANA_COM PRUMADA/BLC:A-555-AP - Apartamento: 61 A AL-ANAPURUS/EDI:BOULEVARD/BLC:A-777-AP - Apartamento: 131 AL-ARAPANES/EDI:CDOE,6-5ºANDAR-309-AP - Apartamento: 42 AL-ARAPANES/EDI:COND.ED.MOEMA DUPLEX LIFE-1142-AP - Apartamento: 102 AL-ARAPANES/EDI:COND.ED.MOEMA DUPLEX LIFE-1142-AP - Apartamento: 42 AL-ARAPANES/EDI:PARC BRUMENADI-982-AP - Apartamento: 191 AL-BARROS/EDI:PERVAL-186-AP - Apartamento: 1601 AL-BARROS/EDI:PERVAL-186-BL - Blocos: B AP - Apartamento: 1302 AL-CAETANO,S/CDM:ED. GIARDINO_CDOE_1_ANDAR_11 A 13-165-AP - Apartamento: 63 AL-CAETANO,S/EDI:ESPLENDOR-1234-AP - Apartamento: 71 AL-CAETANO,S/EDI:MAGENTA I_CDOE_1_ANDAR_7 A 10-2575-AP - Apartamento: 94 AL-CALCUTA-195-AP - Apartamento: 02 AL-CAMPESTRE-728-CS - Casa: 1 AL-CASA BRANCA/CDM:BRISTOL-851-CJ - Conjunto: 11 AN - Andar: 01 AL-CASA BRANCA/CDM:SAINT SIMON-667-AP - Apartamento: 11
      Notem que os casos "não tem um padrão" (até tem por tipo de residencia). Utilizei inúmeras postagens aqui do fórum e consegui solucionar os casos para residencias (padrão TIPO_LOG;LOG;COMPL;NUM), no entanto as formulas e soluções aqui indicadas por vocês "param" na primeira sequencia numérica, entretanto para a maioria dos casos, o texto continua com letras, números e caracteres.
       
      Segue o padrão final que preciso chegar.
      Exemplo: AL-AFONSO SCHMIDT/CDM:ED. SOPHIS SANTANA_COM PRUMADA/BLC:A-555-AP - Apartamento: 61 A
      Resultado Tratado: AFONSO SCHMIDT 555
       
      Desde de já muito obrigado pelos retornos que certamente virão.
×

Informação importante

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