Ir para conteúdo
Fórum Script Brasil
  • 0

Envios de dados de uma tabela para outra


Ualace

Pergunta

Olá estou com uma dificuldade em algo, seria para um painel de streaming.

Preciso fazer algo no login que seria fazer uma consulta em uma tabela exemplo streamings coluna codigo_cliente pega a informação dessa coluna e adicionar em outra.

Seria mais ou menos assim streamings -> codigo_cliente pegou código exemplo (1) enviar para bloqueios_login -> codigo_cliente

Essa informação coletada é enviada para o banco se houver uma solicitação de login mal sucedida e cada erro ele vai registrar 5 tentativas após essas 5 tentativa será bloqueado acesso.

 

Tenho código pré pronto que está funcionando até ponto exceto a coleta da informação codigo_cliente na tabela streaming.

 

Essa função serve para enviar os dados para o painel do revendedor, onde aparece os clientes bloqueados por erros de acesso.

Porem painel do cliente verifica o codigo_cliente para saber se esse cliente pertence ao mesmo evitar que apareçã uma pancada de ips de bloqueados de outros clientes que não são desse revendedor.

 

Não estou dando conta de fazer se alguém puder ajudar

 

Aqui está o código

 

// Verificar se o formulário de login foi submetido
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $porta = $_POST['porta'];
    $senha = $_POST['senha'];

    // Verificar se o IP já foi bloqueado
    $ip = $_SERVER['REMOTE_ADDR'];
    $verificarBloqueio = $conexao->prepare("SELECT * FROM bloqueios_login WHERE ip = ? AND data >= DATE_SUB(NOW(), INTERVAL 1 HOUR)");
    $verificarBloqueio->bind_param("s", $ip);
    $verificarBloqueio->execute();
    $resultadoBloqueio = $verificarBloqueio->get_result();
    $tentativas = 0;

    if ($resultadoBloqueio->num_rows > 0) {
        // Se o IP já estiver na tabela, atualize o número de tentativas
        $row = $resultadoBloqueio->fetch_assoc();
        $tentativas = $row['tentativas'] + 1;

        // Verificar se excedeu o limite de tentativas
        if ($tentativas >= 6) {
            die("Seu IP foi bloqueado devido a múltiplas tentativas de login malsucedidas. Tente novamente mais tarde.");
        }

        // Atualizar o número de tentativas na tabela a cada erro
        $atualizarTentativas = $conexao->prepare("UPDATE bloqueios_login SET tentativas = ? WHERE ip = ?");
        $atualizarTentativas->bind_param("is", $tentativas, $ip);
        $atualizarTentativas->execute();
    } else {
		
     // Se o IP não estiver na tabela, insira-o como 1 tentativa
        $inserirBloqueio = $conexao->prepare("INSERT INTO bloqueios_login (codigo_cliente, data, ip, navegador, tentativas) VALUES (?, NOW(), ?, ?, 1)");
        $codigoCliente = 1; // Aqui está enviando a informação para o banco como 1 , preciso enviar o que está na tabela codigo_cliente
        $navegador = $_SERVER['HTTP_USER_AGENT'];
        $inserirBloqueio->bind_param("iss", $codigoCliente, $ip, $navegador);
        $inserirBloqueio->execute();
    
	}
	// Obter a porta digitada no formulário
        $porta = $_POST['porta'];

        // Adicionar a porta na coluna codigo_stm coletada do que foi digitado no formulario não há necessidade de busca na tabela
        $adicionarPorta = $conexao->prepare("UPDATE bloqueios_login SET codigo_stm = ? WHERE ip = ?");
        $adicionarPorta->bind_param("ss", $porta, $ip);
        $adicionarPorta->execute(); 
	 
    // Verificar as credenciais do usuário se está correta
    $verificarUsuario = $conexao->prepare("SELECT * FROM streamings WHERE porta = ? AND senha = ?");
    $verificarUsuario->bind_param("ss", $porta, $senha);
    $verificarUsuario->execute();
    $resultadoUsuario = $verificarUsuario->get_result();

    // Se as credenciais estiverem corretas
    if ($resultadoUsuario->num_rows > 0) {
        // Limpar o IP da tabela de bloqueios se o login for bem-sucedido
        $limparBloqueio = $conexao->prepare("DELETE FROM bloqueios_login WHERE ip = ?");
        $limparBloqueio->bind_param("s", $ip);
        $limparBloqueio->execute();

        // Adicionar o valor da "porta" na coluna 'codigo_stm'
        $row = $resultadoUsuario->fetch_assoc();
        $codigo_stm = $row['codigo_stm'];
        echo "Login bem-sucedido! Código STM: $codigo_stm";
    } else {
        echo "Credenciais inválidas. Por favor, tente novamente.";
    }
}

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

O máximo que eu consegui foi bloquear o usuário. Para conseguir isso, eu tive que tirar o campo data da tabela bloqueios_login.

As tabelas ficaram assim:

