Jump to content

EdCesar

Members
  • Content count

    347
  • Joined

  • Last visited

  • Days Won

    17

Everything posted by EdCesar

  1. EdCesar

    Leitura de porta serial (COM ou LPT) com PHP

    @Fernando Rafael beleza! Faz um teste com essa lib: https://github.com/Xowap/PHP-Serial/blob/develop/examples/dummy.php
  2. EdCesar

    Painel SaaS PHP

    @ajmeireles, joia! Utilizar framework, micro framework, ou criar o seu próprio utilizando pacotes, tem muitas vantagens. Não vou citá-las aqui pois já tem muito conteúdo a respeito. Sobre um "cliente cair na conta de outro", ou qualquer tipo de vazamento de informações, isso vai sempre depender de como esta implementado, não importa se você esta usando ou não um framework. Uma biblioteca de permissões por exemplo, vai evitar de você recriá-la, mas ainda assim é necessário fazer a implementação correta! Se é algo pequeno e você SABE o que esta fazendo, pode fazer tudo com "PHP puro". Mas, geralmente é muito mais rápido e seguro você aprender uma biblioteca de rotas como o fast-route, do que criar a sua própria. E, tempo é dinheiro! Eu faço consultoria, se tiver interesse, no meu perfil esta o meu linkedin para contato e mais detalhes.
  3. EdCesar

    Listar dados de JSON com PHP e Curl

    @juninhogpe, beleza! Faça o seguinte teste: <?php $output= '{"odata.metadata":"http:\/\/ip:porta\/api\/sistema\/$metadata#sistema_interno.sistema_interno_cond_pgto_lista","odata.count":2,"value":[{"cond_pgto":466,"codigo":"000","descricao":"DINHEIRO","taxa":null,"tipo_operacao":"A","desconto":0,"tipo_pgto":0},{"condicoes_pgto":820,"codigo":"002","descricao":"MISTA","taxa":null,"tipo_operacao":"A","desconto":null,"tipo_pgto":10}]}'; $listas = json_decode($output, true); foreach ($listas['value'] as $lista) { echo $lista['codigo']; echo "<br>"; } /* Saida: 000 002 */ A sua iteração esta correta, verifique o valor da variável $output!
  4. EdCesar

    Problemas com PHP

    @douglas79, beleza! Desconsidere as mensagens Undefined index:... Se você acessar a pagina do script direto, esta correto em dar esse erro, pois você não esta mais enviando os dados, do post, do formulário. O erro esta no botão Pesquisar faça a seguinte alteração: Acrescente um type <input type="submit" name="submit" type="button" value="Pesquisar"> Ou mude para um botão <button name="submit">Pesquisar</button>
  5. EdCesar

    Validar e-mail com preg_match()

    Pessoal, beleza! @Dr. Programador, o FILTER_VALIDATE_EMAIL não verifica apenas se existe o arroba. De acordo com a especificação, # e % são caracteres validos, para um email. Se o provedor x,y,z não permite que se utilize, ai é outra historia. A especificação sobre o formato de um email, esta na RFC 5322 https://www.ietf.org/rfc/rfc5322.txt Este wiki é bom: https://en.wikipedia.org/wiki/Email_address#Local-part Resumo: O formato de um email é local-part@domain onde o local-parte pode ter até 64 caracteres e o domínio pode ter no máximo 255 caracteres O local-parte pode usar qualquer um desses caracteres ASCII : maiúsculas e minúsculas latino letras Apara Ze apara z; dígitos 0 para 9; caracteres imprimíveis diferentes de letras e algarismos !#$%&'*+-/=?^_`{|}~; ponto ., desde que não seja o primeiro ou último caractere, a menos que seja citado, e desde que não apareça consecutivamente, a menos que seja citado (por exemplo, John..Doe@example.com não é permitido, mas "John..Doe"@example.comé permitido); Exemplos de regex que respeite a RFC 5322 você pode encontrar aqui https://emailregex.com/ Fazendo alguns testes básicos com FILTER_VALIDATE_EMAIL, ele fez as seguintes validações: t..este@test.com // invalido .este@test.com // invalido t.este@test.com // valido #este@test.com // valido %este@test.com // valido O que esta ok, de acordo com a especificação. Se você vai validar emails de provedores específicos, que não permitem caracteres como "#$%&'", então não deveria usar o FILTER_VALIDATE_EMAIL, a questão que estou levantando, é que o PHP tenta validar os emails, com base na especificação. Não sei até que ponto essa validação nativa do PHP, respeita a RFC, se 100% ou menos. Se alguém já investigou isso, por favor, comente ai!
  6. @antonio_milat, beleza! De olho, não vejo nada de errado. É bobeira, mas não custa nada perguntar, quando você diz que o listener esta chamando duas vezes, nos logs fica: 1. Disparado uma vez Chamado duas vezes Chamado duas vezes também ou 2. Disparado uma vez Chamado duas vezes Chamado duas vezes também Chamado duas vezes Chamado duas vezes também Porque no primeiro caso, estaria certo. Ele foi chamado apenas uma vez, pois o construtor sempre sera executado junto e antes do handle
  7. EdCesar

    Nível de acesso

    @odenilson marques, beleza! Tem muitas formas de fazer esse tratamento, e muitas bibliotecas prontas, mas é provável que você não precise de nada "sofisticado". Uma forma muito simples de resolver isso, é: Quando o usuário logar, você armazena o perfil dele na sessão Crie um arquivo, permissao.php, que contenha uma função para validar as permissões: function permissao($permissoes, $usuario) { $temPermissao = in_array($usuario, $permissoes); if (!$temPermissao) { die('você não tem permissão para acessar essa pagina'); } } E inclua ela em todas as paginas, em que você quer controlar, e então chama essa função, passando quem ter permissão e a sessão do usuário que esta logado: require_once 'permissao.php'; permissao(['supervisor', 'gerente'], $_SESSAO['usuario_perfil']); Simples assim!
  8. EdCesar

    Validar e-mail com preg_match()

    @Dr. Programador, joia! O PHP já tem uma função que faz essa validação: if (filter_var($email, FILTER_VALIDATE_EMAIL)) { return true; } return false;
  9. EdCesar

    Iniciantes devem usar framework?

    @Wesley Balestrini, beleza! Eu entendo que um framework pode acelerar ou atrapalhar sua aprendizagem. Se você for curioso, e procurar entender como as ferramentas fazem suas "magicas", assim como tentar reproduzi-las, ira te ajudar e muito! Caso contrario, pode acelerar o seu trabalho, a aprendizagem não.
  10. EdCesar

    Erro de Sintaxe no Código PHP

    @Walinton, joia! Se não me falha a memória, desde a versão do PHP 5.3, é emitido um aviso que o recurso =& new foi descontinuado, e desde a versão 7.0 ira retornar esse Parse error. Então, ou você refatora $objeto =& new Class para $objeto = new Class, e o que mais for necessário, ou faz um downgrade da sua versão do PHP.
  11. EdCesar

    Utiliza mesma pasta no servidor para vários dominios.

    @Philippe Luis, beleza! Se entendi a pergunta, é só isso mesmo, basta os diferentes dominios apontar para o mesmo servidor, e pronto. Mas dependendo da quantidade de clientes e acessos, o ideal seria cada cliente ter a sua própria aplicação em seu próprio ambiente, cada um em uma VPS, por exemplo.
  12. EdCesar

    Categorias Separadas por ,

    @Marcos_imasters, beleza! Se entendi, Isso deve lhe ajudar: WHERE CONCAT(",", categoria, ",") REGEXP ",(1)," Para mais campos, basta acrescentar | no REGEXP REGEXP ",(1|2|5),"
  13. EdCesar

    Validação em PDO OOP

    @Omar~, beleza! Neste caso, instanciar a classe, vazia, abriria margens para falsos positivos, por exemplo: $validaCadastro = new ValidaCadastro(); echo $validaCadastro->erros(); // Sem erros Eu passei pela validação, sem passar os dados. Isso não deveria ser possível! Alem do mais, para essa regra, os campos nome, email e senha são obrigatórios para validar o cadastrado, nenhum é opcional. Mas o seu comentário só acrescenta, pois esse mesmo racional que você colocou sobre o construtor, muita gente tem.
  14. EdCesar

    Validação em PDO OOP

    @Rodrigo5468, só alguns ajustes... // Aqui eu me confundi, no construtor, vai $_POST, e não $_POST['cadastrar'] $validaCadastro = new ValidaCadastro($_POST); // E aqui fica assim mesmo public function __construct($dados) { $this->validaUsername($dados['username']); } // E no metodo, não precisa mais usar o $_POST, use o $userName public function validaUsername($userName) { if(empty($userName)) { $this->erros[] = "O campo usuário não pode ser vázio."; } // // } class ValidaCadastro extends Registers E ValidaCadastro não herda de Registers
  15. EdCesar

    Validação em PDO OOP

    @Rodrigo5468, joia! Existem muitas formas de fazer, a refatoração não tem limites! Uma boa prática, seria você ter suas validações isoladas, e os métodos realmente fazerem o que dizem que fazem, por exemplo: Eu espero que o método setName apenas sete o nome, e nada mais! Segue uma ideia: class ValidaCadastro { private $erros = []; public function __construct(array $dados) { $this->validaNome($dados['nome']); $this->validaEmail($dados['email']); $this->validaSenha($dados['senha']) } public function erros() { return $this->erros; } public function validaNome($nome) { /** * se o nome estiver vazio */ $this->erros[] = 'O campo usuário não pode ser vázio.'; /** * se o nome tiver menos que três letras */ $this->erros[] = 'É necessário no mínimo 3 (três) caracteres no usuário'; } public function validaEmail() { // } public function validaSenha() { // } } $validaCadastro = new ValidaCadastro($_POST) if ($erros = $validaCadastro->erros()) { foreach ($erros as $erro) { echo $erro; } return; } $register = new Registers(); $register->setUsername($username); $register->setEmail($email); // etc...
  16. EdCesar

    Uso de interface no php

    @Gabriel Heming, joia! Eu tentei dar um +1 no seu comentário, porem retorna o erro: "Sorry, there was a problem reacting to this content". Testei com o Chrome 68.0.3440.106 (Versão oficial) 64 bits e Firefox 61.0.1 (64-bit) .deb Já tinha reportado esse problema, há 5 dias, para o Admin, em https://forum.imasters.com.br/staff/ mas não sei se esse canal esta ativo?
  17. EdCesar

    [Validar] Evitar Cadastro de Dados Duplicados

    @Erick Cerqueira, joia! Existe varias formas de fazer esse tratamento, mas de uma forma muito simples, basta você definir o campo email como unique no banco de dados, dessa forma, caso o email já esteja cadastrado, não ocorrera um novo cadastro. ALTER TABLE usuarios ADD UNIQUE (email);
  18. EdCesar

    Uso de interface no php

    @Marcosvn, joia! Sua dúvida é muito pertinente. Vou tentar responder com um exemplo simples: namespace App\Interfaces { interface CalculadoraInteface { public function somar(array $numeros): float; } } namespace FornecedorXpto { use App\Interfaces\CalculadoraInteface; class Calculadora implements CalculadoraInteface { public function somar(array $numeros): float { $soma = 0; foreach ($numeros as $numero) { $soma+= $numero; } return $soma; } } } namespace NovoFornecedor { use App\Interfaces\CalculadoraInteface; class Calculadora implements CalculadoraInteface { public function somar(array $numeros): float { return array_sum($numeros); } } } namespace { use NovoFornecedor\Calculadora; use App\Interfaces\CalculadoraInteface; class UmaClasseQualquer { public function somar(CalculadoraInteface $calculadora, array $numeros) { return $calculadora->somar($numeros); } } $app = new UmaClasseQualquer; $calculadora = new Calculadora; echo $app->somar($calculadora, [1,2,3]); // 6 } Nesse exemplo, foi definido que uma calculadora deve ter o método somar, que recebe um array como parâmetro e retornar um float, então o FornecedorXpto implementou a CalculadoraInterface e criou uma classe que faz somas. O NovoFornecedor, entendeu que era possível criar uma classe que faz somas, com um algoritmo mais limpo e mais performático, então implementou a CalculadoraInterface e criou também a sua classe Calculadora. O cliente que antes utiliza a calculadora do FornecedorXpto, entendeu que a calculadora do NovoFornecedor era melhor, e fez a troca apenas alterando essa linha no código: use FornecedorXpto\Calculadora; use NovoFornecedor\Calculadora; Como ambos implementam a mesma interface, então existe a garantia de que tudo continuara funcionando. Em resumo, você tem a flexibilidade de a qualquer momento trocar sua calculadora atual, por outra que lhe atender melhor, basta ela seguir o contrato, que é implementar a CalculadoraInterface.
  19. EdCesar

    Juntar os dados do json assim fazendo um array completo

    @juniorppp, joia! Esse retorno de json, me parece não ser a melhor forma de apresentar as informações, o ideia seria trata-lo para trazer apenas um array com as informações. Caso não seja possível corrigir esse buscaCpf.json, e respondendo a sua pergunta: Uma forma de se fazer, é percorrer a lista de arrays, fazendo um merge em outro array vazio, criando então um novo array de uma dimensão: $dados = suaFuncaoParaPegarOsDados(); $arrays = json_decode($dados, true)['cadastro']['dados_pessoais']; $dados = []; foreach ($arrays as $array) { $dados = array_merge( $dados, array_filter($array) ); } print_r($dados); Array ( [nome] => TAINARA TAVARES DE ABREU [nome_mae] => CATIA MARIA DE MORAES TAVARES [nascimento] => 13/01/1989 [sexo] => F [ctps_numero] => 51056 [ctps_serie] => 314 [ctps_ano_emissao] => 2005 [pis] => 129.06951.23-6 [escolaridade] => Ensino Medio completo. [nacionalidade] => Brasileira )
  20. EdCesar

    Atribuir conteúdo Json à variável PHP (RESOLVIDO)

    @markhosbh, joia! A estrutura do json, depende do problema que você esta querendo resolver, o importante é que seja um json valido! Veja só: <?php // Considerando que você tenha uma estrutura de json, valida! $jsonString = '{ "CAMPOS": ["A1_COD", "A1_NOME", "TIPO"], "DADOS": [ ["33436681", "MARCOS ALAN", "REPRESENTANTE"], ["34007644", "MARCOS ALBERTO", "TITULAR"], ["67762840", "MARCOS ALVES", "TITULAR"], ["55178561", "MARCOS ANTONIO", "TITULAR"] ] }'; $array = json_decode($jsonString, true); $novoArray = []; foreach ($array['DADOS'] as $dados) { $novoArray[] = array_combine($array['CAMPOS'], $dados); } echo "<pre>"; print_r($novoArray); Array ( [0] => Array ( [A1_COD] => 33436681 [A1_NOME] => MARCOS ALAN [TIPO] => REPRESENTANTE ) [1] => Array ( [A1_COD] => 34007644 [A1_NOME] => MARCOS ALBERTO [TIPO] => TITULAR ) [2] => Array ( [A1_COD] => 67762840 [A1_NOME] => MARCOS ALVES [TIPO] => TITULAR ) [3] => Array ( [A1_COD] => 55178561 [A1_NOME] => MARCOS ANTONIO [TIPO] => TITULAR ) ) Se esse é o resultado que você precisa, então note que editei a string do json, para ser um json valido. Sendo assim, então você só precisa se certificar de que a função enviaConteudoParaAPI esta retornando um json valido. Você pode utilizar algum serviço, como o https://jsonlint.com/ para validar o seu json
  21. EdCesar

    Atribuir conteúdo Json à variável PHP (RESOLVIDO)

    Precisa mesmo, isso não atenderia? foreach($dados as $valor) { $valor[0] é o código $valor[1] é o nome $valor[2] é o tipo } Mas respondendo a pergunta: Tente isso: $novoArray = []; array_map(function($array) use($campos, &$novoArray) { $novoArray[] = array_combine($campos, $array); }, $dados); print_r($novoArray);
  22. EdCesar

    Notice: Undefined variable

    @Biel., joia! Como não existe registros, então o while nunca sera executado. Sendo assim, o primeiro código não da erro, pois o echo $nome esta dentro do while, e já no segundo código, esta fora; Entendendo isso, você pode tratar assim: echo isset($nome) ? $nome: ''; Ou refatorando o código.
  23. EdCesar

    DELETE

    @Biel., joia! Basta utilizar o mysqli_multi_query, sem o asterisco antes do FROM mysqli_multi_query($con," DELETE FROM tab_aprendiz WHERE id = '5'; DELETE FROM tab_aluno WHERE id = '5' "); Veja mais em: http://docs.php.net/mysqli.multi-query
  24. EdCesar

    Ajuda com script de aleatoriadade

    @JulinhoooO, joia! Seu código não esta muito fácil de entender, mas pelo que entendi, você quer fazer um simples sorteio, com base em duas listas, certo? Veja essa outra ideia: $participantes = ['marcia','joana','joao','paulo']; $participantesFixos = ['bruna','sandra','marcia']; $participantesSorteio = array_merge($participantes, $participantesFixos); // Estou considerando que um participante só pode concorrer uma vez, $participantesSorteio = array_unique($participantesSorteio); $quantidadeSorteio = 3; $sorteados = []; while($quantidadeSorteio--) { $sorteado = mt_rand(0, (count($participantesSorteio) -1)); $sorteados[] = $participantesSorteio[$sorteado]; // remove do sorteio, quem já foi sorteado unset($participantesSorteio[$sorteado]); // reordena a lista $participantesSorteio = array_values($participantesSorteio); } var_dump($sorteados);
  25. EdCesar

    Selecionar produtos que estão em um array()

    @Wagner Martins Bodyboard, joia! Tente isso: $produtoSelecionado = in_array( $row_produtos["id"], array_column($results, 'id') ); if ($produtoSelecionado) { echo "Produto {$row_produtos['id']} selecionado"; }
×

Important Information

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