Jump to content

Omar~

Members
  • Content count

    1098
  • Joined

  • Last visited

  • Days Won

    15

Omar~ last won the day on May 27 2018

Omar~ had the most liked content!

Community Reputation

87 Bom

7 Followers

About Omar~

  • Rank
    Knowledge is everything
  • Birthday 04/20/1984

Informações Pessoais

  • Sexo
    Masculino
  • Localização
    Nova Venécia (ES)

Recent Profile Visitors

8370 profile views
  1. Omar~

    Devolução ao estoque

    Se fosse minha situação eu armazenaria os produtos do cliente em um array, caso ele queira devolver algum simplesmente eliminaria o índice desse array correspondente ao produto que ele devolveu, mais ou menos isso: <?php $produtos_no_pedido = [ ['id' => 0, 'nome' => 'fone'], ['id' => 1, 'nome' => 'fone'], ['id' => 2, 'nome' => 'teclado'], ['id' => 3, 'nome' => 'pen driver'], ['id' => 4, 'nome' => 'pen driver'], ['id' => 5, 'nome' => 'pen driver'], ['id' => 6, 'nome' => 'pen driver'] ]; echo '<pre>'; var_dump($produtos_no_pedido); echo '</pre><hr />'; $remover_do_pedido = [2, 3, 6]; // Para remover o 2º fone e o primeiro e o último pen driver foreach ($remover_do_pedido as $chave) { if (array_key_exists($chave, $produtos_no_pedido)) { echo ("<p>Item removido: {$produtos_no_pedido[$chave]['id']}-{$produtos_no_pedido[$chave]['nome']}</p>"); unset($produtos_no_pedido[$chave]); } } echo '<pre>'; var_dump($produtos_no_pedido); echo '</pre><hr />'; Então com o array_key_exists chegamos ao índice de uma determinada chave no array. Agora vamos supor que ele não queira mais um determinado produto, mas nesse array tem vários produtos iguais, aí para a coisa dar certo podemos buscar no array o nome dos produtos $remover_do_pedido = ['teclado', 'pen driver']; foreach ($remover_do_pedido as $remover) { foreach ($produtos_no_pedido as $chave => $produto) { if (array_search($remover, $produto)) { echo ("<p>Item removido: {$produtos_no_pedido[$chave]['id']}-{$produtos_no_pedido[$chave]['nome']}</p>"); unset($produtos_no_pedido[$chave]); } } } echo '<pre>'; var_dump($produtos_no_pedido); echo '</pre><hr />';
  2. <input type="checkbox" id="checkmarcacao1" /> <input type="time" id="hora101" disabled="" /> <script> var checkbox = document.getElementById('checkmarcacao1'), time = document.getElementById('hora101'); checkbox.checked = null; time.value = null; time.setAttribute('disabled', ''); function alterarInput(e) { if (e.target.checked) { time.removeAttribute('disabled'); } else { time.setAttribute('disabled', ''); time.value = null; } } checkbox.addEventListener('change', alterarInput, false); </script>
  3. Omar~

    Problema com herança de classes

    Primeiro vamos esclarecer o porque de usar herança em classes. Digamos por exemplo que eu tenha classe_A, classe_B, classe_C; em ambas classes eu precise executar uma tarefa que se repete nelas.... Se não precisamos de algo recursivo a herança é desnecessária. Porém nesse requisito de repetição trabalhamos com uma classe mãe que vai executar essas tarefas que são específicas da classe mãe, portanto a classe mãe torna-se algo com importância tão relevante que seu acesso deve ser restrito. Ou seja não é adequado que ela possua dados públicos que podem ser manipulados de forma leviana. Em outras palavras nada de usar public em uma classe mãe que possui uma responsabilidade maior. Um construtor.... Um construtor de uma classe é somente para definir com quais dados/comportamento a classe deve possuir antes de usar qualquer tarefa que ela venha a fazer, caso não precisamos desses dados iniciais em todos os métodos seguintes não é necessário um construtor. Fora do contexto de classe, mas na questão do tópico: É muito estranho que em "pleno século 21" alguém ainda pensa em usar md5 para criptografia de senha, qualquer string é facilmente decifrada com o md5. Se você quer segurança use o password_hash que lança um novo salt a cada execução. Porém qualquer desses você pode registrar que numa comparação se for a mesma string o retorno é sempre verdadeiro. <?php class ClasseMae { private $pass; private $newPass; private function novaSenha() { $this->newPass = password_hash($this->pass, PASSWORD_DEFAULT); } protected function alteraSenha($pass) { $this->pass = htmlentities($pass); $this->novaSenha(); } protected function retornarSenha() { return (empty($this->newPass) ? null : $this->newPass); } } Perceba a responsabilidade da classe as quais filhas vão herdar seus métodos. O que uma filha pode acessar é protegido o que ela não pode mexer é privado. Ou senha nenhum objeto tem acesso a nada na mãe para que não possa manipular-la de forma alguma, porque ela é a mãe e não pode sofrer interferência de ninguém. <?php class ClasseFilha extends ClasseMae { public function modificarSenha($senha) { $this->alteraSenha($senha); } public function verSenha() { return ($this->retornarSenha()); } public function compararSenha($novaSenha) { if (password_verify($novaSenha, $this->retornarSenha())) { return (true); } else { return (false); } } } Note que então numa filha seus métodos são públicos pois sua responsabilidade é só receber/usar o que a mãe tem a oferecer. Por fim vejamos um exemplo de execução <?php $objeto = new ClasseFilha(); $objeto->modificarSenha('12345'); var_dump($objeto->verSenha()); echo ("<hr />"); var_dump($objeto->compararSenha('54321')); echo ("<hr />"); var_dump($objeto->compararSenha('12345'));
  4. Omar~

    zipar arquivo ao fazer upload

    Use uma classe nativa do php a ZipArchive Você nem precisa mover os arquivos com move_uploaded_file <?php /* Verificar antes se exitem arquivos Verifificar a integridade dos arquivos */ $nome_e_diretorio_do_arquivo_zip = 'pasta/qualquer_nome.zip'; $zip = new ZipArchive(); if ($zip->open($nome_e_diretorio_do_arquivo_zip, ZipArchive::CREATE) === true) { for ($controle = 0; $controle < count($arquivo['name']); $controle++) { $zip->addFromString($arquivo['name'][$controle], file_get_contents($arquivo['tmp_name'][$controle])); } $zip->close(); }
  5. Omar~

    Obter dados de único nome MYSQL

    Bom, se eu entendi e o caso for que o status não possa ser"OK". A coisa é meio óbvia: SELECT nome, pedido, status FROM cadastros WHERE status != 'Ok' Todos os dados de nome, pedido, status na tabela cadastros que não tiver com o status definido como Ok serão retornados
  6. Omar~

    Com dificuldade em uma classe

    <?php class MinhaClasse { private $atributo; public function meuMetodo($paramA, $paramB) { $this->atributo = $paramA . ', ' . $paramB; return ([$this->atributo, $paramA, $paramB]); } public function outroMetodo($paramC) { return ([$this->atributo, $paramC]); } } $obj = new MinhaClasse(); $a = $obj->meuMetodo('Bom dia', 'Boa tarde'); $b = $obj->outroMetodo('Boa Noite'); echo "<pre>"; var_dump($a, $b); echo "</pre><hr />"; function MinhaFuncao($paramA, $paramB) { return ([$paramA, $paramB]); } echo "<pre>"; var_dump(MinhaFuncao('Olá', 'Mundo')); echo "</pre>";
  7. lastInsertId é um método da classe PDO portanto basta que apenas use o objeto PDO para chamar o método logo depois de mandar executar a query. Exemplo $objetoPdo = new PDO( ... bla... bla... bla $conexao = $objetoPdo->prepare( ... bla... bla... bla $conexao->execute( ... bla... bla... bla if ($conexao->rowCount()) { $ultimoID = $objetoPdo->lastInsertId(); }
  8. Omar~

    Variável dinamica

    Mas então explique o objetivo a se obtido, variáveis não se altera dentro de um escopo global. O laço de loop for (para enquanto...) podemos reescrever a mesma varável e usar-la de forma diferente dentro do próprio loop, mas daí tem que saber o que se é para fazer.
  9. Omar~

    Com dificuldade em uma classe

    Envie os dados que precisa por parâmetro para o método. Se precisar reaproveitar eles em outros métodos use atributos... Se não precisar reaproveitar use funções ao invés de classes
  10. Omar~

    Variável dinamica

    Dinâmica como? Não ficou claro o resultado que você espera.... Seria algo como isso, nesse caso usamos uma array para criar um índice a cada volta: <?php $exemplo = []; for ($dia = 0; $dia < 7; $dia++) { $exemplo[$dia] = $resultadoBD->horario_$dia } echo '<pre>'; var_dump($exemplo);
  11. Omar~

    Melhorar desempenho do site

    O problema da lentidão está na "segunda"; melhor nas várias outras vezes que o código faz consulta, é loop dentro de loop fazendo consulta... Faça as querys separadas do e dentro do loop compare os dados. Para falar a verdade ambas querys são as mesmas e não há necessidade de re-executar a mesma coisa, ainda mais ficar fazendo querys dentro de loop Quanto mais voltas o loop faz mais querys são lançadas, mais custoso é para o servidor processar, menos desempenho você tem. Vejamos um exemplo que com uma única query você pode criar diferentes arrays para cada situação: <?php $ENG_REL_EPIS = [ /* Simulando um resultado da query "ORDER BY DATA ASC" */ ['NOME' => 'Bruno', 'to_date' => '2021-06-05'], ['NOME' => 'Carlos', 'to_date' => '2021-06-06'], ['NOME' => 'André', 'to_date' => '2021-06-07'], ]; echo '<pre>'; var_dump($ENG_REL_EPIS); /* Resultado da consulta ordenada por DATA */ echo '</pre>'; $emNome = []; foreach ($ENG_REL_EPIS as $nome) { foreach ($nome as $chave => $value) { if (!isset($emNome[$chave])) { $emNome[$chave] = []; } $emNome[$chave][] = $chave; } } array_multisort($emNome['NOME'], SORT_DESC, $ENG_REL_EPIS); echo '<hr /><pre>'; var_dump($ENG_REL_EPIS); /* 1 query e os mesmos resultado da consulta ordenados por NOME */ echo '</pre>';
  12. Algo simples, um ouvinte de eventos no seletor e pronto. Mas devo ressaltar que ao inserir o valor em um input text não é o ideal, pois o usuário "seleciona laranja depois vai ao input e escreve limão" removendo a lógica da questão. Nesse contexto o input pode ser oculto e ao invés de só inserir o valor no input manipulamos outro elemento "não editável" para informar o valor selecionado. <select name="qualquer_coisa" id="seletor"> <option value="">Selecione uma opção</option> <option value="1">Opção A</option> <option value="2">Opção B</option> <option value="3">Opção C</option> </select> <input type="hidden" name="outra_coisa" id="caixa_de_texto" /> <div></div> <!-- Use o CSS para personalizar esse divisor para que ele se pareça com um input-type-text --> <script> var seletor = document.getElementById('seletor'); var texto = document.getElementById('caixa_de_texto'); function alterarInput(evento) { var alvo = evento.target; var divTexto = texto.nextElementSibling; // O próximo elemento HTML depois do input texto.value = alvo.value; // Alterando o valor do input para o valor selecionado divTexto.innerText = (alvo.value.length ? alvo.value : ''); // Colocando o valor na div } seletor.selectedIndex = 0; // Sempre quando carregar a página o seletor muda para primeira opção seletor.addEventListener('change', alterarInput, false); </script> Questão de string e inteiros. Uma vez como valores de elementos mesmo sendo números na verdade são strings então. Para converter um número em INT com javascript você usa a função parseInt console.log( parseInt('123') ); Para converter um número em INT com o php você usa a nomenclatura (int) <?php $inteiro = (int) '123';
  13. Omar~

    Erro ao passar array de dados

    Malz apenas tinha o upado... https://drive.google.com/file/d/1LJdV04j7wGu-WthcLrlCBOIR35Y1Tq1V/view?usp=sharing
  14. Omar~

    Erro ao passar array de dados

    O que eu vi e percebi que você está tentando fazer, me corrija se eu estiver errado.... Em um arquivo você chama o método home da class Admins esse por sua vez como é herdeira da class Controller usa o método model para incluir outro arquivo de class, até aqui tudo bem (só deixando em destaque o atributo adminModel que está inexistente em ambas classes). Logo em seguida você aciona o método view da class Controller para anexar um arquivo no caso o home.php, e acredito que seja nesse arquivo que você quer acessar os dados carregados pelo método home. Um problema está no método view. Esse método tem por função anexar um arquivo, porém você não pode passar parâmetros seja por include seja por require para esse arquivo, isso não é possível de fazer. Outra questão está na herança como view pertence a classe mãe "Controller" ela não tem acesso a dados de sua filha no caso a class Admins a não ser que você mande esses dados por parâmetro assim como você fez (mesmo que isso perde no conceito de abstração, mas não vem ao caso). Veja que as coisas deram certo nesse exemplo: https://drive.google.com/file/d/1LJdV04j7wGu-WthcLrlCBOIR35Y1Tq1V/view?usp=sharing Acho que seu problema foi que os métodos de suas classes fazem mais do que deviam fazer, em uma classe no geral podemos dizer que um método escreve a letra i e o outro método coloca o pingo nesse i. Dê uma enxugada nos métodos se um olha se o e-mail está correto ele já fez mais do que o necessário deixe a próxima tarefa para outro método até mesmo se use de classes específicas para cada coisa, se uma classe faz leitura no banco não há necessidade dele validar strings etc... Siga esse truque se um método possui mais até 11 linhas é bom se está com até 22 ele está no seu limite, mais que isso aí o método não está trabalhando como se deve. Incluir arquivos usando classes, não que isso seja errado, mas prefiro usar funções para tal finalidade e classes para coisas corriqueiras da aplicação. Abaixo uma função que se por exemplo você faz: $a = new MinhaClasse(); Sem mesmo você incluir o arquivo a função sabe que o código precisa da classe e faz o anexo dela Requer manipulação do diretório no FindClass para correto funcionamento. Ou seja essa função vai até o diretório class/ [ $findDir ] / $class .php
  15. Omar~

    Erro ao passar array de dados

    Faz do seguinte poste todo o código da classe Admins e Controller e como você faz a instância. Pode ser que o problema não seja nesse contexto que estamos tratando e sim outra coisa, nesse caso possuir todo o código pode ajudar a chegar a raiz do problema. Ou simplesmente diga qual o objetivo a alcançar, talvez possamos chegar a um jeito mais fácil porque essa é a questão da orientação a objeto simplificar o complicado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.