CREATE TABLE `bloqueios_login` (
  `ip` varchar(20) DEFAULT NULL,
  `tentativas` int DEFAULT NULL,
  `codigo_cliente` int DEFAULT NULL,
  `navegador` varchar(100) DEFAULT NULL,
  `id` int NOT NULL AUTO_INCREMENT,
  `codigo_stm` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

CREATE TABLE `streamings` (
  `id` int NOT NULL AUTO_INCREMENT,
  `porta` varchar(45) DEFAULT NULL,
  `senha` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Na tabela streamings, utilizei um usuário válido assim (id,porta,senha) (2,2,2). No seu código, o cálculo de número de tentativas não estava dando certo, acrescentei a chave do array [0], e utilizei dois arquivos para testar o seu código:

 

arquivo index.php
<form method=post action=verificar.php>
    porta<input name=porta value="1"><br>
    senha<input name=senha value="1"><br>
    <input type=submit>
</form>

arquivo.verificar.php
<?php
$conexao=new PDO("mysql:host=localhost;dbname=irlanda","root","");

// Verificar se o formulário de login foi submetido
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{
    $porta = $_POST['porta'];
    $senha = $_POST['senha'];

    // Verificar se o IP já foi bloqueado
    $ip = $_SERVER['REMOTE_ADDR'];
    $verificarBloqueio = $conexao->prepare("SELECT * FROM bloqueios_login WHERE ip = ?");
    $verificarBloqueio->bindParam(1, $ip,PDO::PARAM_STR);
    $verificarBloqueio->execute();
    $stm=$verificarBloqueio;
    $resultadoBloqueio = $verificarBloqueio->fetchAll(PDO::FETCH_ASSOC);
    if(!isset($tentativas))
    {
        $tentativas=0;
    }

    if ($stm->rowCount() > 0) 
    {   
        // Se o IP já estiver na tabela, atualize o número de tentativas
        $tentativas = $resultadoBloqueio[0]['tentativas'] + 1;

        // Verificar se excedeu o limite de tentativas
        if ($tentativas >= 6) 
        {
            die("Seu IP foi bloqueado devido a múltiplas tentativas de login malsucedidas. Tente novamente mais tarde.");
        }

        // Atualizar o número de tentativas na tabela a cada erro
        $atualizarTentativas = $conexao->prepare("UPDATE bloqueios_login SET tentativas = ? WHERE ip = ?");
        $atualizarTentativas->bindParam(1,$tentativas,PDO::PARAM_INT);
        $atualizarTentativas->bindParam(2,$ip,PDO::PARAM_STR);
        $atualizarTentativas->execute();
    } else {
		
     // Se o IP não estiver na tabela, insira-o como 1 tentativa
        $inserirBloqueio = $conexao->prepare("INSERT INTO bloqueios_login (codigo_cliente, data, ip, navegador, tentativas) VALUES (?, NOW(), ?, ?, 1)");
        $codigoCliente = 1; // Aqui está enviando a informação para o banco como 1 , preciso enviar o que está na tabela codigo_cliente
        $navegador = $_SERVER['HTTP_USER_AGENT'];
        $inserirBloqueio->bindParam(1,$codigoCliente,PDO::PARAM_INT);
        $inserirBloqueio->bindParam(2,$ip,PDO::PARAM_STR);
        $inserirBloqueio->bindParam(3,$navegador,PDO::PARAM_STR);
        $inserirBloqueio->execute();
    
	}
	// Obter a porta digitada no formulário
        $porta = $_POST['porta'];

        // Adicionar a porta na coluna codigo_stm coletada do que foi digitado no formulario não há necessidade de busca na tabela
        $adicionarPorta = $conexao->prepare("UPDATE bloqueios_login SET codigo_stm = ? WHERE ip = ?");
        $adicionarPorta->bindParam(1,$porta,PDO::PARAM_STR);
        $adicionarPorta->bindParam(2,$ip,PDO::PARAM_STR);
        $adicionarPorta->execute(); 
	 
    // Verificar as credenciais do usuário se está correta
    $verificarUsuario = $conexao->prepare("SELECT * FROM streamings WHERE porta = ? AND senha = ?");
    $verificarUsuario->bindParam(1,$porta,PDO::PARAM_STR);
    $verificarUsuario->bindParam(2,$senha,PDO::PARAM_STR);
    $verificarUsuario->execute();
    $stm=$verificarUsuario;
    $resultadoUsuario = $verificarUsuario->fetchAll(PDO::FETCH_OBJ);

    // Se as credenciais estiverem corretas
    if ($stm->rowCount() > 0) {
        // Limpar o IP da tabela de bloqueios se o login for bem-sucedido
        $limparBloqueio = $conexao->prepare("DELETE FROM bloqueios_login WHERE ip = ?");
        $limparBloqueio->bindParam(1, $ip,PDO::PARAM_STR);
        $limparBloqueio->execute();

        // Adicionar o valor da "porta" na coluna 'codigo_stm'
        $row = $resultadoUsuario->fetch_assoc();
        $codigo_stm = $row['codigo_stm'];
        echo "Login bem-sucedido! Código STM: $codigo_stm";
    } else {
        echo "Credenciais inválidas. Por favor, tente novamente. Tentativa n. $tentativas";
        include 'index.php';
    }
}

Como você pode ver usei os métodos nativos do PDO, o que você usa é personalizado.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Frank muito obrigado pelo retorno.

Eu consegui, agora está fazendo o bloqueio corretamente, o codigo do cliente está atualizando corretamente também, código_cliente , porta e ip atualiza sempre que recebe novas informações esses 3 que são importantes por que a conta do revendedor vai identenficar pelo código do cliente se o streaming pertecence a ela.

E a porta caso usuário tenha mais de uma conta atualiza e sempre mantendo o mesmo ip de verificação sempre no IP para atualizar o restante das colunas,caso pegar um codigo_cliente sem revenda o ip bloqueado vem pra mim, estava com difculdade para atualizar tudo em uma unica tabela por que estava gerando vários mais consegui resolver também.

Só a tabela nevagador que está dando trabalho para atualizar quando recebe uma nova informação exemplo usuário trocou de navegador ela não atualiza de forma alguma, estou vendo se dou jeito nela.

Em fim esse bloqueio é só para evitar muitas tentivas forçadas em contas como a porta fica exposta e o login é por ela resolvi ajustar essa questão do bloqueio, sei que vai lotar de ips mais para quebrar isso ajustei para limpar a cada 48horas. 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...