Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Tudo que Omar~ postou

  1. Exporte a tabela users e poste sua estrutura. Como foi inserido os dados na tabela? Para um login algo deve ser criado no caso uma global session, cookie ou ambos. Leia esse tópico pode ser útil para quem está engatinhando ainda. https://forum.imasters.com.br/topic/565800-crud-introdução-a-pdo/ Obs.: $logindb e $senhadb irão se re-escrever a cada volta do loop fetch_object e isso não é uma boa pela perca de desempenho existem formas melhores apenas sabendo se a consulta houve retorno
  2. Omar~

    Abrir página somente se o usuário estiver logado

    Primeiramente ofuscação não deve ser usado!!!. Pode aliviar dezenas de horas procurando corrigir aleatórios erros que poderiam ser evitados e sanados logo de início! De fato se ele digitar no endereço da url sim ele irá carregar o arquivo e isso você não pode e nem tem como impedir. Então o que você pode está fazendo é redirecionar o usuário para o devido local. <?php session_start(); // <<< isso vem antes de tudo a partir a primeira abertura de tag PHP // index2.php if (!isset($_SESSION['usuario_logado'])) { header('LOCATION: index.php'); // redireciona } else { echo 'existe a $_SESSION[\'usuario_logado\'] você não será redirecionado'; } Você também pode está optando por modos de re-escrita do apache para omitir os nomes de arquivos na url como index.php ou index2.php etc... Se essa arquitetura for bem elaborada e sólida uma pessoa nunca irá descobrir qual arquivo de fato está sendo processado no servidor. Ou seja nunca saberá se está em index.php, index2.php ou seja lá qual for o arquivo. A desvantagem disso é que pode ficar complexo demais manutenções e add-ons futuros por quem não desenvolveu o sistema.
  3. Omar~

    Data e Hora PHP / JavaScript - O que está errado?

    Não entendi qual é a do PHP O que está acontecendo aparentemente é que Estão se somando por serem inteiros. Bom como esse script aí é muito zoneado, enxuguei ele aplicando as correções Coloque isso na header ou em qualquer arquivo .JS function startTime() { var data = new Date(), dia = data.getDate(), arrSemana = ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'], arrMes = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']; // Segunda, 14 de Junho de 2021, 19:05:23 txt.innerHTML = arrSemana[data.getDay()] // Segunda + ', ' + (dia < 10 ? '0' : '') + dia // 14 + ' de ' + arrMes[data.getMonth()] // de Junho + ' de ' + data.getFullYear() // de 2021 + ', ' + data.getHours() + ':' + data.getMinutes() + ':' + data.getSeconds(); // 19:05:23 } Então ao final da tag body chame o script com um intervalo ao invés de usar essa coisa grotesca que é onload no body. <script> var txt = document.getElementById('txt'); var tempo = setInterval(startTime, 1000); </script> Veja que o elemento que vai mostrar é definido fora do escopo da função. Porque veja bem, a função está continuamente se repetindo a cada 1 segundo... Se ele fosse buscado dentro da função a cada um segundo o javascript tem que varrer todo o documento em busca desse elemento então você perde em performasse.
  4. Omar~

    Duvida excluir um valor do BD após 30 dias

    UPDATE tabela_do_usuario SET indicacao_do_vip = 0 Atualize a tabela de usuário definindo a coluna que indica quando o usuário vip para zero (1 era usuário vip / 0 sem vip) WHERE indicacao_do_vip = 1 Quando a coluna que indique o vip for um (1) "Ou seja só usuários com vip serão alvos" AND (dias_vip IS NULL OR dias_vip < CURDATE()) E quando a coluna de contagem de dias for nula ou a data registrada for menor que a data atual Na verdade essa parte pode ser otimizada ficando só AND dias_vip < CURDATE() Não precisa pegar o valor nulo pois se é nulo nunca teve um vip registrado ^^ Então digamos que a data de término desse vip seja 2021-01-01 e no momento do login for 2021-01-02 (um único dia a mais) a tabela era atualizada. O que eu fazia para definir um vip era atualizar a coluna que registrava que aquele usuário era vip para 1 (um) e a data de término para x dias contando a partir dos dias aplicados exemplo: <?php $periodo = 5; /* Cinco dias */ $usuario = 99; /* ID da conta do usuário */ $query = " UPDATE tabela_do_usuario SET indicacao_do_vip = '1', dias_vip = DATE_ADD ( CURDATE(), INTERVAL {$periodo} DAY ) WHERE id_da_conta = '{$usuario}' "; Assim sendo se hoje era 2021-06-15 o término do vip seria 2021-06-20 então qualquer usuário que logasse no dia posterior involuntariamente atualizara o vip de todo mundo. Veja o script em linguagem C++ que fiz ao qual eu comandava IN-GAME a coisa toda, der uma olhada pode ser útil para que possa elaborar seu sistema aí, pois não se tratava só de adicionar ou remover vip e sim adicionar mais dias ou remover dias:
  5. Omar~

    Duvida excluir um valor do BD após 30 dias

    @Xicara Durante 8 anos anos fui administrador de um servidor de jogo online (Ragnarok Online), ao qual possuía sistema de conta vip. Para minha realidade eu simplesmente apliquei que quando o usuário logasse comparava a data atual com a data de seu início de vip. Sendo que a cada login a tabela se atualizava removendo o período de acordo com o dia em que ele logou. Exemplo: UPDATE tabela_do_usuario SET indicacao_do_vip = 0 WHERE indicacao_do_vip = 1 AND (dias_vip IS NULL OR dias_vip < CURDATE()) Então mesmo que não seja o usuário específico qualquer usuário que logasse atualizava os dias vip de todos usuários. Essa coluna de dia vip nada mais era que uma coluna date. Como disse esse conceito já era o suficiente para minha realidade. Porém você diz que quer a coisa automatizada, então não há outra forma a não ser usar uma tarefa CRON como o próprio @Matheus Tavares disse. São suas únicas alternativas ou atualiza a tabela pelo login seja o próprio usuário seja qualquer um ou usa um cron job. Ao invés de ficar tentando fazer gabiarras grotescas de código.
  6. Omar~

    [Resolvido] Erro ao enviar form com PHP 8.0.6

    Aparentemente o código da class está correto. Porém acredito que a falta de um construtor seja o problema, o PHP 8 está cheio de frescuras, muito dos meus códigos também tive de fazer alterações para funcionar na versão. Tente usar essa classe ela é para captura de super globais: Exemplo: <?php $post = GlobalFilter::filterPost(); // Obtem tudo que está na super global $_POST if ($post) { var_dump($post); // No seu caso >>>>> echo $post->name; } else { // Nenhum $_POST existente o valor de $post é (false) }
  7. Omar~

    habilitado ou desabilita input

    Isso é relativamente simples. Você precisará de recurso AJAX para não recarregar a página. Vou lhe apresentar um conceito pois para um exemplo mais preciso conforme você disse, tem que ser feito com os dados de seu código. Mas só pela lógica qualquer um consegue fazer. Arquivos necessários (para execução correta do AJAX): https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest Essa seria o arquivo onde estaria o botão O que temos então: Uma simulação de uma consulta no banco de dados que retorna os registros representados pelo array $resultado_do_banco. Fazemos então um loop nos resultados e a cada volta criamos um formulário identificado diferente para cada resultado. Cada formulário ao ser submetido executa uma função enviando como parâmetro o id do registro correspondente para podermos identificar qual é o formulário que é para enviar. E o arquivo registra.php Se você percebeu no primeiro arquivo temos uma condição ternária que se o resultado é de um tipo mostra o texto desabilitar e não é mostra habilitar. Essa mesma técnica você usa para modificar o resultado do banco de dados e atualizar o botão depois que o registro for concluído.
  8. Omar~

    Alterar tamanho da fonte

    Vamos ver se eu entendi.... Você tem acesso aos arquivos na hospedagem? - Se sim: Com a página aberta aí pelo browser, clique com o botão direito do mouse sobre o texto que está pequeno. Selecione o inspetor, com isso você terá tudo que foi processado a tag em sí e suas definições de CSS e qual arquivo está manipulando, então é só recriar o arquivo css e empurrar ele por ftp com as modificações desejadas. Só não entro em mais detalhes porque você teria que ter um mínimo básico de entendimento sobre propriedades de folha de estilo. Em todo caso se você pagou por essa ferramente você deveria ter sim suporte a coisas como essas
  9. Omar~

    Carregar página com Ajax e executar Scripts ou Jquery

    https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest O AjaxRequest.js ao carregar a resposta do XMLHttpRequest faz a leitura do conteúdo se houver alguma tag script ele os re-escreve escapando do buffer, assim esses vão funcionar independente do tipo de requisição. Se for um broken-script a resposta nem carrega pois quebra o código do ajaxrequest assim também protegendo a integridade do software que o executa. Só não sei se vai funcionar com essa porcaria "para não chamar de lixo que não serve para nada" o tal do jQuery.
  10. Omar~

    Página em html, css e javascript

    Aparentemente não há problemas com o link então o que podemos presumir é erro do html. Pode ser alguma tag não fechada, tag como por exemplo todas tag <img> do documento não foram fechadas... <img src="imagemqualquer.jpg" alt="" /> <!-- Fechando a tag "/>" --> No entanto pode não ser isso. A melhor forma que você pode descobrir a raiz do problema aí é através do inspetor do browser. Existe também a possibilidade de um script está manipulando os hiperlinks ou um modo reescrita do apache no caso do serve-side.
  11. Omar~

    Como alterar um texto conforme o horário?

    É algo até bobo de lhe responder, pois se um horário vai de A a B é uma coisa e X a Y etc... Portanto é só comparar o valor do seu relógio aí se for algo entre uma hora e outra é só alterar o texto da suposta tag h1 que a propósito essa tag só deve ser usada como título de um contexto e não levianamente...
  12. Omar~

    efeito transition

    <style> #myDIV { background-color: red; width: 0; height: 0; opacity: 0; transition: 1s } #myDIV.exemplo { width: 200px; height: 200px; opacity: 1 } </style> <button onclick="myFunction()">click</button> <div id="myDIV"></div> <script> var myDIV = document.getElementById('myDIV'); function myFunction() { myDIV.classList.toggle('exemplo'); } </script>
  13. Omar~

    Editar um css usando javacript

    Quando for postar código tenha o bom senso de usar a ferramenta "Code" do editor aqui. É o botãozinho "<>" na barra de ferramentas do ckeditor, com esse simples gesto você agiliza a interpretação do código para quem vai te ajudar. - Ao problema.... Você não pode usar o evento "click" em cima do input porque quem recebe esse evento é a tag label, portanto para que der certo você deve verificar o click no local correto. Porém como label está vinculado ao input você pode detectar cada alteração desse input. Vejamos: <nav class="menu" id="principal"> <ul> <li><a href="#" class="home">Home</a></li> </ul> </nav> <input type="checkbox" id="chk" name="exemplo" /> <label for="chk">Clique Aqui</label> <script> var chk = document.getElementById('chk'), menu = document.getElementById('principal'); chk.checked = null; // Em caso de atulização do documento o checkbox muda para desmarcado function funcaoExemplo(e) { if (e.target.checked) { /* >>> Isso é válido se #principal for Absoluto(absolute) ou fixo(fixed) * menu.setAttribute('style', 'left:300px'); */ menu.setAttribute('style', 'margin-left:300px'); } else { // Caso não seja marcado remove o atributo style menu.removeAttribute('style'); } return (false); } chk.addEventListener('change', funcaoExemplo, false); </script>
  14. Omar~

    Javascript passar valores do GET para o input

    A sua dúvida é muito vaga... Você diz: passe valores do GET (Que é um protocolo URL) Mas o código você apresenta é um prototype de um objeto Então não faz sentido algum o título em questão para a dúvida Bom, se você quiser capturar as entradas GET pode fazer assim: var entradasGET = location.search.slice(1).split('&'), indices = [], objetos = {}; entradasGET.forEach(function (e) { indices = e.split('='); objetos[indices[0]] = indices[1]; }); console.log(objetos); //Digamos a url assim: ?alguma_coisa=valor_A&outra_coisa=valor_B&mais_outra=valor_C //O resultado: Object { alguma_coisa: "valor_A", outra_coisa: "valor_B", mais_outra: "valor_C" } De fato nunca precisei e nunca ouvi falar de alguém que precisou mexer nesses dados no lado do usuário, isso é algo que sempre é usado no lado do servidor.... Mas se for a questão está aí. Porém se você quer obter a resposta de uma requisição, não vou reinventar a roda aqui pois já criei um magnifico script para essa finalidade: https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest Mas se a questão for uma instância da classe XMLHttpRequest onload para o prototype responseText é sempre um boleano "true" então a função onload não pode ser usada porque a partir da instância load é válido (mesmo antes que a resposta exista). Tente então obter a resposta da requisição if ((request.readyState === 4) && (request.status === 200)) { // A resposta existe e está pronta para ser usada, portando pode ir para o manipulador do DOM document.getElementById('greeting').innerHTML = request.responseText; }
  15. Omar~

    Domínio bloqueado no antivírus

    - A princípio o domínio pode está em uma lista negra nos servidores do Avast como sendo algo fornecedor/disseminador de malwares. - Ou pode ser que a aplicação utilizasse de scripts nocivos tanto para o software quanto para o hardware de alguém que acessa. - Propagandas abusivas até demais o que se enquadra também no caso de scripts. - Certificados enganosos ou inválidos. - Tentativa de roubo de cookies ou qualquer tipo de dados do usuário. - Mineração de bitcoins. Não sei quanto ao comportamento do avast, mas é um ´software de proteção, portanto esses são os principais motivos ao qual ele pode chegar a bloquear um endereço. Ou simplesmente má configuração do seu avast aí.
  16. Omar~

    Imagem saindo deitada no PDF (dompdf)

    Não entrando em como o dompdf insere imagens pois o problema pode ser ele. E nem se essas essas imagens são enviadas por upload. Verifique a orientação da imagem, Provavelmente seja essa a questão. Por exemplo no meu smartphone uma foto tirada Se vista pelo visualizador de imagem do próprio fica normal. Se se vista por um documento html fica normal. Se vista pelo editor básico de imagem do meu Ubuntu ela fica de ponta-cabeça virada 180º. Se vista no Photoshop fica virada -180º. Se vista pelo visualizador de imagem do windows fica virada como espelho e 180º. E por aí vai.... Cada um interpreta a orientação de um jeito. Pode não ser o seu caso e pode ser que o próprio dompdf está fazendo m***** e desorientando a imagem (o que é bem provável). Mas se não for o caso tente alterar a orientação pelo exif da imagem. Para detalhes veja esse método dessa classe: https://github.com/Spell-Master/sm-web/blob/master/exemplos/corte-e-salvamento-de-imagens/ImageUpload.php#L194 Era um problema para mim então criei esse método dessa classe que ao enviar uma imagem por upload a classe automaticamente faz a correção da orientação quando necessário.
  17. Omar~

    Regra do if

    Que botão? O contexto PHP é para renderizar um script e não um botão. A propósito isso é inconsistente na renderização pois uma linha independente é gerada após a outra devido as várias repetições da função echo, seria ideal só usar uma vez a função e ir inserindo contexto por contexto para que exista somente uma renderização. Sei lá digamos que esse checkout.js irá criar algum botão no documento, isso não é problema PHP (back-end) e sim Javascript (Front-End). Se for esse o caso sugiro que busque a documentação ou contate o(s) desenvolvedor(es) do mesmo para esclarecimento como utilizar-lo
  18. Omar~

    Regra do if

    @biakelly como o methus já disse o uso dessas chaves "{ }" são para mostrar algo que já existe. Portanto nessa linha: Você não está mostrando e sim criando algo o que foge da regra dessas chaves, e nesse caso você pode concatenar.. echo "data-amount='" . $row['totalbrl']*100 . "'"; Além do mais você pode está escapando... <?php //echo " "cometendo um erro de escape" "; isso gera erro porque uma áspa fecha outra echo ' \'escapando com áspas simples\' '; echo " \"escapando com áspas duplas\" ";
  19. Omar~

    Transferir dados de uma tabela para um form em js

    Na verdade isso seria o caminho. Me estranha que você montou a lógica corretamente, porque não estaria funcionando? Talvez o uso de variáveis ao invés dos índices no resultado? Bom... Resultados de querys no php sempre nos retornam um array independente da aplicação de busca seja PDO seja MySqli, então o que podemos é percorrer esse array e a cada índice criar os elementos: <?php $banco_de_dados = [ ['id' => 0, 'nome' => 'Rio', 'endereco' => 'Rio de Janeio'], ['id' => 1, 'nome' => 'Paulo', 'endereco' => 'São Paulo'], ['id' => 2, 'nome' => 'Salvador', 'endereco' => 'Bahia'], ['id' => 3, 'nome' => 'Vitória', 'endereco' => 'Espirito Santo'] ]; ?> <table> <?php foreach ($banco_de_dados as $value) { ?> <tr id="cliente-<?= $value['id'] ?>"> <td data-nome="<?= $value['nome'] ?>"><?= $value['nome'] ?></td> <td data-endereco="<?= $value['endereco'] ?>"><?= $value['endereco'] ?></td> <td><button onclick="adicionar('cliente-<?= $value['id'] ?>')">Adicionar</button></td> </tr> <?php } ?> </table> Note que ao invés de usar a função echo do php toda hora apenas mandei exibir o valor usando <?= /* Algo a exibir */ ?>
  20. Omar~

    Transferir dados de uma tabela para um form em js

    Começando pelo principal problema que na verdade é: Vários erros em seu HTML. O atributo global #ID deve ser único pois seu objetivo é distinguir alguma coisa de outra. Portanto quando você declara vários: Entre os demais, você está cometendo um erro gravíssimo de interpretação e hierarquia no HTML por isso só funciona em um, porque só deveria existir em um. Ou seja nunca repita o #ID com a mesma propriedade! Você terá que construir algo que possa ser reaproveitado. Antigamente nessas situações tínhamos que compor um objeto com todos os valores, mas desde o html5 a coisa ficou mais fácil, temos um novo atributo global que podemos buscar no documento e esse assim como diversos outros podem se repetir. Então você só obtêm uma referencia única que pode ser um #ID para distinguir quais serão os elementos de busca. Veja isso: <table> <tr id="cliente-1"> <!-- ID "1" para o primeiro cliente --> <td data-nome="joão">João</td> <td data-endereco="endereço a">Endereço A</td> <td><button onclick="adicionar('cliente-1')">Adicionar</button></td> </tr> <tr id="cliente-2"> <!-- ID "2" para o segundo cliente --> <td data-nome="maria">Maria</td> <td data-endereco="endereço b">Endereço B</td> <td><button onclick="adicionar('cliente-2')">Adicionar</button></td> </tr> </table> Nome: <input type="text" name="nome" id="nome" /> Endereço: <input type="text" name="endereco" id="endereco" /> Perceba que definir os #ID diferente em cada coluna "tr" da table, e é assim que posso chegar até os atributos data que são meus alvos, apenas informando para a função o #id da coluna. var nome = document.getElementById('nome'), endereco = document.getElementById('endereco'), tdNome = null, tdEndereco = null; function adicionar(id_alvo) { var trID = document.getElementById(id_alvo); tdNome = trID.querySelector('[data-nome]').dataset.nome; tdEndereco = trID.querySelector('[data-endereco]').dataset.endereco; nome.value = tdNome; endereco.value = tdEndereco; } Basta que siga esse procedimento para adicionar mais campos como desejar. Completando... sobre erros de HTML.... Toda tag deve ser fechada! Mesmo que o browser percebe o erro e tenta corrigir, você pode se deparar com problemas na estrutura do documento, quanto mais problemas mais interpretações aleatórias pode acontecer pelo browser. Portanto quando declarar uma tag <input> não se esqueça que ela deve ser fechada. <input type="text" /> Mais de 90% dos problemas com css e javascript podem ser solucionados apenas escrevendo o html corretamente. Dica de desempenho... Evite criar variáveis dentro do escopo de uma função, porque consome uma certa % de memória RAM para criar, e apenas reescrever consome muitíssimo menos. Evite ao máximo buscar por elementos dentro do escopo de um função, lembre-se que quando você passa um getElementById por exemplo o javascript deve ler todo o documento para encontrar esse alvo. Se ele já foi buscado e encontrado, não há necessidade de encontrar-lo novamente. Mesmo que em diversos casos coisas como essas são indispensáveis, mas devem ser evitadas a todo custo.
  21. Omar~

    Dois resultados numa mesma condição

    A solução é fazer novamente um join na tabela de usuário Ou seja um para o autor outro para o editor. Na questão preferir então fazer o que sempre faço nessa situação: 2 selects e comparar os dados pelo php.
  22. Omar~

    Encurtamento de palavra no meio

    <?php function longText($string, $length) { $str = (string) $string; $keys = ((int) $length + 3); return (mb_strimwidth($str, 0, $keys, '...')); } $texto_para_encurtar = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit'; // Encurtando em 11 caracteres echo longText($texto_para_encurtar, 11); // Resultado "Lorem ipsum..."
  23. Omar~

    Adicionar e remover campos de texto com JS

    Nada mais é que um básico para carrinho de compras.... <form id="myForm"> <input type="text" name="qualquer_coisa"> <!-- Isso agiliza o script para que não precise ficar catalogando cada elemento antes de adicionar novo --> <div id="novos_inpus"></div> <button type="button" onclick="addInput()">+</button> <button type="submit">Enviar</button> </form> <script> var novos = document.getElementById('novos_inpus'); var quantidade = 0; // Contar e identificar input adicionado var maximo = 3; // Quantos input's podem ser adicionados? function addInput() { if (quantidade < maximo) { var novoInput = document.createElement('input'); var botaoRemover = document.createElement('button'); novoInput.type = 'text'; novoInput.name = 'novo[]'; // Como serão vários inputs o name deve ser um array novoInput.className = 'para colocar quantos classificador quiser'; botaoRemover.type = 'button'; botaoRemover.innerHTML = 'Remover -'; botaoRemover.className = 'para colocar quantos classificador quiser'; botaoRemover.addEventListener('click', removerInput, false); novos.appendChild(novoInput); novos.appendChild(botaoRemover); quantidade += 1; } return (false); } function removerInput(e) { var click = e.target; // Botão clicado // click.parentNode: é o elemento mais próximo em que ele está no caso "#novos_inpus" // previousElementSibling: é o elemento anterior mais próximo dele no caso o "input" click.parentNode.removeChild(click.previousElementSibling); click.parentNode.removeChild(click); quantidade -= 1; return (false); } </script>
  24. Omar~

    Recuperar SPAN que tenha 2 atributos definidos

    Uai! se fosse só pela declaração do atributo era simples.... porque normalmente nessas situações buscamos por um elemento em específico. Talvez seria uma boa usar um elemento identificado "#ID"? Sei lá, depende da arquitetura da aplicação aí.....
  25. Omar~

    Recuperar SPAN que tenha 2 atributos definidos

    Tenta assim: var elTpReporte = document.querySelectorAll('[data-click="1"]'); var itens = []; elTpReporte.forEach(function (e) { if (e.classList.contains('sp-tp-reporte')) { itens.push(e); } }); console.log(itens); Não sei se é o melhor jeito, mas deve funcionar como esperado
×

Informação importante

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