Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Posts postados por Omar~


  1. Se são os arquivos estão diretamente no mesmo diretório do website e não possui restrição de acesso a eles deveria está tudo bem.

    Isso geralmente acontece quando se requisita arquivos de outra url o que pode acontecer de algum tipo de restrição.

     

    Bem, o que posso lhe dar alguma coisa a se observar.

    Verifique o cache, acesse o inspetor do navegador e veja se o arquivo css da fonte é mesmo como deveria ser e os arquivos .ttf etc estão mesmo como deveria ser.

    Verifique o case-sentitive letras minúsculas e maiúsculas.

    Porque 404 é erro de não encontrado

     


  2. Além do ajax que é o mais comum de uso existe outra possibilidade.

    Carregar os dados que deseja no carregamento do documento. Dessa forma não se precisa enviar nova requisição toda vez que algum produto é selecionado.

     

    Qual melhor alternativa?

    R: Ambas, pois depende do resultado a obter e da proposta da função.

     

    Veja nesse exemplo onde simulo um resultado da query quando se acessa a página, assim uso esse resultado para criar um json com todos registros.

    Com o json uso ele para criar um seletor de produtos, que ao ser alterado busco novamente no json os dados e informo mais conteúdos.

    <?php
    // SELECT produto_id, produto_nome, produto_preco FROM tabela_produtos
    $exemplo_do_resultado = [
        // 'id' => produto_id, 'nome' => produto_nome, 'preco' => produto_preco
        ['id' => 0, 'nome' => 'Maçã', 'preco' => '11'],
        ['id' => 1, 'nome' => 'Banana', 'preco' => '22'],
        ['id' => 2, 'nome' => 'Laranja', 'preco' => '33'],
        ['id' => 3, 'nome' => 'Melancia', 'preco' => '44'],
        ['id' => 4, 'nome' => 'Melão', 'preco' => '55']
    ];
    ?>
    
    <div id="local_do_seletor"></div>
    <div id="local_para_mostrar">
        <p>Selecione um produto</p>
    </div>
    
    <script>
        var selecionar = document.getElementById('local_do_seletor');
        var mostrar = document.getElementById('local_para_mostrar');
    
        var produtos = JSON.parse('<?= json_encode($exemplo_do_resultado) ?>');
        // ou dependendo de como está trazendo o array do banco de dados
        // var produtos = '<?= json_encode($exemplo_do_resultado) ?>';
    
        function carregarLista() {
            var seletor = document.createElement('select'), opcao = {};
            window.produtos.forEach(function (coluna, indice) {
                opcao = document.createElement('option');
                opcao.value = coluna.id;
                opcao.innerText = coluna.nome;
                seletor.appendChild(opcao);
            });
            selecionar.addEventListener('change', verProduto, false);
            selecionar.appendChild(seletor);
        }
    
        function verProduto(evento) {
            var idAlvo = parseInt(evento.target.value), texto = '';
            window.produtos.forEach(function (coluna, indice) {
                if (coluna.id === idAlvo) {
                    texto = 'Você selecionou o produto ID (' + coluna.id + ') ';
                    texto += 'de nome (' + coluna.nome + ') ';
                    texto += 'e seu valor é (' + coluna.preco + ') ';
                }
            });
            if (texto.length > 1) {
                mostrar.children[0].innerText = texto;
            }
        }
    
        carregarLista(); // Cria o seletor com as opções
    </script>

    Prós: Não é necessária uma nova requisição sempre que selecionar algum produto.

    Contras: Quanto mais registros existirem mais lento a página é carregada. (Depende mais do hardware do usuário e sua conexão)

     

    Citar

    !!IMPORTANTE!!

    Cuidado ao passar informações sigilosas com essa técnica, qualquer informação carregada nesse método o usuário terá acesso e ficará salva na máquina dele.

     


  3. Dessa forma não é possível.

    Veja o javascript é executado do lado do usuário ou seja na máquina dele.

    Enquanto que o php é executado no lado do servidor, ou seja se o usuário já interage ou acessa o conteúdo o php já foi executado e não tem seus dados alterados mais.

     

    Em resumo digamos isso:

    <?php
    $exemplo = 'console.log(`Olá mundo`)';
    ?>
    <script>
      function exemplo() {
        console.log('Dizer:');
        <?php echo $exemplo ?>
      }
    </script>

    Na verdade o que é:

    <script>
      function exemplo() {
        console.log('Dizer:');
        console.log(`Olá mundo`);
      }
    </script>

    Então não é o php que é executado dentro do script, o script já está pronto e foi escrito pelo php antes do hardware do usuário terminar o download do mesmo.

     

    A coisa que se pode fazer é se você quer alguma informação do usuário obrigatoriamente essa informação deve ser enviada para o servidor. Uma vez a informação lá você renderiza novo conteúdo html para o usuário.

     

    Ainda em sua lógica....

    Escrever PHP dentro de tag's javascript de forma que seu conteúdo seja alterado conforme o php modificar é meter os pés pelas mão mesmo que em muitos casos isso possa até funcionar você está criando uma carga de armazenamento demais para os usuários.

    Citar

    É por essa má prática entre mais outras que muitas pessoas bloqueiam sites de enviarem javascript.

     

    Fora a questão da manutenção que vai virar o verdadeiro inferno.

     

    Não se deve alterar funções javascript com escrita do php.

    O cache é uma coisa que se deve pensar, se escreve todo ou alguma parte de um escopo de função do javascript no php ao solicitar a mesma função novamente o cache ainda está ativo e caso a função agora seja diferente a uma infinidade de erros que podem ocorrer.

    No caso crie a função a mesma só irá trabalhar com dados vindo de parâmetros, então se desejar re-executar a função basta então apenas charmar-la novamente enviando outra informação como parâmetro.

    // JavaScript
    function exemplo(parametro) {
      console.log('Função executada com a informação:\n' + parametro);
    }
    <?php
    $a = "João e Maria foram a padaria";
    $b = "E joão queria comprar bolachas";
    $c = "Mas Maria só queria pão";
    $d = "E ambos só tinham dinheiro para uma coisa";
    ?>
    <script>
      exemplo(`<?= $a ?>`);
      exemplo(`<?= $b ?>`);
      exemplo(`<?= $c ?>`);
      exemplo(`<?= $d ?>`);
    </script>

     


  4. Se as senhas dos usuários ainda não tiverem uma criptografia, uma opção é criar um sistema que irá buscar todas senhas e fazer um update nas mesmas já com a criptografia usando:

    19 horas atrás, Matheus Tavares disse:

    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

    Dessa forma nem mesmos os usuários saberão que algo foi feito a respeito, mantendo suas senhas conforme as utilizam a todo momento.

    Porém se forem um gama massiva de usuários registrados faça esse processo de forma gradual deixando o website em off por um tempo até terminar todo processo.

     

    Lógico que tanto o cadastro como o login devem ser modificados para nova realidade.


  5. @joao b silva Se você posta algo abstrato as pessoas tem que adivinhar o que você está tentando fazer, daí sai respostas incoerentes como a pergunta.

    Seja objetivo e claro para que a pessoa possa ter certeza do seu problema.

     

    Em 03/01/2023 at 04:41, joao b silva disse:

    esto inserindo a linha acima no meu javascript com php

    php não insere javascript, php é o texto que o servidor interpreta, o usuário final só recebe aquilo que o php já renderizou, no caso sempre será uma marcação html.

     

    11 horas atrás, joao b silva disse:

    Se o código javascript está sendo inserido de forma dinámica com PHP como vou pressionar enter?

    Explique como a string que corresponde do suposto javascript é criado e como será usado, que do contrário é usar uma quebra de linha "pressionando ENTER" ou um codec que representa uma quebra de linha no caso um contra-barra + N

    $texto = "var primeiraLinha = 'olá', \n segundaLina = 'mundo';";

    No mais um colega aqui bem disse, ficar fazendo rodeios para coisa inútil é coisa inútil.

    Deixe de preferência o php fazer o trabalho de php e html fazer trabalho de html.

     

     

     

    2 horas atrás, Frank K Hosaka disse:

    echo "<input type=$type>";

    É só escapar as aspas

    echo "<input type=\"{$type}\" />";

  6. for


    Crie as opções em um array no php.

    Dentro da tag <select> 1 e 2 faça um loop percorrendo o array usando o comando echo para compor cada tag <option> em ambos seletores.


  7. Por acaso não seria isso?

    $array = [
        'Índice 1' => 'Valor 1',
        'Índice 2' => 'Valor 2',
        'Índice 3' => 'Valor 3',
    ];
    foreach ($array as $chave => $valor) {
        echo "<p>Chave: {$chave}<p><p>Valor: {$valor}<p><hr />";
    }

     


  8. <select id="calculo" onchange="calcular()">
        <option value="" selected="">Selecione o tempo de uso</option>
        <option value="1">1 minuto</option>
        <option value="10">10 minutos</option>
        <option value="60">60 minutos</option>
        <option value="213">213 minutos</option>
    </select>
    
    <script>
        var seletor = document.getElementById('calculo'); // apenas para fins de exemplo
        seletor.selectedIndex = 0; // apenas para fins de exemplo
    
        var saldoAtual = parseFloat(21.90);
        var valorHora = parseFloat(0.0304);
    
        // 60 minutos é 1 hora, então sabemos quanto vale um minuto
        var valorMinuto = parseFloat(valorHora / 60);
    
        console.log(
            'Saldo atual: (' + saldoAtual + ')\n',
            'Valor por hora: (' + valorHora + ')\n',
            'Valor por minuto: (' + valorMinuto + ')\n'
        );
    
        function calcular() {
            var minutosUsados = parseInt(seletor.value);
            var valorUsado = parseFloat(minutosUsados * valorMinuto);
    
            // Retirando do saldo atual
            saldoAtual = parseFloat(saldoAtual - valorUsado);
    
            console.log(
                'Minutos usados: (' + minutosUsados + ')\n',
                'Valor usado: (' + valorUsado + ')\n',
                'Saldo atual: (' + saldoAtual + ')\n'
            );
            console.log(
                'Ainda te restam: '
                + saldoAtual.toLocaleString('pt-BR', {style: 'currency', currency: 'BRL'})
                + ' de saldo disponível'
            );
        }
    </script>
    
    
    <?php
    function parseFloat($parametro) {
        return (float) $parametro;
    }
    
    $saldoAtual = parseFloat(21.90);
    $valorHora = parseFloat(0.0304);
    $valorMinuto = parseFloat($valorHora / 60);
    
    $minutosUsados = 60; // usou 60 minutos
    $valorUsado = parseFloat($minutosUsados * $valorMinuto);
    
    $saldoAtual = parseFloat($saldoAtual - $valorUsado);
    
    var_dump($saldoAtual);

     

    Citar

    Vale um ressalto sobre a técnica usada para saber o quanto o usuário usou, independente do uso do node js através de um socket que seria o método menos invasivo para o servidor.

    O uso do javascript será o gatilho de tudo, mesmo que cálculos sejam realizados no servidor a máquina/hardware do usuário que irá dizer o quanto ele usou portanto pode e será usado para burlar o sistema.

     

    Na minha opinião para um serviço web a melhor alternativa é uma data definida para término de uso de algum serviço e não cobrar o tempo de uso que é ineficaz.

     


  9. A forma de calculo já disse como proceder, agora se for questão de recalcular a data em base do tempo de uso, o php já possui isso a mão pronto para uso:

    $periodoA = date('Y-m-d H:i:s', strtotime('-1 minute'));
    var_dump( $periodoA ); // resultado = sua data atual menos 1 minuto
    
    echo "<hr />";
    
    $periodoB = new DateTime('2022-12-27 17:55:00');
    $periodoB->modify('-1 minute');
    var_dump( $periodoB->format('Y-m-d H:i:s') ); // resultado = 2022-12-27 17:54:00

     


  10. E qual a dúvida?

    Bom, tudo questão de matemática, concentrando-se apenas nos cálculos do tempo de uso:

    • Valor atual menos valor da hora usada = resultado a atualizar em um banco de dados.
    • Valor atual é menor que tempo atual = fim do acesso a atualizar em um banco de dados.
    • O prazo de validade é simples data de adesão ao plano + 30 dias.
    • Acesso fora do prazo de validade conta como vencido.

     

    21,90 / 0,0304 = se minha matemática de cabeça está correta é cerca de 720 horas o que equivale a 24 horas dia durante 30 dias.

    Então não sei se acertei digamos 0,0304 / 60 = 0,00506 por minuto & 0,00506 / 60 = 0,000843 por segundo.

    E é isso é melhor usar o sistema para calcular precisamente lembrando que aqui fiz de cabeça, então para cada segundo ou minuto ou hora que o usuário usar você desconta esse valor no total atual que ele possui seja 21,90 ou 10,00 ou 5,99 etc...

     

    Você pode está usando o php para realizar os cálculos e atualizar os registros, porém em hora de uso você deve detectar esse tempo de atividade, se fosse eu optaria pelo https://socket.io/ para está constantemente realizando o cálculo no servidor e atualizando os descontos no crédito. Você pode até adicionar um intervalo em que o socket irá se comunicar caso esse sistema possa conter milhares de usuários simultaneamente, assim poupa estresse do servidor porém os registros podem ficar imprecisos caso o usuário saia antes da comunicação ser executada.


  11. 2 horas atrás, Frank K Hosaka disse:

    for(i=j;i<j+9;i++){

     

     

    Não precisa ficar replicando a mesma coisa.... No caso esses montes de innerHTML aí

    Então vamos parar um loop quando ele deve parar em uma determinada situação.

    Primeiro tenha certeza que a variável j é mesmo um numero inteiro.

    Você pode chamar a função passando o valor como integer exemplo:

    show(j);

     

    Exemplo básico:

    var j = '13';
    show( parseInt(j) );
        
    function show(contar) {
        var parar = (contar + 10); // o valor do parâmeto mais 10 para que o loop seja executado 10 vezes
        for (; contar < parar; contar++) { // enquanto a contagem for menor que o valor de parada
            console.log('Contagem executada: ' + contar);
        }
    }

    Algumas ponderações:

    A variável de parada não é ideal ficar dento da função show se essa função for chamada dentro de um loop haverá uma sobrecarga de calculo desnecessário que só deveria ser executado uma vez, somente usei dentro do escopo da função como exemplo.

    As tags <options> devem corresponder exatamente a quantidade de voltas que o loop vai executar a partir do início.

    Rever a arquitetura da lógica você poderá executar tudo mais facilmente sem a necessidade de múltiplos loops, bastando um único loop você captura os dados compõe e checa as opções reduzindo o consumo de memória para algo tão simples.

     

    Em 22/12/2022 at 10:31, Frank K Hosaka disse:

    onde eu aprendi que o <option> tem um propriedade chamada data-id

    Qualquer tag pode conter um dataset seja ele data-id/ data-qualquer/ data-fulano

    <div id="exemplo" data-pessoa="joaquin"></div>
    
    <script>
        console.log(
            document.getElementById('exemplo').dataset.pessoa
        );
    </script>

     


  12. Você então pode está usando mais de um atributo data exemplo:

    <div data-funcao="idade" data-parametro="2">

    Daí é só jogar para alguma função os valores obtidos pelo dataset funcao e parametro.

    Essa função checa o valor e executa a função:

    function executaOutra(NomeDaFuncao, Param) {
    	switch(NomeDaFuncao) {
          case 'sexo':
            Sexo(Param);
            break;
          case 'idade':
            Idade(Param);
            break;
        }
    }

    Se bem que se a coisa for bem estruturada, basta apenas executar a função de acordo com o conteúdo, ao invés de consultar posteriormente para saber o que fazer.


  13. Não existe algo como isso.

    Qualquer data-????? é um atributo dataset que não possui vínculos de comando a ele, o que se usa muito é para fins de manipulação de conteúdo aos quais são mais práticos de encontrar no documento.

     

    Bom, para clicar em determinado elemento você pode usar onclick="funcaoOla"

     

    E para executar a função pós ajax você pode está usando o ouvinte de evento readystatechange para monitorar a resposta, quando ela estiver pronta para ser escrita você apenas chama a função que deseja.

    https://github.com/Spell-Master/sm-web/blob/master/javascript/jsd/js-default.js#L501

     

    Outra forma quando por exemplo houver uma tag javascript no resultado da resposta e você precisa que o script seja executado mesmo que esse resultado seja mostrada por innerHTML. Nesse caso você deve varrer o texto do resultado obtendo somente o texto contido dentro da tag, então você cria uma nova tag javascript e escreve o script que extraiu anteriormente e substitui a tag não funcional pela nova criada que a coisa vai funcionar.

    https://github.com/Spell-Master/sm-web/blob/master/javascript/jsd/js-default.js#L501

     

    Por fim exec se tornou obsoleto e já foi avisado que futuras versões dos navegadores não irão mais reconhecer essa função.


  14. A questão é bem simples, como já mencionado deve haver alguma clausula na query ao identifique qual conteúdo determinado usuário pode acessar.

    Hora que uma paginação para que funcione corretamente são necessárias duas querys, uma determinará o limite de resultados a outra os resultados de acordo com o offset do índice acessado.

     

    A primeira query irá buscar quantos resultados existem essa irá dizer o limite, ao qual deve haver a quantidade de páginas a exibir. Ex.:

    SELECT id FROM alunos where idAlunoUnidade = '2'

     

    A segunda query irá usar o resultado da primeira query para exibir cada resultado conforme a página acessada. Ex.:

    SELECT * FROM alunos where idAlunoUnidade = '2' LIMIT {$quantidade_de_registros_da_primeira_query} OFFSET {$pagina_atual_acessada}

     

    Esse procedimento se repete a cada mudança de página, sempre exigindo alguma clausula que indique qual conteúdo o usuário pode acessar.

     

    Em outro caso é possível fazer uma única query trazer todos os resultados e através de um javascript criar a paginação onde esse não irá mudar a página apenas mostrar ou esconder os elementos de acordo com cada página acessada.

    Para não reinventar a roda aqui, eu já desenvolvi um script para essa finalidade:

    https://github.com/Spell-Master/sm-web/tree/master/javascript/Paginator


  15. 7 horas atrás, Biel. disse:

    e abrir o modal na pagina2

    Como assim?

     

    Você quer carregar a pagina2 dentro do modal?

    R: Basta apenas chamar uma requisição ajax e carregar a resposta no elemento do modal.

     

    Você quer, clicar na imagem na pagina1, ir para a pagina2 ao chegar o modal aparece?

    R: Use LocalStorage para armazenar algo e em pagina2 você confere se existe o que armazenou, se existir o modal é mostrado.


  16. Mas vale ressaltar o uso do javascript para criar uma integração com usuário.

    Assim pode-se controlar o que o usuário pode fazer antes de enviar dados para o servidor, poupa tempo dele e do servidor também.... "se for o caso"

    var formulario = document.getElementById('buscar'),
        texto = '';
    
    function exemplo() {
      texto = formulario.elements[0].value.trim();
      
      if (!texto) {
        // nada digitado no primeiro campo do formulário
      } else if (texto.length < 3) {
        // o primeiro campo do formulário DEVE possuir pelo menos 3 caracteres
      } else if (texto.length > 10) {
        // o primeiro campo do formulário NÃO DEVE mais de 10 caracteres
      } else if (!texto.match(/^([a-zA-Z À-ú]+)$/i)) {
        // o primeiro campo do formulário só pode ser usado letras
      } else {
        formulario.submit(); // pode validar
      }
    }

    Lógico que tudo apresentado pelo script acima pode ser manipulado pelos atributos do input. Mas a questão é criar um personalização, seja lá qual for.


  17. Basta apenas que o botão externo execute uma função que manda o formulário submeter.

    function exemplo() {
      document.getElementById('buscar').submit();
    }

    Além do mais caso queira adicionar tag <button> sem que esse submeta o formulário você tem que dizer qual o tipo de ação que esse botão realizará, por padrão qualquer navegador já interpreta essa tag como submit quando dentro de um formulário, então basta apenas mudar assim você não precisa de uma função controlando isso

    <button type="button">Executa</button> <- Não executa o formulário.


  18. Em 23/10/2022 at 11:04, Edeg disse:

    alguem poderia me ajudar?

    Podemos sim, mas poste mais informações para sabermos qual é o seu real problema

     

    Se for o caso mete isso no google:

    cidades estados github

    Verás um infinidade de projetos que nem depende de um banco de dados no girhub

×

Informação importante

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