Jump to content

Matheus Tavares

Moderadores
  • Content count

    1844
  • Joined

  • Last visited

  • Days Won

    32

Matheus Tavares last won the day on June 30 2018

Matheus Tavares had the most liked content!

Community Reputation

167 Muito Bom

About Matheus Tavares

  • Rank
    The Obstacle Is The Way • Ego Is The Enemy

Contato

Recent Profile Visitors

4810300 profile views
  1. Matheus Tavares

    impedir cadastro duplicado

    A coluna nome deve possuir, lá no seu banco de dados, um índice UNIQUE, exigindo assim que os dados da coluna sejam únicos. Você pode criar o índice na hora de criar a tabela (CREATE TABLE) ou adicionar ele depois com ALTER TABLE. Veja exemplos: https://www.w3schools.com/sql/sql_unique.asp A correta modelagem do banco é essencial (como dito acima), mas se quiser prover uma camada adicional de verificação e exibição de erros a lógica seria essa: 1 - Faça um SELECT com WHERE nome = $nome_desejado. 2 - Se encontrar o registro no banco, exiba um erro e interrompa, pois já existe. 3 - Se não encontrou, prossiga normalmente com o INSERT.
  2. Matheus Tavares

    listar dados com seis caracteres pra cima

    Olá @Biel.. Basta você filtrar sua consulta. Seria algo nesse sentido: ... WHERE LENGTH( roupas ) >= 6
  3. Matheus Tavares

    Erro ao migrar código de php 5.6 para pdo

    Show de bola, fico feliz que tenha dado certo. =D
  4. Matheus Tavares

    Colocar botão flutuante no lado direito.

    Olá! Teste assim: #BtnWrapper { position: fixed; /* Posicionamento absoluto da div na viewport */ right: 15px; /* Coloca à direita, e então dá 15px de margem */ width: 70px; /* Não precisamos de um Wrapper maior do que 70px */ height: 100%; /* Altura total para centralizarmos verticalmente */ display: flex; /* Ativamos o display flex para alinhamento */ align-items: center; /* Centro na vertical */ justify-content: right; /* Direita na horizontal */ } #Btn { border-radius: 10%; /* Arredondamos as bordas */ transform: rotate(90deg); /* Rotacionamos 90 graus */ height: 2rem; /* Altura */ border: 2px solid #999; /* Borda */ background: #ccc; /* Bg */ } <div id="BtnWrapper"> <button id="Btn">Suporte</button> </div>
  5. Matheus Tavares

    Erro ao migrar código de php 5.6 para pdo

    Então @Marcones Borges, o primeiro ponto é que você esqueceu dos parâmetros da função nessa nova versão: $retorna = function ( $igreja_nome=null, $id=null ) use ( $conexao ) O segundo ponto é que nesse exemplo você teria a possibilidade de fazer um loop OU retornar um único registro se informar o $id na função, e por conta dessa flexibilidade o uso do conceito de $qtd fica um pouco mais complicado. Diante do modelo de função que você postou, eu iria sugerir usar o fetchAll no lugar, como expliquei no meu post anterior. O fetchAll não lida bem quando você precisa recuperar MUITOS registros (pois ele armazena todos em memória ao invés de utilizar ponteiros para nevegar de um para o outro como nos outros casos), mas de todos os métodos ele é o mais prático. E por fim, não há necessidade de você formatar a string para JSON na mão, pois o PHP faz isso para você. Não pretendia fazer a função completa novamente, pois acredito que isso atrapalha o processo de aprendizado, mas são poucas linhas de código, então vamos lá: $retorna = function ( $igreja_nome = NULL, $id = NULL ) use ( $conexao ) { $id = (int)$id; // Como é só o celular que você precisa, limitamos a consulta // Para exibir o "Não encontrado", fiz um pequeno IF no select // Esse IF poderia ser feito via PHP, mas aqui parece ser mais fácil $sql = 'SELECT IF( `celular`, `celular`, "Nao encontrado" ) `celular` FROM membros'; // Não precisa do != null. $id é um inteiro e quando aplicado em um IF, 0=false, resto=true if ( $id ) $sql .= " WHERE `id` = {$id};"; $result = $conexao->query($sql); return json_encode( $result->fetchAll( PDO::FETCH_ASSOC ) ); }; // Não esqueça: Ao contrário de uma function normal, // nessa aqui você PRECISA colocar o ponto-e-vírgula // Isso pq essa está associada a uma variável, // e no final de todas as vars vem o ponto-e-vírgula. Outro detalhe é que $igreja_nome não está sendo utilizada na função. Alguns ajustes ainda podem ser feitos, mas a base da função seria essa aí.
  6. Matheus Tavares

    Proteger código fonte contra cópias.

    Olá @4Unknow. O que você deve buscar é ofuscar o JS para ficar como nesse exemplo aqui: https://forum.imasters.com.br/topic/587904-desofuscar-javascript-para-jogo/ É bem simples, existem ferramentas que você roda na sua própria máquina ou até direto no navegador. O Google tinha uma API para fazer isso também. O HTML/CSS você não consegue ofuscar, mas o JS com certeza, e isso dificulta muito para fazer uma engenharia reversa no código.
  7. Matheus Tavares

    Erro ao migrar código de php 5.6 para pdo

    Olá @Marcones Borges. Essa linha você precisa trocar para: while( $dados = $result->fetch(PDO::FETCH_ASSOC) ) Já para a contagem de registros, geralmente iriam te recomendar usar fetchAll e contar os registros usando PHP com count() ou sizeof(), desse jeito: $rows = $stmt->fetchAll(); $num_rows = count($rows); Outra opção (talvez melhor) seria fazer uma consulta ao banco apenas para recuperar a quantidade de itens: $numRows = $conn->query("SELECT COUNT(*) FROM tabela")->fetchColumn(); echo $numRows; Mas eu lhe dou uma terceira opção, que considero melhor: 1 - Antes do loop registramos a quantidade de itens já processados, no caso 0: $qtd = 0; 2 - Em cada iteração do loop, incrementamos 1 a essa variável: // dentro do loop: ++$qtd; Depois, verificamos se $qtd ainda é 0, pois isso significaria que o conjunto obtido pela consulta era vazio: if ( !$qtd ) { echo 'Nenhum registro encontrado.'; } Outro problema é que antes a conexão ao mysql era comumente utilizada de forma global como no seu código antigo, onde você chamava a função mysql_query. Perceba que com o PDO você precisa da variável $con, que você criou e que contém a conexão com o banco. Então precisamos passar a variável de conexão para dentro da função, uma vez que funções possuem um contexto fechado e desconhecem variáveis externas. Um exemplo disso seria inserindo o parâmetro na declaração da função. Seria assim: function montaSelect( $con ) { ... } // Agora chamamos: montaSelect( $con ); Mas observe que sempre que quisermos chamar a função montaSelect agora devemos enviar a variável pra dentro da função. Meio chato, né? Nesse caso podemos utilizar funções anônimas e explicitar o conhecimento global da conexão ao PDO. Ficaria assim: $montaSelect = function () use ( $con ) { ... } // Agora chamamos: $montaSelect(); Isso tudo desconsiderando orientação a objetos, que tornaria tudo mais profissional. Mas para um uso comum, rápido e prático deve servir :) Reunindo tudo, ficaria assim: $montaSelect = function () use ( $con ) { $sql = "SELECT * FROM membros"; $result = $con->query($sql); $qtd = 0; $opt = ''; while( $dados = $result->fetch( \PDO::FETCH_ASSOC ) ) { ++$qtd; $opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>'; } if ( !$qtd ) { $opt = '<option value="0">Nenhum Membro cadastrado</option>'; } return $opt; }; echo $montaSelect();
  8. Matheus Tavares

    Duvida sobre estrutura de return function

    Ops... me dei conta após postar que eu não respondi inteiramente sua pergunta. Perdoe minha falta de atenção. Ao invés de editar o post anterior, vou complementar: o ponto principal da sua dúvida deve estar girando em torno do retorno de uma função, mas não é tão difícil quanto parece. Imagine uma função qualquer, como a do meu exemplo acima. Você chama ela e ela geralmente retorna algum valor primitivo ou objeto. No caso a função debounce, que é muito utilizada no JS, junto com a throttle, com a implementação que você postou faz um setup e retorna uma função para ser a substituta da sua função original. O que quero dizer é que quando você chama a debounce, você envia a função que você quer aplicar o algoritmo de "atraso" da debounce junto à quantidade de tempo desejada e a função lhe retorna a nova função que você deve passar a chamar, ou seja, uma função "infectada". Como diria Linus, "Talk is cheap, show me the code". Então vamos à prática com um exemplo bobo, mas que deve servir: // Funcao original function numAleatorio( min, max ) { return parseInt( Math.random() * ( max - min ) + min ); } // Essa funcao pega uma função genérica que retorne um inteiro e soma 10 ao seu resultado // Simples, bobo, mas eficaz e reutilizável function adiciona10AoRetorno( umaFuncao ) { return function( ...args ) { return umaFuncao( ...args ) + 10; } } // Agora criamos uma função infectada: // Perceba que não executamos a função numAleatorio, senão teríamos mandado numAleatorio() // Enviamos apenas a referência dela, para ser utilizada posteriormente const aleatorioMais10 = adiciona10AoRetorno( numAleatorio ); // Agora chamamos sempre que quiser e o número sempre será MODIFICADO com a soma por 10: // Nesse exemplo enviamos minimo como 50 e maximo como 60, // mas o número retornado sempre fica entre 60 e 70 console.log( aleatorioMais10( 50, 60 ) ); No caso da debounce, você envia a função e depois fica com uma "debouncedMinhaFuncao", que é a nova função, infectada com o comportamento provido por debounce. Espero ter ajudado :)
  9. Matheus Tavares

    Duvida sobre estrutura de return function

    Olá! Isso chama-se Rest Parameters e serve para agrupar (em um array) um conjunto indeterminado e indefinido de parâmetros em uma variável para ser utilizado dentro da função. Um exemplo bem simples: function teste( ...args ) { console.log( args ); } // Chamamos a função enviando alguns parâmetros de teste teste( 'string', 2, 3.5, 'outra string' ); // Retorno: Array(4) [ "string", 2, 3.5, "outra string" ]
  10. Matheus Tavares

    Comparar dois textos e pontuar erros

    Olá @JeffSalles, seja bem-vindo. Hoje é o seu dia de sorte! O PHP já possui a função que você quer implementar :) Chama-se levenshtein(). Veja como é simples usar ela: <?php $strOriginal = 'Apenas um teste'; $strDigitada = 'Axenas un test'; $qtdChars = strlen( $strOriginal ); $diferencas = levenshtein( $strOriginal, $strDigitada ); printf( "Diferenças: %d \nPercentual de acertos: %.2f%% \nPontuação: %.2f", $diferencas, ( ( $qtdChars - $diferencas ) / $qtdChars ) * 100, $diferencas * .05 ); Resultado: Diferenças: 3 Percentual de acertos: 80.00% Pontuação: 0.15
  11. Matheus Tavares

    mysqli_connect

    Olá @Biel.. Desculpe, mas isso não faz sentido. Você não pode incluir um arquivo PHP de um servidor externo, e mesmo que mexesse no PHP.INI e bolasse alguma gambiarra habilitando o já obsoleto e inseguro allow_url_include, não impediria de o arquivo que inclui o php externo manipulá-lo de alguma forma (ou vice-versa). O mais correto e alinhado a boas práticas seria você configurar no banco de dados um usuário com acesso limitado, liberando apenas os recursos que você deseja, como a leitura dos dados por exemplo. Veja: https://docs.cluvio.com/hc/en-us/articles/115000968069-Creating-a-read-only-user-in-the-database
  12. Matheus Tavares

    substituir FILTER_SANITIZE_STRING

    Olá @old-dev, seja bem-vindo. Depende inteiramente do propósito da sanitização que você busca promover no input. Existe esse leque de opções: https://www.php.net/manual/en/filter.filters.sanitize.php Para manter o uso do filter_input_array, você poderia utilizar a constante FILTER_SANITIZE_FULL_SPECIAL_CHARS, que é o que mais se aproxima do já obsoleto FILTER_SANITIZE_STRING e ajuda a proteger contra XSS, Mysql Injection e outros abusos. Outras opções seriam as funções htmlentities() e htmlspecialchars(). Sugiro ler esses materiais para entender melhor sobre eles: https://www.php.net/manual/pt_BR/filter.filters.sanitize.php https://www.php.net/manual/pt_BR/function.htmlentities https://www.php.net/manual/pt_BR/function.htmlspecialchars.php Esse material também é interessante: https://forum.imasters.com.br/topic/563187-resolvido-sql-inject-quando-não-dar-para-impedir/
  13. Matheus Tavares

    Acessar imagem de Câmera IP (JavaScript)

    Olá, seja bem-vindo! Segundo esse artigo o suporte a credenciais em URLs de subrecursos foi desativado desde o Chrome 59 (estamos na versão 99 nesse momento). Você precisa ver se encontra dentro do seu servidor de Câmera IP uma forma alternativa para fazer a autenticação. Exemplo: http://192.168.15.119 /mjpg/video.mjpg?user=root&pwd=pass
  14. Matheus Tavares

    Linguagem plataforma R&S

    Olá amigo, seja bem-vindo. O HTML e CSS é um excelente pontapé inicial, mas para fazer um sistema como o descrito no seu post você precisa aprender uma linguagem de programação para o back-end, que é onde a lógica e dados da sua aplicação trabalhariam. Você teria algumas opções como PHP, Node.js, Python, C#, Java, por exemplo. MInha sugestão é começar pelo PHP pelo vasto mercado de trabalho e conteúdo de estudos na internet, ou seja, popularidade da linguagem em geral. Você também vai precisar aprender um banco de dados, mas isso é bem tranquilo e caminha junto com a linguagem de programação. Recomendo o MariaDb/MySQL. Comece por tutoriais/cursos da linguagem em si e depois tente desenvolver pequenas aplicações para desafiar e cimentar seus conhecimentos.
  15. Matheus Tavares

    mysqli_connect não conecta

    @Biel., tente utilizar localhost ao invés do IP externo da máquina. Existem configurações que podem impedir a conexão pelo IP externo por segurança e uma vez que seu código está rodando na mesma máquina que o banco de dados é o mesmo princípio de você testar na sua máquina de desenvolvimento, onde você utiliza "localhost".
×

Important Information

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