Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Tudo que Omar~ postou

  1. Omar~

    dizer se tem ou não dados repetidos no array

    Sem reinventar a roda, a função para isso é array_unique
  2. Omar~

    Problemas com variáveis PHP

    Estranho, segundo o input o índice fileimg deveria existir, então pode ser erro no formulário. Rode esse código: <form method="POST" enctype="multipart/form-data"> <input type="file" name="nome_do_input" /> <button type="submit">Enviar</button> </form> <?php $arquivo_enviado = (isset($_FILES['nome_do_input']) ? $_FILES['nome_do_input'] : false); if ($arquivo_enviado) { echo "<pre>"; var_dump($arquivo_enviado, $_FILES); echo "</pre>"; } Algumas ponderações: Para validar a extensão e dados do arquivo use a class finfo. Antes de querer checar o tamanho do arquivo, obtenha se o tamanho condiz com a configuração do seu servidor, para obter esse informação use "ini_get('upload_max_filesize')". Mas você pode alterar o tamanho máximo no PHP.ini
  3. Omar~

    Segurança dos formulário

    Desde sempre foi possível manipular o HTML de um formulário, hora que também sempre foi possível enviar dados por POST ou GET mesmo sem passar por sua aplicação. Se você pode impedir que alguém altere o html ou envie dados? A resposta é simples, e é não, você não pode impedir nada disso. (Se renderizou o HTML, entregou para o usuário é dele e ele pode manipular da forma que bem entender, desde o html, js, mídias etc...) O que você pode e "DEVE FAZER" é sempre tratar qualquer tipo de informação que venha de um ambiente externo principalmente se alguma dessas informações vão se usadas em um banco de dados. Lógico que o tipo e como vai ser tratada algum dado que entra depende de quão sensível ele é e qual sua finalidade. Exemplo se o tipo de dado que tenho que validar é um INTEGER e a informação que entrou além de números inteiros entrou alguma string ou flutuante, posso simplesmente lançar um erro ao invés de continuar meu código. Se vou por exemplo salvar uma string no banco de dados e essa string contém caracteres suspeitos como algarismos, chaves etc. Posso lançar um erro ou limpar essa string antes de acessar o database. No geral é isso, sempre validar se o tipo de dado é o que vai ser usado, uma limpeza de string aqui e alí, junto a PDO você garante 90% de segurança, só não se consegue 100% porque nada é realmente inviolável. Uma regra que valide seus dados? Depende como disse do que vai ser feito, e sim você pode criar uma regra/manha/truque como disse acima. Mas lembre-se que quanto mais filtros você passa mais seguro vai está e menos usabilidade sua aplicação irá ter. Proteger excessivamente só vai deixar a coisa devagar.
  4. Omar~

    Filtro de busca

    Sabia que se você usar as ferramentas corretas uma parte do problema é resolvido? Ao invés de usar um input checkbox use o radio que serve para esse tipo de situação. Bom, não de para eu entender o real problema, mas o que me aparenta é que você precisa envia um cabeçalho HTTP como POST. Se for esse o caso:
  5. Omar~

    Conversão de JPEG e PNG para WEBP com imagewebp

    Você está destruindo a imagem criada na variável $image? Pode ser um problema de cache. Já tive um problema similar e era apenas que eu não estava limpando a memória. Mas tente criar uma nova imagem já aplicando as correções grb, então você copia essa imagem para corrigir eventuais problemas de dimensionamento. Só então com essa cópia você cria o arquivo webp Mais ou menos isso: <?php $arquivo = 'imagem.jpg'; $imagem = imagecreatefromjpeg($arquivo); $imgX = imagesx($imagem); $imgY = imagesy($imagem); $novaImagem = imagecreatetruecolor($imgX, $imgY); imagealphablending($novaImagem, false); imagesavealpha($novaImagem, true); imagecopyresampled($novaImagem, $imagem, 0, 0, 0, 0, $imgX, $imgY, $imgX, $imgY); imagewebp($novaImagem, 'imagem.webp', 100); imagedestroy($imagem); // Importante para limpar o cache echo ("<img src=\"imagem.webp\" alt=\"\" />");
  6. Omar~

    DATA-HORAs

    Informação indispensável para saber como manipular datas. Mas o caminho é mais ou menos esse: <?php $dataDeTermino = strtotime('2021-10-30 14:00:00'); if ($dataDeTermino < strtotime(date('Y-m-d H:i:s'))) { echo ("Terminou, apague o registro nessa condição SE ELE EXISTE! "); }
  7. Omar~

    [Resolvido] Múltiplos checkbox

    Pouca informação para poder ajudar. Começando pelo menos relevante: Como é esse processo? Em que tipo de coluna é salvo essa informação? O mais relevante: A função explode cria um array com onde acada índice vai existir conforme o delimitador é definido. Como você está resgatando cada índice para pode definir o valor de um input, assim setar-lo como checado? Ver se te ajuda: <?php $string = 'valorA, valorB, valorC'; $array = explode(', ', $string); var_dump($array); ?> <hr /> Usando a função "in_array" <p><input type="checkbox" value="valorA" <?= (in_array('valorA', $array) ? 'checked=""' : null) ?>/>valorA</p> <p><input type="checkbox" value="valorX" <?= (in_array('valorX', $array) ? 'checked=""' : null) ?>/>valorX</p> <p><input type="checkbox" value="valorB" <?= (in_array('valorB', $array) ? 'checked=""' : null) ?>/>valorB</p> <p><input type="checkbox" value="valorC" <?= (in_array('valorC', $array) ? 'checked=""' : null) ?>/>valorC</p> <p><input type="checkbox" value="valorY" <?= (in_array('valorY', $array) ? 'checked=""' : null) ?>/>valorY</p> <hr /> Ou comparando arrays <?php $inputs = ['valorA', 'valorX', 'valorB', 'valorC', 'valorY']; $marcado = ''; foreach ($inputs as $valor) { foreach ($array as $checked) { if ($checked == $valor) { $marcado = 'checked=""'; } } echo ("<p><input type=\"checkbox\" value=\"{$valor}\" {$marcado} />{$valor}<p/>"); $marcado = ''; }
  8. Omar~

    DATA-HORAs

    Sem a estrutura da tabela fica difícil ajudar. De qualquer forma também é possível comparar datas/horários uma vez que alguém alguma hora irá acessar a aplicação e a tabela será lida. Se houver algum registro que foge da data/horário estipulado esse registro pode ser apagado antes que o HTML seja renderizado para o usuário.
  9. Omar~

    Inclusão de + itens no banco

    No HTML/JS depende de como você vai criar novos itens. Mas o esquema é que itens adicionais podem ter seu name como um ARRAY. <input type="text" name="exemplo[]" /> <input type="text" name="exemplo[]" /> <input type="text" name="exemplo[]" /> No PHP var_dump($_POST); Assim sendo poderá ver que a chave "exemplo" é um array com a quantidade de itens exemplo[] inseridos no formulário.
  10. Omar~

    Como consumir uma função de consulta SELECT pdo?

    Sim, do contrário você está se referindo a um atributo da classe. Não, os valores tem que existir, do contrário os parâmetros usados pelo método terá o valor NULL. Nem dentro, nem fora, separe os dois divisores da programação, um é o funcional outro é o orientado a objeto. Porque você conseguiu? Para início de conversa o objeto $pdo não existia, logo nenhum dos métodos da classe PDO não existia por isso o erro. Mas daí você chama uma global (que pode existir ou não) para armazenar um valor que acredito eu que venha do arquivo "conecta.php". O ideal no seu cenário é o arquivo conecta.php ser uma class conecta, assim sendo essa classe é responsável por estabelecer a conexão com o banco de dados e armazenar a conexão em um atributo público para ser acessado por outras classes. Dessa forma você previne erros recursivos caso haja erros ou algum problema na conexão. (Ou seja se não conectar o problema é a classe que conecta, dividindo a responsabilidade de cada coisa dentro da aplicação). Não que você esteja errado, mas só para salientar. Usar classes significa que você não quer ficar tendo que repeti a mesma coisa, no geral usar uma classe é reaproveitar ao máximo dados. Se por exemplo o método entrada de cara retorna um valor que pode existir ou não você não pode reaproveitar esse valor. Ao invés de retornar o ideal é que ele armazene o valor em um atributo, em outro método o valor possa se verificado, só então outro método retorne o valor se de fato ele existe. Se entendeu a lógica quando você envia dados para uma classe essa classe pode conter vários métodos que agem distintamente com os mesmos dados. No resumo uma classe são um aglomerado de funções que compartilham entre si os mesmos dados. Do contrário o mais coeso é usar uma programação funcional.
  11. Omar~

    Cadastro PHP e Login na mesma página

    @Thiago Duarte Dica: Não dê ctrl+c e ctrl+v, isso não funciona no mundo da programação. Entenda a lógica, esse é o caminho. Seu caso é mais afundo que um um simples post... Talvez eu esteja sendo leviano, mas pelo que aparenta você primeiro precisa saber sobre protocolo POST e uso de super globais no caso posts e sessions; sem esse conhecimento por sua parte, qualquer ajuda aqui seria superficial. Me perdoes se não fui coeso, mas se tivesse esse conhecimento sobre tais afins sua dúvida estaria respondida por esse conhecimento.
  12. Omar~

    manter conteúdo visível

    https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage Obs.: Não precisa criar uma variável para armazenar o objeto, só irá consumir memória desnecessária. Nota: SE É PARA FICAR VISÍVEL, PARA QUE "display:none"?
  13. Omar~

    Assinatura de e-mail em HTML desconfigurada

    Tente usar o a propriedade background-image. Exemplo: De fato não sei se vai dar certo uma vez que essas coisas da microsoft são tudo mau feitas.
  14. Omar~

    HTML

    Verifique a estrutura html, se houver erros a coisa não funciona. Pelo trecho de código postado localizei tags sendo fechadas sem que estivessem sido abertas, o que já é o suficiente para não funcionar. Obs.: Se estiver rodando com algum modo re-escrita de url no apache também não funciona BOOKMARK. Nesse caso você pode está usando javascript através da função scrollIntoView rolar a página até o local.
  15. Dar uma olhada aqui: https://www.cssscript.com/tag/date-picker/ Talvez possa encontrar um script que atenda a sua necessidade, caso não pode-se editar algum desses conforme você deseja. Além do mais você pode está usando algum desses scripts com base para você criar um para te atender conforme você deseja.
  16. Omar~

    Iniciante php

    Servidor apache e um editor de texto qualquer. Para servidor local, indico : https://www.apachefriends.org/pt_br/index.html Siga esse vídeo para fazer a instalação corretamente já com os serviços ativos para seu sistema win10: Como ferramenta de trabalho substituindo o editor de texto use uma IDE, como sugestão indico a que uso: https://netbeans.apache.org/download/ Também é bom um editor rápido com integração de código, no seu caso windows: https://notepad-plus-plus.org/downloads/ O mais importante, estudar muito, "mas muito mesmo" a documentação do PHP: https://www.php.net/ Como sugestão, não que no windows 10 você não possa programar, mas seria conveniente você usar um sistema nativo de 99,9% de um servidor, no caso o linux. Assim você já vai se familiarizando e entendendo como a coisa toda funciona.
  17. Fácil é! E também não é, porque depende do resultado final. Para fazer o upload, no geral você tem obter o arquivo através da super global $_FILES Então mover esse arquivo para um local específico. Para alterar as dimensões no caso 300pixels. Você ao invés de mover o arquivo cria uma cópia com a função: imagecopyresampled. Para alterar o nome e salvar você uma das funções abaixo dependendo do formato final que você deseja salvando a cópia criada com a função anterior: imagejpeg imagepng imagebmp imagegif Veja essa classe para upload de imagem (só que ela só aceita imagens jpeg e png): https://github.com/Spell-Master/sm-web/blob/master/exemplos/corte-e-salvamento-de-imagens/ImageUpload.php <?php require ('ImageUpload.php'); $upload = new ImageUpload(); $imageName = 'O nome que a imagem deve ter'; $tamanho = 300; // Se for maior que 300 de altura ou largura redimenciona para 300 mantendo o aspecto $upload->sendImage($_FILES['arquivo'], $imageName, $tamanho); No caso o $_FILES['arquivo'] irá buscar pelo valor de: <input type="file" name="arquivo" accept=".jpg,.jpeg,.png" /> Lógico que esse meu caso não estou verificando a naturalidade do arquivo enviado, se é uma imagem e se não é algo disfarçado de imagem. Você pode também está usando o javascript para ler a imagem na máquina do usuário, então recriar-la através de um elemento <canvas> então resgatar compilar-la em base64 e adicionar a string em uma <textarea> oculta. Quando submeter o formulário no backend você obtêm a string da textarea e com essa string criar uma imagem. A vantagem dessa segunda alternativa apesar de mais complexa é a praticidade para o usuário pois ele de fato não precisará fazer um upload.
  18. Omar~

    Pop-up toda ver que abrir o site.

    Primeiro um bloco na cara do usuário forçando a ver algo que a primeira mão não o interessa é uma estupidez e só irá poluir desvalorizar/site, provavelmente o usuário irá fechar a janela do seu site sem nem mesmo ler/ver. Muitos acreditam também que esses blocos são alguma forma de violar a máquina deles por isso saem sem mesmo esperar a página acabar de carregar (E alguns são mesmo). Aconselho você que crie um botão, bem visível para que o usuário possa clicar e ver as informações adicionais sobre o produto. No geral de uma googlada sobre "modal" ou acesse: https://github.com/Spell-Master/sm-web/tree/master/javascript/ModalShow Por exemplo depois da estrutura HTML do modal (se adicionar o js, o css a sua aplicação ambos contidos no link acima"): <script> var modal = new ModalShow('identificador'); modal.open('Título do Modal', true); // O modal irá abrir quando a página terminar de carregar e terá um botão para fechar setTimeout(function () { // Mo modal vai fechar sozinho depois de 5 segundos modal.close(); }, 5000); </script>
  19. Omar~

    Adicionar transição de blocos

    Estou com uma tarefa aqui e não estou conseguindo criar uma lógica para adicionar uma transição entre os elementos. Segue da seguinte forma: Tenho uma caixa central que irá abrigar 3 ou mais caixas. Cada caixa filha tem exatamente as mesmas dimensões da paixa mãe. Ao executar a função a caixa que está ao centro move-se para esquerda e a da direita também assumindo a posição da caixa anterior. Quando por exemplo antes de chegar a última filha, a primeira que se moveu toma o lugar da ultima assim tornando-se uma espécie de loop infinito. Ou seja depois da última filha a primeira toma o lugar dela para que a atual última possa se mover ao centro. Exemplo: / [1] / [2] - [3] "clicou em avançar torna essa sequência" [1] / [2] / [3] Até aqui tudo bem, bastando eu clonar a primeira caixa atual, remover-la então logo em seguida adicionar a cópia no final. Porém aqui que entra a questão pois teria que adicionar uma animação de transição, de forma que que as caixas movam-se lentamente para esquerda. Aqui está o esboço de teste: HTML: CSS: Javascript: Eu pensei em recursos como marginLeft e translateX, mas em ambos casos sempre terei o problema que se eu mover negativamente as caixas, ao remover qualquer uma que é o caso da primeira ir para último, todas as demais caixas vão ficar fora da caixa central. Quem tiver alguma ideia como adicionar essa transição de movimento, ficaria grato com a ajuda.
  20. Omar~

    Como suspender o parâmetro $_GET se o select estiver vazio?

    Sim daria, no entanto o formulário deve ser totalmente manipulado por script. Aconselho que use o protocolo POST e apenas valide os dados pelo backend, se for vazio você não precisa manipular. Mas podemos redirecionar informando na url só aquilo que não estiver vazio no formulário. <form method="GET" action="" onsubmit="return funcaoExemplo(this)"> <input type="text" name="caixa_de_texto" placeholder="Digite algo se quiser" /> <select name="caixa_de_selecao"> <option value="">Selecione se quiser</option> <option value="opção 1">Primeira opção</option> <option value="opção 2">Segunda opção</option> </select> <button type="submit">Enviar formulário por GET</button> </form> <script> const URL_DESTINO = 'https://endereco/arquivo.php'; function funcaoExemplo(formulario) { var parametros = '?'; for (var i = 0; i < formulario.elements.length; i++) { if (formulario.elements[i].value != '') { parametros += (parametros.length !== 1 ? '&' : '') + formulario.elements[i].name + '=' + codificarURL(formulario.elements[i].value); } } if (parametros.length > 1) { window.location.href = URL_DESTINO + parametros; } return (false); } function codificarURL(str) { return (encodeURIComponent(str).replace(/['()]/g, escape).replace(/\*/g, '%2A').replace(/%(?:7C|60|5E)/g, unescape)); } </script> De qualquer forma você terá que validar tudo antes de executar, por isso aconselho mesmo usar o POST e evitar manobras e artimanhas para algo desnecessário.
  21. Se for só pela questão de um "modal" fica fácil te ajudar, mas se entramos no meios de "pagamento/valores de produto" complica porque teríamos que ter os mínimos detalhes do seu modelo de negócio. Ao modal. 99% CSS, 0,9% HTML e 0,1% javascript. Começando pelo html: Criamos duas tag DIV elas ão ficar no fim do escopo do documento html, basicamente uma div mãe e uma filha. A mãe vai ser o modal em sí "o plano de fundo" e a filha vai ser a caixa interna. <div id="modal"> <div class="conteudo_modal"> Aqui dentro você pode colocar qualquer outra tag ou qualquer outra coisa que você querer </div> </div> Para o CSS Na mãe temos que sobrepor ela a todo conteúdo do documento por isso usando os valores fixed e z-index, sendo o fixed para que possa acompanhar a página e o z-index para cobrir. Como plano de fundo da mãe podemos usar o preto rgb em alpha. Já a filha colocamos um plano de fundo branco definimos sua altura e largura conforme o desejado. #modal { z-index: 1; /* Se houver outro z-index esse valor aqui tem que ser maior */ position: fixed; top: 0; left: 0; height: 100%; width: 100%; background-color: rgba(0,0,0,.5) } #modal > .conteudo_modal { height: calc(100% - 20px); max-width: 300px; background-color: #fff; margin: 10px } Com isso você já pode está personalizando seu modal aí conforme seu gosto antes de prosseguir adicionar cabeçalho, botão de fechar e tudo mais. Agora vamos esconder ele porque o usuário vai clicar em algo para mostrar então adicionamos isso ao css.... #modal.esconder { display: none } E adicionamos esse classificado na tag cujo colocamos o identificador #modal <div id="modal" class="esconder"> Agora o javascript: Basicamente é localizar o #ID modal e remover ou adicionar o classificador esconder. function controleModal() { document.getElementById('modal').classList.toggle('esconder'); } Então é só colocar o evento "click" em um botão. O próprio botão de fechar pode usar a mesma função. <button onclick="controleModal()">Exemplo</button> Por fim vamos supor que eu precise do modal para vários produtos, eu não precisaria criar um modal para cada e sim ter uma função que modelasse o conteúdo conforme minha necessidade. Então nesse exemplo abaixo todo o código usando apenas um modal para mais de um suposto produto, o que também poderia ser para qualquer outra coisa. Lógico que isso é um exemplo genérico, apenas para mostrar uma forma de criar diferentes coisas sem precisar ficar replicando código. E é simples um modal não é nada mais que que um elemento que você oculta ou esconde conforme for a questão. Veja esse: https://github.com/Spell-Master/sm-web/tree/master/javascript/ModalShow Nesse script você tem algumas outras funcionalidades para o modal, basta que você edite o CSS conforme desejar.
  22. Omar~

    PHP Criar sites dinâmicos sem CMS

    Apenas digo que jamais entregaria uma aplicação para um cliente usando o WP. Odeio tanto o wp que se eu entrar em detalhes posso ofender quem usa ou necessita da plataforma. Você não precisa do wp para criar um site, como também não precisa saber programação para mexer com wp. Qualquer leigo pode criar seu site/blog usando o wordpress pois essa a finalidade da plataforma (sei lá como chamar o wp) E sim é mais fácil com o wp pois vai poupar várias horas criando lógicas da aplicação. Pois o wp isso já está feito bastando ao usuário modular ele ao objetivo final. Mas no final tudo vai depender da proposta do cliente, se o que ele deseja não é muito específico pode-se sim usar o WP, principalmente se quem se propõe entregar a aplicação não é capaz de desenvolver algo de qualidade equiparável ou superior Isso é mito. Não passa de uma mentira contatada repetitivamente que se acaba parecendo verdade.
  23. Omar~

    validar campo com preg_match

    Direto ao ponto: Não entendi as minimas em relação a pergunta. Resumo: Direto ao ponto; qual é a duvida mesmo?
  24. Olha,.... você irá precisar de um registro; Tipo: Fulano armazenou algo, você cria um registro em um banco de dados ou arquivo... esse registro diz que existe X e o link para download é Y. E se fulano acessar Y irá fazer o download de X. É nesse contexto
  25. Omar~

    Navegar por itens de um array

    A questão aqui fica no encargo de como os dados trafegam do serve-side (backend) para o client-side (javascript). Somente dizendo como você repassa esses valores você já tem 50% da questão resolvida. Bom vendo isso presumo que seja um objeto uma vez que o javascript não usa arrays multi-dimensional: Como um objeto no geral nunca deveria ser indexado com um inteiro temos pegar o total de chaves dentro de um loop contando seus índices de acordo com a volta do loop, assim sendo fácil identificar qual chave do objeto temos o array para manipular. <div id="botao_aqui"></div> <div id="modal" style="display: none"> <div id="resultado_aqui"></div> </div> <script> var objeto = { 0: [1, 'Banana', '3.00', '...'], 1: [2, 'Maça', '4.00', '...'], 2: [3, 'Abacaxi', '5.00', '...'] }; var botaoAqui = document.getElementById('botao_aqui'), modal = document.getElementById('modal'), resultadoAqui = document.getElementById('resultado_aqui'), botao = null; for (var i = 0; i < Object.keys(objeto).length; i++) { botao = document.createElement('button'); botao.innerHTML = 'Visualizar &gt; ' + objeto[i][1]; /* No caso o id do array for 3 menos um então a chave o objeto é dois * E é atravéz desse numero que podemos regatar o array do objeto alvo * objeto[i][0] - 1) */ botao.setAttribute('data-chave', (objeto[i][0] - 1)); botao.addEventListener('click', abrirModal, false); botaoAqui.appendChild(botao); } function abrirModal(alvo) { var dados = objeto[(alvo.target).dataset.chave]; resultadoAqui.innerHTML = '<p>ID(chave) : ' + dados[0] + '</p>' + '<p>Texto : ' + dados[1] + '</p>' + '<p>Preço : ' + dados[2] + '</p>' + '<p>Pontos : ' + dados[3] + '</p>'; modal.removeAttribute('style'); } </script> Também nesse caso você vai se esbarrar nesse contexto, pois os dados já foram renderizados para o cliente, ou seja vão existir na tela dele mesmo que tenham sido alterados ou excluídos. Então você tem duas alternativa: 1 - Ao invés de resgatar os dados já renderizados quando abrir o modal, você executa um ajax buscando essas informações, se elas não existirem mais você toma as medidas cabíveis de acordo com a sua necessidade. 2 - Usar um sistema como o socket.io por exemplo, para que quando essas informações sejam alteradas no servidor elas sejam renderizadas novamente para todos os usuários.
×

Informação importante

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