Ir para conteúdo

POWERED BY:

Matheus Tavares

Moderadores
  • Total de itens

    1865
  • Registro em

  • Última visita

  • Dias vencidos

    32

Reputação

167 Muito Bom

Sobre Matheus Tavares

  • Classificação
    patodegravata.com

Contato

Últimos Visitantes

4813476 visualizações
  1. Matheus Tavares

    PHP+Codeigniter - Teclas para Salvar (atalho)

    Olá Cesar. A forma mais simples seria criar uma função salvar() e chamá-la quando você precisar. Assim: function salvar() { // Aqui você faz a rotina para salvar. Fetch API pode ser útil } Um usuário já implementou um ótimo exemplo da função salvar nesse tópico: https://forum.imasters.com.br/topic/589169-php-tecla-de-atalhos-para-salvar/ Agora você cria dois observadores (por exemplo) que irão chamar o salvar(). Um para o Enter e outro para o Ctrl+S: Observador 1 (Enter): document.addEventListener( 'keydown', function( evt ) { if ( evt.key !== 'Enter' ) return;// Não é Enter, portanto paramos aqui evt.preventDefault(); salvar();// Pressionado Enter. Vamos salvar... } ); Observador 2 (Ctrl+S): document.addEventListener( 'keydown', evt => { if ( !evt.ctrlKey || evt.key !== 's' ) return;// Não é Ctrl+S, portanto interrompemos o script evt.preventDefault(); salvar();// Pressionado Ctrl+S. Vamos salvar... } ); Quanto Enter ou Ctrl+S forem pressionados, ambos irão chamar a função salvar. Você poderia escrever tudo em um único observador, mas isso não seria uma boa prática. É melhor dividirmos as responsabilidades e cada observador executar uma tarefa.
  2. Matheus Tavares

    PHP+Codeigniter - Teclas para Salvar (atalho)

    Olá. Tudo joia? Você tem duas opções: 1 - Escutar o evento do keydown, como você já fez anteriormente, mas dessa vez para a tecla Enter. Caso seja pressionada, você impede o comportamento padrão do navegador de enviar o formulário. Dessa forma o usuário ainda conseguiria enviar o form através do botão. document.addEventListener( 'keydown', function( evt ) { if ( evt.key !== 'Enter' ) return;// Não é Enter, portanto paramos aqui evt.preventDefault(); // O navegador já foi interrompido. Aqui você pode fazer alguma coisa se quiser (por ex salvar) } ); 2 - Caso você não queira enviar o form de jeito nenhum, nem através do botão submit, ao invés de observar a tecla Enter, você deve observar a submissão do form para impedir o navegador. Assim: // Observe que você precisa adicionar id="MeuForm" ao seu <form> document.getElementById( 'MeuForm' ).addEventListener( 'submit', function( evt ) { evt.preventDefault(); // O navegador já foi interrompido. Aqui você pode fazer alguma coisa se quiser (por ex salvar) } ); Apenas mais uma dica. Seu código possui essa linha: if (e.keyCode == 83){ //Teclas= CTRL+S keyCode é uma propriedade obsoleta e não deveria ser utilizada. Veja: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode Além disso você está verificando apenas se o keyCode bate com "83". Isso significa que ao pressionar "S" sem o ctrl, o if permite o prosseguimento do seu script. Você poderia mudar para esse padrão: document.addEventListener( 'keydown', evt => { if ( !evt.ctrlKey || evt.key !== 's' ) return;// Não é Ctrl+S, portanto interrompemos o script evt.preventDefault(); console.log( 'O usuário pressionou CTRL+S. Agora faço o que preciso fazer...' ); } ); Observe que ao invés de verificar se "É UM S", eu verifico se NÃO É UM CTRL+S, e caso NÃO SEJA eu interrompo o script. Isso se chama early return e melhora a legibilidade do código, pois agora você pode retirar um nível de indentação de todo esse bloco e retirar essa linha também: }//Fim keyCode Espero ter ajudado :)
  3. Matheus Tavares

    Tem como JS executar/chamar um programa externo?

    Olá. Se você estiver no Node.js (executando JS no desktop) sim, é possível. Pra isso você utilizaria Child process. Exemplo: import { spawn } from 'node:child_process'; spawn( 'C:\\windows\\notepad.exe', [ 'C:/Users/SEU_USUARIO/Documents/seu_arquivo_txt.txt' ] ); Não estou no Windows pra testar, mas acho que seria isso. A documentação cita mais exemplos e tem detalhes sobre o funcionamento do spawn: https://nodejs.org/api/child_process.html#child_processspawncommand-args-options Caso você esteja falando de JS no navegador, então não é possível executar um exe via JS por questões de segurança.
  4. Matheus Tavares

    [Resolvido] Alterar rota php com JQuey ou javaScript

    Show. Essa é a ideia :)
  5. Matheus Tavares

    [Resolvido] Alterar rota php com JQuey ou javaScript

    Exatamente. Não tem como apenas alterar o parâmetro utilizando o JS, pois o href foi definido no servidor, pelo PHP, com a sua função route(). São momentos de execução diferentes.
  6. Matheus Tavares

    [Resolvido] Alterar rota php com JQuey ou javaScript

    Olá. O índice "[ 1 ]" que você está informando na função route pertence ao PHP e não ao JS, e portanto não pode ser influenciado pelo clique do usuário, ao menos que você utilize outro meio para alterar o atributo href (via JS). Veja: https://forum.imasters.com.br/topic/588408-como-pegar-conteudo-de-uma-variavel-javascript-e-passar-pra-uma-variavel-php/
  7. Matheus Tavares

    como pegar conteudo de uma variavel javascript e passar pra uma variavel php

    Apenas complementando o que o Omar já explicou: Existe um processo de execução dos serviços: 1 - O usuário faz a requisição. 2 - Seu servidor a recebe e chama o programa (PHP) responsável pelo processamento dela. 2 - O PHP faz o que precisa ser feito e responde com o conteúdo (HTML/JS/CSS crús) que servirá para que o navegador renderize o que você instruiu. Você pode nessa etapa inserir uma variável do PHP, assim por exemplo: var id = parseInt( <?php echo $id ?> ); Pois após o PHP processar e responder, o que chega ao navegador é isso: var id = parseInt( 5 );// se $id fosse 5... Por isso código PHP é inacessível ao usuário, pois ele é executado dentro da máquina que está servindo a aplicação (servidor). Entenda que não tem como eu executar PHP novamente após a interação do usuário, ao menos que eu mande OUTRA (uma segunda) requisição em background (sem que o usuário perceba) utilizando JS. A esse tipo de requisição em background damos o nome de AJAX: https://developer.mozilla.org/pt-BR/docs/Web/Guide/AJAX Resumindo: PHP roda no servidor, HTML/CSS/JS roda no navegador. São camadas e momentos totalmente diferentes. Sacou?
  8. Matheus Tavares

    como pegar conteudo de uma variavel javascript e passar pra uma variavel php

    O que você está tentando fazer exige AJAX, pois o ID do produto será definido pelo usuário utilizando o select, mas os produtos estão na sua aplicação/banco. Para isso você pode usar: 1 - Fetch, nativo do navegador: https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch 2 - ou, se estiver usando jQuery, $.get: https://api.jquery.com/jquery.get/ Você apenas precisa criar um endereço na sua aplicação que receba um ID e retorne o valor. (Exemplo: example.com/valor-produto.php?id=32). Daí com AJAX (JS) você busca o valor informando o ID em resposta ao evento change do seu select.
  9. Matheus Tavares

    [Resolvido] quebra de linha do php para o javascript

    @joao b silva, \n é o caractere que representa a quebra de linha. Basta inseri-lo dentro de sua string, assim: <?php for ($iFor = 0; $iFor <= count($Estrutura)-1; $iFor++): echo "var ".$Estrutura[$iFor]['VAR1']." = button.getAttribute('data-bs-".$Estrutura[$iFor]['CAMPO']."'); \n"; endfor; ?> E dá pra simplificar um pouquinho o código, dessa forma: <?php foreach ( $Estrutura as $campo ) printf( "var %s = button.getAttribute( 'data-bs-%s' );\n", $campo[ 'VAR1' ], $campo[ 'CAMPO' ], ); Daí se $Estrutura tiver esse conteúdo, por exemplo: <?php $Estrutura = [ [ 'VAR1' => 'teste', 'CAMPO' => 'meu-campo' ], [ 'VAR1' => 'minhaVar', 'CAMPO' => 'meu-outro-campo' ], ]; Teremos a seguinte saída: var teste = button.getAttribute( 'data-bs-meu-campo' ); var minhaVar = button.getAttribute( 'data-bs-meu-outro-campo' ); ==>> https://3v4l.org/EObSi#v8.2.1
  10. Matheus Tavares

    Criptografar senhas em bd antigo

    Olá. Você não deveria poder reverter o hash da senha. Se você puder, isso significa que os dados não estão seguros o suficiente. 1 - Faça o backup de tudo para não perder dados (e de preferência criptografe o arquivo de backup com GPG ou similar). 2 - Substitua a senha de todos os usuários no banco pelo hash baseado no algoritmo que você vá usar. Sugiro bcrypt (não use md5, sha128, sha512 e variantes deles): https://www.php.net/manual/pt_BR/function.password-hash.php 3 - Passe a utilizar o algoritmo para gerar o hash no cadastro e o algoritmo de comparação na hora de fazer o login: https://www.php.net/manual/pt_BR/function.password-verify.php 4 - Como passo adicional de segurança, seria interessante invalidar as senhas dos usuários antigos e enviar um e-mail para redefinir a senha e impedindo o cadastro da mesma senha utilizada anteriormente. Opcional, mas interessante. Você literalmente só precisa das duas funções que citei acima e todos os usuários passarão a ter a senha armazenada de forma segura no seu sistema (isso ainda não significa que todo o sistema está seguro, estamos falando apenas de uma minúscula fração das preocupações).
  11. Matheus Tavares

    [Resolvido] quebra de linha do php para o javascript

    Hehe, vamos acalmar os ânimos, pessoal. @Frank K Hosaka, não acho que o @Omar~ tenha sido hostil com você, meu amigo, ele apenas explicou que você pode utilizar as aspas duplas no atributo se escapá-las. Acredito que seja construtivo, mas por vezes as palavras podem não soar amistosas, uma vez que é o nosso único recurso nesse recinto. Já aconteceu muito comigo por aqui também :) Eu particularmente faria a sugestão da concatenação, pois não gosto de escapar as aspas (na minha opinião fica um pouco bagunçado), mas isso é totalmente de gosto. <?php echo '<input type="' . $type . '" />'; Outra possibilidade seria utilizar Heredoc: https://www.php.net/manual/pt_BR/language.types.string.php#language.types.string.syntax.heredoc O bom do Heredoc é que potencialmente poderia resolver também a questão do autor do tópico, @joao b silva, pois ela preserva as quebras de linha. Veja esse exemplo do manual: <?php // Sem indentação echo <<<END a b c \n END; // 4 espaços de indentação echo <<<END a b c END; Saída: a b c a b c (embora eu ainda faria como o Omar fez: aspas duplas e \n para representar o caractere de quebra de linha) E Frank, sua forma de escrever o atributo sem aspas na verdade está correta. Antigamente (HTML 4 pra trás) a única forma correta era com aspas duplas (até onde eu me lembre pelo menos), mas no HTML moderno (a.k.a HTML 5), você pode: 1 - Escrever valores de atributos sem aspas, desde que não contenham espaços. 2 - Escrever valores de atributos com aspas duplas ou aspas simples. Fonte: https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 Por convenção, no entanto, geralmente adotamos as aspas duplas, mas isso é meramente uma questão de convenção e costumes. Um feliz 2023 pra todos vocês! =]
  12. Matheus Tavares

    Dois arquivos com a mesma sintaxe mas só um funciona - Erro 500

    Erro 500 é um erro genérico respondido pelo servidor web. Como você instalou seu ambiente de desenvolvimento? Para não exibir os erros do PHP de forma apropriada, me parece estar mal configurado. Coloque isso na primeira linha do seu arquivo e veja se após executá-lo um arquivo de log é criado na pasta do seu projeto: error_reporting(E_ALL); ini_set('ignore_repeated_errors', TRUE); ini_set('display_errors', TRUE); ini_set('log_errors', TRUE); ini_set('error_log', 'errors.log'); Se puder alterar essas diretivas diretamente no PHP.INI, seria melhor. Se o trecho acima fizer efeito no seu servidor, você deverá ter um arquivo errors.log criado após executar seu código. Minha sugestão: 1 - Para o futuro, coloque na sua lista de estudos o Docker. Vai lhe permitir um melhor gerenciamento do seu ambiente. Para o momento, supondo que você esteja no Windows, sugiro que utilize o PHP/Mysql/Apache através de instaladores práticos como o xampp ou WampServer. Eles costumam trazer uma configuração mais pronta e de fácil manuseio. 2 - Não relacionado com o tópico, mas da forma como sua consulta está escrita no momento, está vulnerável a SQL injection. Recomendo que pesquise sobre prepared statements. É a forma correta de enviar instruções ao banco. Veja: https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection
  13. Matheus Tavares

    Implementação reCaptcha verificar PHP

    Olá Artur, tudo bem? Seja bem-vindo! A aprovação dos posts só é necessária enquanto você possuir menos de 5 posts aprovados. Nesse momento você já possui 3. Essa foi uma medida que a administração do fórum aplicou após uma série de ataques de spam que o fórum sofreu alguns anos atrás. Infelizmente a aprovação é manual e às vezes pode demorar algumas horas, mas logo você já entra para a whitelist e não precisa mais passar por isso. Sobre a sua dúvida, encontrei esse conteúdo que deve lhe ajudar: https://www.youtube.com/watch?v=kG_3LZ2OgBI Abraço!
  14. Matheus Tavares

    Função genérica para atualizar chave em JSON duplicada usando o PHP

    Certo, acho que agora entendi melhor, mas infelizmente acredito que essa necessidade seja oriunda de um modelo de dados que poderia ser otimizado no futuro. Dito isso, elaborei uma pequena solução que espero que lhe ajude. Veja: 1 - Primeiro pegamos o caminho até o subarray desejado: function getSubArrayPath( $array, $wantedKey ) { $mode = RecursiveIteratorIterator::SELF_FIRST; $iterator = new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ), $mode ); foreach ( $iterator as $key => $value ) if ( $wantedKey === $key ) { $keys[] = $key; for ( $i = $iterator->getDepth()-1; $i >= 0 ; --$i ) { $keys[] = $iterator->getSubIterator( $i )->key(); } return $keys; } return []; } Essa função, que faz uso das classes nativas RecursiveIteratorIterator e RecursiveArrayIterator tem a simples tarefa de receber um array (como o que o json_decode nos entregou) e dizer qual o caminho deve ser feito para chegarmos até a chave desejada (no caso PRODUCTION). Ela deve se comportar da seguinte maneira: $path = getSubArrayPath( $array, $key ); Retorna isso: Array ( [0] => PRODUCTION [1] => CREDITOR ) 2 - Agora que temos o caminho dinâmico que estava enraizado na nossa árvore de dados, podemos encontrar a referência do subarray que queremos manipular. Para isso criamos a seguinte função: function &getSubArrayRef( &$array, $key ) { $path = getSubArrayPath( $array, $key ); $ref =& $array; while ( $node = array_pop( $path ) ) $ref =& $ref[ $node ]; return $ref; } Essa função é simples: enviamos os dados e dizemos a chave que ela deve encontrar recursivamente. Ela vai internamente chamar a "getSubArrayPath()" para determinar o caminho e então retornar a referência do subarray que desejamos. Se reunirmos tudo teríamos esse código: <?php $json = '{"CREDITOR":{"TAX":{"TAC":0.7},"ENABLE":"true","PRODUCTION":{"email":"email@dominio.com","senha":"12457895","BASE_URL":"https://domino.com"},"HOMOLOGATION":{"email":"email@dominio.com","senha":"12457895","BASE_URL":"https://domino.com"},"TARGET_VALUES":5000000}}'; $data = json_decode( $json, true ); function getSubArrayPath( $array, $wantedKey ) { $mode = RecursiveIteratorIterator::SELF_FIRST; $iterator = new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ), $mode ); foreach ( $iterator as $key => $value ) if ( $wantedKey === $key ) { $keys[] = $key; for ( $i = $iterator->getDepth()-1; $i >= 0 ; --$i ) { $keys[] = $iterator->getSubIterator( $i )->key(); } return $keys; } return []; } function &getSubArrayRef( &$array, $key ) { $path = getSubArrayPath( $array, $key ); $ref =& $array; while ( $node = array_pop( $path ) ) $ref =& $ref[ $node ]; return $ref; } $ref = &getSubArrayRef( $data, 'PRODUCTION' ); $ref[ 'email' ] = 'novo e-mail'; $ref[ 'senha' ] = 'nova senha'; $ref[ 'atributo_novo' ] = 'AAAAAAAAAA'; print_r( $data ); E o retorno disso seria esse: Array ( [CREDITOR] => Array ( [TAX] => Array ( [TAC] => 0.7 ) [ENABLE] => true [PRODUCTION] => Array ( [email] => novo e-mail [senha] => nova senha [BASE_URL] => https://domino.com [atributo_novo] => AAAAAAAAAA ) [HOMOLOGATION] => Array ( [email] => email@dominio.com [senha] => 12457895 [BASE_URL] => https://domino.com ) [TARGET_VALUES] => 5000000 ) ) Achei melhor dividir as responsabilidades e trazer as manipulações para fora da função, mas se você preferir fazer tudo numa chamada só, basta modificar o valor de $ref após o while da nossa função "getSubArrayRef()". Dessa forma você poderia enviar o valor desejado e já sair com o array modificado de dentro da função (como você estava fazendo antes).
  15. Matheus Tavares

    Função genérica para atualizar chave em JSON duplicada usando o PHP

    Olá amigo, tudo bem? Vou tentar ajudar você, mas não entendi alguns pontos: No seu exemplo houve alteração no e-mail apenas de PRODUCTION, mas não em HOMOLOGATION. É esse o comportamento esperado? Desculpe, mas não entendi muito bem seu objetivo: seria varrer todo o array pela chave 'email' (por exemplo) e substituir todas as ocorrências ou apenas a primeira encontrada (ou ainda outra coisa)? Apenas para ilustrar melhor, como você fez a chamada da sua função para que ela gerasse o resultado que você colou no seu post? Digo, quais parâmetros você passou pra dentro dela? Apenas uma observação: if ($keyUpdate == null) { return $result; } else { return $result; } É o mesmo que simplesmente: return $result; (Provavelmente foi apenas falta de atenção, mas não custa mencionar...)
×

Informação importante

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