Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Tudo que Omar~ postou

  1. Omar~

    Aprender Javascript do zero

    Está aqui por onde começar: https://developer.mozilla.org/pt-BR/docs/Aprender/JavaScript A partir do link acima você terá tudo que precisa. Node é front-end NÃO FAÇA ISSO!!!! O pior má prática na web é essa bosta de jquery
  2. Omar~

    Calculo de combustível

    Entendi Motta 1 - Obter a diferença 2 - Distância dividido pela diferença Mais tarde irei tentar, depois dou um retorno.
  3. Omar~

    Login com nivel de acesso

    Primeiramente sugiro o uso de PDO ao invés do mysqli. Segundo, faça um tratamento melhor (mais refinado) do que entra em sua aplicação isso aqui não lhe traz segurança alguma, dar para quebrar o php e exibir o código em tela expondo seu código fonte (fora o XSS e sql-inject): Terceiro não use md5 use password_hash para salvar senha de usuário e password_verify para comparação. Sobre sua questão é simples: A tabela de usuário possuirá uma coluna (INT) para o nível de acesso, quanto maior o número, maior o nível de acesso do usuário. Ao logar irá fazer a leitura da tabela normalmente, com o resultado obtido da query você pode está fazendo: $_SESSION['acesso'] = $valor_da_coluna_de_nivel_obtido_da_query; swi if (switch($_SESSION['acesso'])) { case 1: // O que será feito se o valor for 1? break; case 2: case 3: // O que será feito se o valor for 2 e 3? break; default: // O que será feito se o valor não for 1, 2 ou 3? break; } O por aí vai nos demais locais da aplicação basta apenas verificar o valor da sessão de acesso para liberar conteúdo para o usuário logado.
  4. Omar~

    Query para valores duplicados

    Valew! Obrigado mesmo @Motta Deu certinho, havia me esquecido que também poderia está usando uma clausula. Tive recorrer a truques de manipulação de array no php para tal afim, já que com a query não estava obtendo o resultado desejado.
  5. Omar~

    Query para valores duplicados

    Opa! Então.... como eu faria uma query que me retornasse apenas colunas cujo seu valor seja duplicado estou meio confuso como proceder? Digamos uma query para exemplificar melhor: SELECT * FROM tabela E teria um resultado assim: $resultado = [ 0 => [ 'id' => 1, 'repetido' => 'abcde' ], 1 => [ 'id' => 2, 'repetido' => 'aaaaa' ], 2 => [ 'id' => 3, 'repetido' => 'abcde' ], 3 => [ 'id' => 4, 'repetido' => 'bbbbb' ], ]; Então no índice 0 e no índice 2 tenho a coluna com o valor repetido. Como eu poderia esta fazendo a query de forma que me retornasse somente os resultados que são repetidos? Lembrando que não indicarei o valor de busca, pois foi isso que me pegou e não estou sabendo como proceder... Até onde eu sei usei a lógica e não deu certo: SELECT id, repetido FROM tabela GROUP BY repetido HAVING COUNT(repetido) > 1 Pois dessa forma só me retorna o último índice repetido e eu preciso de todos que forem repetidos.
  6. Omar~

    Upload de Videos (PHP , AJAX)

    Francamente eu acho inviável upar vídeo pelo largo consumo de espaço em disco sendo favorável usar mídias como o youtub por exemplo. Mas se for o caso, tem esse script meu, serve para fazer upload ou download de "qualquer coisa": https://github.com/Spell-Master/sm-web/tree/master/javascript/FileTransfer Lembre-se de verificar se o arquivo é mesmo um vídeo e que o servidor sempre possui um limite na transferência de arquivo, antes de acionar a função de envio. Como proceder para essas questões é só seguir o mesmo conceito desse exemplo: https://github.com/Spell-Master/sm-web/blob/master/exemplos/corte-e-salvamento-de-imagens/form-send.php#L15 Testa aí para ver se lhe serve...
  7. Omar~

    Ancora Scroll

    Não respondendo a sua pergunta... Não seria mais ágil usar só um margin-top no(s) elemento(s) ao invés de tantas tag's break? Só não ajudo com sua questão porque não mecho com o lixo do jquery se fosse javascript eu te ajudaria.
  8. Omar~

    Htaccess - Aplicar apenas duas regras URL amigável

    Tente assim... htaccess: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 A seguinte situação irá acontecer Quando não for um arquivo: RewriteCond %{REQUEST_FILENAME} !-f Quando não for um diretório: RewriteCond %{REQUEST_FILENAME} !-d Qualquer parâmetro da url pós endereço físico será considerado $_GET['url'] e será processado no arquivo index.php: RewriteRule ^(.*)$ index.php?url=$1 Então se o endereço seja: https://seusite/alguma_coisa/outra_coisa quer dizer que na verdade é: https://seusite/index.php?url=alguma_coisa/outra_coisa O que você tem que fazer é só separar cada índice, crie um arquivo qualquer e escreva um função como essa: <?php function filtrarUrl() { $filtro = filter_input(INPUT_GET, 'url', FILTER_DEFAULT); // Obtem o que existe na super-global GET $url = (empty($filtro) ? 'inicio' : $filtro); // Caso $_GET['url'] não tenha nada seu valor será "inicio" caso contrário será o que tenha $separa = explode('/', $url); // Separa todos os índices de $_GET['url'] pelas barras "/" $retorno = array_filter($separa); // Caso algum índice seja nulo ele é removido do array return ($retorno); // Retorna o array } Então no arquivo index.php fazemos um require no arquivo que contém a função e definimos o valor de url para o retorno da função: $url = filtrarUrl(); Teremos um array que no caso da url assim: https://seusite/entrada-a/entrada-b/entrada-c O valor de $url será: $url = [ [0] => 'entrada-a', [1] => 'entrada-b', [2] => 'entrada-c' ]; Assim sendo fica fácil manipular dinamicamente o conteúdo. Por exemplo no index.php switch ($url[0]) { case 'inicio': include ('arquivo_a.php'); // Arquivo que será incluso caso o endereço seja "https://seusite.com/" break; case 'alguma_outro_valor': include ('arquivo_b.php'); // Arquivo que será incluso caso o endereço seja "https://seusite.com/alguma_outro_valor/" break; default: include ('algum_coisa.php'); // Se caso algum valor não seja o que você definiu nessa bateria break; } Então se você deseja: https://seusite/produto/345 Verifique o valor de url[0] for produto se sim inclua o arquivo responsável e nesse arquivo verifique se o valor de url[1] é 345 "Acho que dar para entender" Na questão de arquivos CSS e JS imagens etc... Quando você reescreveu o apache, seu servidor sabe que esses índices criados só são uma reescrita, o browser não. Então se você está em https://seusite/teste. O browser acredita que você está em um diretório com nome "teste". Assim sendo uma imagem requisitada está assim: <img src="arquivo.jpg" alt="" /> Deveria está assim: <img src="../arquivo.jpg" alt="" /> O problema que se deixar o ../ caso não esteja em um sub diretório esses pontos e barras vão causar também perda da imagem. Para solucionar você deve verificar quantas entradas de url existem e aplicar o retorno de diretório a elas. Outra forma é usar o próprio HTML para tal, apenas adicionando a tag <base> como primeiro parâmetro da tag <head> exemplo: <!DOCTYPE html> <html lang="pt-BR"> <head> <base href="https://endereco_do_site.com"> Dê uma olhada nesse exemplo, é quase a mesma coisa que eu disse aqui: https://github.com/Spell-Master/Get-UrlAmigavel
  9. Omar~

    Exibir Imagem Dinamicamente

    Tente assim: <img src="img/<?= $codigo ?>.jpg" alt="" />
  10. Omar~

    insert into

    Putz, imagino o quão vulnerável é essa aplicação, se uma simples aspa já é problema... Use a função: htmlentities Aspas simples serão convertidas na entidade HTML &apos; aspas duplas em &quot; além de qualquer outro caractere que não seja dígito ou alfabético, resolve também problemas de codificação no caso de acentuações, pois serão entidades e não letras. Experimente assim: mb_convert_encoding(htmlentities($string), 'UTF-8', 'ASCII') Assim pode-se salvar até unicode caso o usuário use emojis ou qualquer outro tipo de caractere não imprimível.
  11. Omar~

    Alterar dados selecionados pelo checkbox

    Leia: https://forum.imasters.com.br/topic/565800-crud-introdução-a-pdo/ <?php $valor_do_input_check_box = $_POST['name_do_input_checkbox_no_html']; /* * Verifique antes se $valor_do_input_check_box é algum tipo de SQL-INJECT * Verifique antes se $valor_do_input_check_box é algum tipo de XSS * Verifique antes de $valor_do_input_check_box é um valor compatível com a coluna no banco de dados * Faça a limpeza $valor_do_input_check_box */ // A string da query: // UPDATE nome_da_tabela SET coluna_alvo = '{$valor_do_input_check_box}' WHERE coluna_de_busca = 'valor da busca'
  12. Use a função strtotime <?php $dataAtual = date('Y-m-d'); $horaAtual = date('H:i:s'); // Formato 24H /* $osDois = date('Y-m-d H:i:s'); // Assim você obtem data e hora atual */ $outraData = '2020-12-01'; $outraHora = '09:00:00'; $atual_data_e_hora = (strtotime($dataAtual) + strtotime($horaAtual)); $outra_data_e_hora = (strtotime($outraData) + strtotime($outraHora)); if ($atual_data_e_hora > $outra_data_e_hora) { echo ("A data e horário atual é maior que a outra"); } else { echo ("A outra data e horário é maior que a atual"); }
  13. <style> #menu { width: 100vw; height: 50px; background-color: black; position: relative } #menu.sroll { position: fixed; top: 0; left: 0; z-index: 1; background-color: red } </style> <div id="menu"></div> <script> var menu = document.getElementById('menu'); document.addEventListener('scroll', exemplo, false); function exemplo(e) { if (window.pageYOffset > 100) { // scroll acima de 100 pixel's menu.classList.add('sroll'); } else { menu.classList.remove('sroll'); } } </script> Ou você pode simplesmente definir que o menu é fixed no CSS que ele irá acompanhar o scroll do documento.
  14. children nada mais é que um array com o(s) filho(s) de algum elemento, então pegamos o texto contido nesse filho e enviamos para a função. Então obtemos o primeiro e o segundo filho Definimos que o valor da variável será o retorno da função clacularPreco enviando o texto contido no filho[0] e no filho[1] em calcularPreco a será o texto contido no filho[0] e b será o texto do filho[1]
  15. Não pois isso apenas traz um array com todos elementos cujo possuam o classificador referente. Mas vamos entender uma coisa antes: Você busca por Lhe trará a estrutura HTML contida nesse primeiro item encontrado, mas enquanto a algum segundo ou terceiro elemento? Assim como você mesmo colocou você possui 2 prateleira-preco-de. Então o mais sensato seria buscar o elemento pai e através dele chegar até os filhos. var _prateleira = document.getElementsByClassName('prateleira-wrap'), // Elemento pai _precoDe, _precoPor, _desconto, _precoDesconto; for (var _i = 0; _i < _prateleira.length; _i++) { _precoDe = _prateleira[_i].children[0]; // prateleira-preco-de _precoPor = _prateleira[_i].children[1]; // prateleira-preco-por _desconto = _prateleira[_i].children[2]; // desconto _precoDesconto = calcularPreco(_precoDe.innerText, _precoPor.innerText); if (isNaN(_precoDesconto) == true) { _desconto.innerText = 'Não há desconto no preço do produto'; } else { _desconto.innerText = 'Desconto de ' + _precoDesconto + '%'; } } function calcularPreco(a, b) { var floatA = parseFloat(extrairPreco(a)), floatB = parseFloat(extrairPreco(b)); return (((floatB / floatA) * 100) - 100).toFixed(2); } function extrairPreco(elemento) { return elemento.replace(/[^\d,]+/g, '').replace(',', '.'); }
  16. Omar~

    Select Dinâmico a partir de Outro Select

    Isto é algo bem simples porém, como proceder depende dos dados. E sim terá que usar JSON (para transferir o array do PHP) e javascript (para interação do usuário). O primeiro seletor seleciona um índice do array de retorno do banco, para que os outros dois sejam modificados. Aí que entra as questões: Isso é uma array que vai de 26 a 32 ou é só uma string? Isso é um array ou é só uma string? Veja: var dados = JSON.parse('<?= json_encode($resultado_da_query) ?>'); console.log(dados); Então terás o array executado no PHP disponível no javascript, então basta percorrer esse array no javascript usando um protótipo forEach, comparar o valor do seletor primário com algum índice desse array então criar as opções com a função createElement com os valores que desejar, que por sua vez são inseridas nos outros seletores. Se puder der um var_dump no resultado de sua query e poste o resultado do array para poder te ajudar. Se possível parte do código usado (Não precisa de tudo) Apenas a parte HTML do seletor primário e a linha que executa a query.
  17. Omar~

    @Media queries

    Dica complementar: Você pode está buscando por arquivos de folha de estilo que já cuidam desses assuntos corriqueiros de uso banal e simples. Um exemplo está nesse de minha autoria mesmo: https://github.com/Spell-Master/sm-web/blob/master/css/sm-default.css Nada mais que contém tudo que você precisa para arquitetura de todo layout de um documento html. Então para seu caso fica simples: <link href="sm-default.css" rel="stylesheet" type="text/css" /> <div class="container"> <div class="box-x-500 margin-auto align-center"> <div class="box-x-100 line-block bg-red"> Coloque aqui dentro o que desejar </div> <div class="box-x-100 line-block bg-green"> Coloque aqui dentro o que desejar </div> <div class="box-x-100 line-block bg-blue"> Coloque aqui dentro o que desejar </div> </div> </div> container: Se a resolução for de um tela Full-HD as margens estarão contidas para evitar desajustes de layout. box-x-500: Caixa com 500 pixel's de largura aproximados, mas quando a resolução for menor que isso ela se adapta a disponibilidade de tela. margin-auto: Automaticamente obtêm a distâncias laterais com relação ao se eixo de largura, fazendo o elemento se centralizar. align-center: Qualquer filho quando possível será movido para o centro. box-x-100: Caixa com 100 pixel's de largura aproximados. line-block: Faz com que o elemento se torne um bloco alinhado a seu parente mais próximo. Os demais bg-? eu apenas coloquei para exemplo; Lógico que se for para essa finalidade não vale a pena usar, mas como disse esse arquivo possui inúmeros recursos para compor toda estrutura do layout de forma responsiva. Vale a pena obter-lo, ler e testar seus recursos, qualquer outra dúvida sobre ele mande mensagem pessoal.
  18. Omar~

    Ids em array

    Lógico , que só o primeiro é alvo, justo porque um identificador é único não pode se repetir. Por isso lhe mostrei uma função que irá criar um elemento em loop cada um com um id único. Da mesma forma que mostrei como encontrar esse elemento no DOM. Mas não só pelo #ID que podemos encontrar um elemento no documento, existem várias outras formas, e uma infinidade de abordagens diferentes, não importa se está no DOM pode ser encontrado. Um método seria ao criar o elemento adicionar ao mesmo um classificador que poderá ser usado para localizar ele com mais facilidade. Então um função poderá manipular esse(s) elemento(s). Vejamos isso na prática: Como o que vamos adicionar a cada elemento vem de um array dados, podemos saber seus índices com dados[0], dados[1] etc.. Usando o método para localizar o classificador "elemento_avo" teremos um array da NodeList de todos alvos[0], alvos[1] etc.. Bastando então executar um loop no array dos elementos podemos obter o índice da volta atual do loop através de uma variável que se alto incrementa a cada volta. Mas como nem tudo que reluz é ouro, problemas podem ocorrer se se a quantidade de itens no array dados for menor que o numero de elementos. Para isso basta apenas conferir se exite algo para se manipular antes: /* for (var i = 0; i < alvos.length; i++) { alvos[i].innerText = dados[i]; } */ for (var i = 0; i < alvos.length; i++) { if (typeof dados[i] !== 'undefined' && dados[i] !== null) { // Adicionando esse checagem alvos[i].innerText = dados[i]; } }
  19. Omar~

    Ids em array

    <div id="colocar_aqui"></div> <button onclick="adicionarInput()">Novo Input</button> <script> var contagemID = 0, maximoInput = 10, // Quantos podem ser adicionados? novoInput, novoButton, dataInput, removeInput, alvo = document.getElementById('colocar_aqui'); function adicionarInput() { contagemID++; if (contagemID <= maximoInput) { // Criar novo input novoInput = document.createElement('input'); novoInput.type = 'text'; novoInput.name = 'descricao[]'; novoInput.id = 'descricao_' + contagemID; alvo.appendChild(novoInput); // Remover input adicionado novoButton = document.createElement('button'); novoButton.innerText = 'Remover'; novoButton.setAttribute('data-input', novoInput.id); novoButton.addEventListener('click', removerInput, false); alvo.appendChild(novoButton); } } function removerInput(e) { dataInput = e.target; removeInput = document.getElementById((dataInput).dataset.input); removeInput.parentNode.removeChild(removeInput); dataInput.parentNode.removeChild(dataInput); } </script> #EDIT: Veja que cada ID vai ser descricao_Numero_de_adição Perceba também o uso do atributo data que você também pode usar para obter o elemento que queira atacar. Pois foi esse o método que usei para saber qual item devo atacar com a função de remover. Além do atributo data você pode usar um classificador e atingir diversos itens de uma só vez. Qual informação será adicionada ao input, e quais os critérios para esse complemento não há como eu saber. Seria de grande ajuda saber se existe algum critério para anexar valor a um elemento, e que valor seria esse.
  20. Omar~

    Enumerar ID lista numericamente em ordem

    Quando se trata de loop em array pode-se tanto obter a chave do índice da array quanto contar as voltas que o loop faz foreach ($array_de_varredura as $indice => $valor) { $indice++; /* Lembrando que sempre o primeiro índice é zero */ echo ("Índice atual: {$indice}<hr />"); } // Outra questão: $voltas = 0; foreach ($array_de_varredura as $indice => $valor) { $voltas++; echo ("Índice atual: {$indice}<br/>" . "Volta atual: {$voltas}<hr />"); }
  21. Omar~

    window.location.href não funciona

    Mas solucionou? E erro de parâmetro eu cometo também "e muito", acontece geralmente porque sempre porque defino nomes bem mais detalhados na produção, enquanto que na versão final no nome é bem mais genérico para reduzir os KB's do arquivo assim ela carrega mais rápido. No entanto ao depurar esse tipo de erro é logo escancarado no console do browser.
  22. Omar~

    Retorno de Dados dentro de um Lightbox

    Por onde começo?!.... Hun... O caso da lista: Possivelmente o problema está na estrutura HTML (algum erro). Pois independente de tag's usadas a repetição de um loop é executada, se for o caso em cada volta do loop o erro/incoerência é repetido. Como você pode fazer a coisa dar certo: Primeiramente o seu elemento "LIGHTBOX" deve ficar fora do laço do loop no caso seu é o while. O seu lightbox aí contará com toda arquitetura HTML crua ou seja, ele vai ser todo definido o que cada local vai ter porém não vai ter informação alguma. Assim sendo quando você o exibir povoe esses campos usando o javascript para tal finalidade. Vou mostrar um exemplo de como você pode obter esses dados do html já renderizado e adicionar em outro local. (Só vou fazer uma linha, nas demais é só repetir a lógica) Veja: No contexto eu prefiro a minha opção anterior de levar o array do PHP para o javascript. O que dar no mesmo a única diferença é que agora tem que ficar consultando o documento para encontrar o que mostrar. Sua questão é extremamente simples. Nada mais do que manipular o html das 3 maneiras que citei antes com javascript e para tal existem incontáveis maneiras de o fazer, mas no fim será sempre exibir algo em um local específico.
  23. Omar~

    window.location.href não funciona

    O problema em ajudar você, é saber em qual questão de "não funciona" você quer dizer. Como assim não funciona? Enfim, algumas ponderações para se levar em conta: A tag <a> já é um vetor de redirecionamento, use uma tag <button> porque nesse contexto aí quando clicado na tag <a> a confirmação é exibida porém o redirecionamento fica no aguardo, assim que essa confirmação deixar de existir o redirecionamento vem para o mesmo arquivo e a função não se completa. (você pode está removendo o atributo href para evitar isso) Na função confExclusao no segundo parâmetro idLocacao você envia os dados porém ao concatenar você usa algo que não existe dentro da função. Erro encontrado: Correção:
  24. Omar~

    Retorno de Dados dentro de um Lightbox

    Não e sim depende da velocidade de conexão de quem o php vai entregar o HTML renderizado. O que você se refere quando diz: lista? Praticamente nada se usar as informações já disponíveis de sua query. Existem 3 formas de exibir mais detalhes sobre algo em específico. 1 - Ao abrir o modal executar um ajax em algum arquivo que fará a leitura novamente no banco em busca do alvo em questão (As alternativas abaixo são melhores). 2 - Varrer o documento em busca das informações que serão usadas e replicar no modal. (Mais simples) 3 - Levar toda array que veio do banco de dados para o javascript, então usar essas informações para definir o que será mostrado no modal. (como eu prefiro fazer) Segue o exemplo de como realizar a operação 3 Simples usamos a função no php json_encode para transformar o array em uma string, assim essa string pode ser manipulada no javascript. Só que na capsula usamos o JSON.parse que irá transformar a string em array. Na pratica é converter o array do php em um array compatível com javascript. Uma vez que temos todos os dados disponíveis no javascript, bastando clicar no botão chamando um função que irá pegar o índice do click e comparar com o índice do array. No mais é só ir exibindo os dados.
  25. Omar~

    Tratar retorno via parseInt

    Tente remover tudo que não for dígito da string primeiro. var strings = { a: 'R$ 299,00', b: '40 years', c: '10.00' }; function retornarDigito(str) { var string = str.replace(/[^\d]+/g, ''); if (string.length <= 2) { // No caso de "40 years" string + '00'; // vai retornar 4000 } return (parseInt(string)); } Object.keys(strings).forEach(function (item) { var integer = retornarDigito(strings[item]); console.log(integer); }); Com certeza existe um forma mais prática para essa operação, só que no momento não estou conseguindo pensar como.
×

Informação importante

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